Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Сейрек массивдер. 3-бөлүк

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Сейрек массивдер. 3-бөлүкМурунку бөлүктөрдө (1, 2) биз глобалдык дарактар ​​жөнүндө сүйлөштүк, бул жерде глобалдыктарды сейрек массивдер катары карайбыз.

Sparse Array маанилердин көбү бирдей мааниге ээ болгон массивдин бир түрү.

Иш жүзүндө, сейрек массивдер көбүнчө ушунчалык чоң болгондуктан, эстутумду бирдей элементтер менен ээлөөнүн эч кандай мааниси жок. Ошондуктан, сейрек массивдерди эстутум бирдей баалуулуктарды сактоого коротпогондой кылып ишке ашыруунун мааниси бар.
Кээ бир программалоо тилдеринде сейрек массивдер тилдин өзүнө кирет, мисалы Ж, MATLAB. Башка программалоо тилдеринде аларды ишке ашырууга мүмкүндүк берген атайын китепканалар бар. C++ үчүн - Эйген жана башка.

Глобалдар сейрек массивдерди ишке ашыруу үчүн жакшы талапкерлер, анткени:

  1. Алар белгилүү түйүндөрдүн гана баалуулуктарын сакташат жана аныкталбагандардын баалуулуктарын сакташпайт;
  2. Түйүндүн маанисине жетүү интерфейси көп өлчөмдүү массив элементине кирүү мүмкүнчүлүгүн канча программалоо тилдери ишке ашырганына абдан окшош.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. Глобалдык - бул маалыматтарды сактоо үчүн кыйла төмөн деңгээлдеги структура, ошондуктан ал укмуштуу ылдамдык мүнөздөмөлөрүнө ээ (аппараттык камсыздоого жараша секундасына жүз миңдегенден он миллиондогон транзакцияларга чейин, төмөндө караңыз). 1)

Глобалдык туруктуу түзүлүш болгондуктан, RAMдын көлөмү жетишсиз болору алдын ала белгилүү болгондо, аларга сейрек массивдерди түзүү мааниси бар.

Сейрек массивди ишке ашыруунун касиеттеринин бири аныкталбаган уячага кирүү мүмкүнчүлүгү берилсе, кандайдыр бир демейки маанини кайтаруу болуп саналат.

Бул функцияны колдонуу менен ишке ашырылышы мүмкүн $GET COS ичинде. Бул мисал 3 өлчөмдүү массивди карайт.

SET a = $GET(^a(x,y,z), defValue)

Кандай тапшырмалар сейрек массивдерди талап кылат жана глобалдар кантип жардам бере алат?

Кошумчалык (байланыштуулук) матрицасы

Мындай матрицалар графиктерди көрсөтүү үчүн колдонулат:

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Сейрек массивдер. 3-бөлүк

Албетте, график канчалык чоң болсо, матрицада ошончолук көп нөл болот. Эгер, мисалы, биз социалдык тармактын графигин алып, аны окшош матрица түрүндө көрсөтсөк, анда ал дээрлик толугу менен нөлдөн турат, б.а. сейрек массив болот.

Set ^m(id1, id2) = 1 
Set ^m(id1, id3) = 1 
Set ^m(id1, id4) = 1 
Set ^m(id1) = 3 
Set ^m(id2, id4) = 1 
Set ^m(id2, id5) = 1 
Set ^m(id2) = 2
....

Бул мисалда биз дүйнөлүк деңгээлде сактайбыз ^m туташуу матрицасы, ошондой эле ар бир түйүндөгү четтердин саны (ким ким менен дос жана досторунун саны).

Графиктеги элементтердин саны 29 миллиондон ашпаса (бул сан 8* көбөйтүндүсү катары алынат максималдуу сызык өлчөмү), башкача айтканда, мындай матрицаларды сактоонун дагы үнөмдүү жолу бит саптары болуп саналат, анткени аларды ишке ашыруу чоң боштуктарды өзгөчө жол менен оптималдаштырат.

Бит саптары менен манипуляциялар функция тарабынан аткарылат $BIT.

; установка бита
SET $BIT(rowID, positionID) = 1
; получение бита
Write $BIT(rowID, positionID)

Мамлекеттик машина өтүү таблицасы

Чектүү автоматтын өтүү графиги кадимки график болгондуктан, чектүү автоматтын өтүү таблицасы жогоруда талкууланган бир эле чектеш матрица болот.

Уюлдук автоматтар

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Сейрек массивдер. 3-бөлүк

Эң белгилүү уюлдук автомат болуп саналат оюн "жашоо", бул өзүнүн эрежелери боюнча (клетканын кошуналары көп болгондо, ал өлөт) сейрек массив болуп саналат.

Стивен Вольфрам уюлдук автоматтар деп эсептейт илимдин жаңы тармагы. 2002-жылы ал 1280 барактан турган «Илимдин жаңы түрү» аттуу китепти басып чыгарды, анда ал уюлдук автоматтардагы жетишкендиктер обочолонбостон, туруктуу жана илимдин бардык тармактары үчүн чоң мааниге ээ экенин кеңири ырастайт.

Компьютерде аткарыла турган ар кандай алгоритм уюлдук автоматтын жардамы менен ишке ашырылышы мүмкүн экендиги далилденген. Уюлдук автоматтар динамикалык чөйрөлөрдү жана системаларды моделдөө, алгоритмдик маселелерди чечүү жана башка максаттар үчүн колдонулат.

Эгерде бизде чоң талаа бар болсо жана биз уюлдук автоматтын бардык аралык абалын жазышыбыз керек болсо, анда глобалдыктарды колдонуунун мааниси бар.

Картография

Сейрек массивдерди колдонууга келгенде менин оюма биринчи келген нерсе - бул карталарды түзүү.

Эреже катары, карталарда бош орундар көп. Эгерде карта чоң пикселдер катары көрсөтүлсө, анда Жердин пикселдеринин 71% океанга ээ болот. Сейрек массив. Ал эми адам колунун эмгектерин гана колдонсоңуз, анда боштук 95% дан ашат.

Албетте, карталарды растрдык массивдер түрүндө эч ким сактабайт, вектордук көрсөтүү колдонулат.
Бирок вектордук карталар деген эмне? Бул чекиттерден турган кадрдын жана полисызыктардын жана көп бурчтуктардын бир түрү.
Негизи пункттардын жана алардын ортосундагы байланыштардын маалымат базасы.

Эң дымактуу карта түзүү миссияларынын бири - биздин галактиканы картага түшүрүү үчүн Gaia Telescope миссиясы. Образдуу айтканда, биздин галактика, бүт аалам сыяктуу, үзгүлтүксүз сейрек массив: сейрек кездешүүчү кичинекей чекиттер - жылдыздар бар чоң боштук мейкиндиктери. Бош орун 99,999999…….%. Галактикабыздын картасын сактоо үчүн глобалдык маалымат базасы тандалган - Кэш.

Мен бул долбоордогу глобалдык түзүлүштөрдүн так түзүмүн билбейм, мен бул нерсеге окшош деп ойлойм:

Set ^galaxy(b, l, d) = 1; Номер звезды по каталогу, если есть
Set ^galaxy(b, l, d, "name") = "Sun"
Set ^galaxy(b, l, d, "type") = "normal" ; варианты blackhole, quazar, red_dwarf и т.д.
Set ^galaxy(b, l, d, "weight") = 14E50
Set ^galaxy(b, l, d, "planetes") = 7
Set ^galaxy(b, l, d, "planetes", 1) = "Mercury"
Set ^galaxy(b, l, d, "planetes", 1, weight) = 1E20
...

Бул жерде b, l, d галактикалык координаттар кеңдик, узундук жана Күнгө чейинки аралык.

Глобалдардын ийкемдүү түзүмү жылдыздардын жана планеталардын керектүү мүнөздөмөлөрүн сактап калууга мүмкүндүк берет, анткени глобалдык негиздер схемасыз.

Биздин ааламдын картасын сактоо үчүн, Caché ийкемдүүлүгү үчүн гана эмес, маалымат агымын абдан тез сактоо жана ошол эле учурда тез издөө үчүн индекс глобалдык көрсөткүчтөрүн түзүү жөндөмдүүлүгү үчүн тандалган.

Биз Жерге кайтып келсек, анда картографиялык долбоорлор глобалдык боюнча түзүлгөн OpenStreetMap XAPI жана OpenStreetMap айрысы - FOSM.

Жакында эле hackathon Caché геомейкиндиктик көрсөткүчтөр ишке ашырылган Геомейкиндиктик. Биз авторлордон ишке ашыруунун чоо-жайы менен макала күтөбүз.

OpenStreetMap XAPIде глобалдык мейкиндик индекстерин ишке ашыруу

Сүрөттөр тартып алынган бул презентация.

Бүткүл жер шары төрт бурчтуктарга бөлүнөт, андан кийин суб-квадраттарга, ал эми суб-квадраттарга бөлүнөт, ж.б. Жалпысынан алганда, биз глобалдык түзүлүштөрдү сактоо үчүн иерархиялык структураны алабыз.

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Сейрек массивдер. 3-бөлүк

Каалаган убакта биз каалаган квадратты дароо сурай алабыз же аны тазалай алабыз, жана бардык кошумча квадраттар да кайтарылат же тазаланат.

Globals боюнча окшош схема бир нече жол менен ишке ашырылышы мүмкүн.

Option 1:

Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 1) = idПервойТочки
Set ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idВторойТочки
...

Option 2:

Set ^m('abacdabcdabacdabcda', 1) = idПервойТочки
Set ^m('abacdabcdabacdabcda', 2) = idВторойТочки
...

Эки учурда тең каалаган деңгээлдеги квадратта жайгашкан упайларды суроо үчүн COS/M колдонуу кыйын эмес. Биринчи вариантта каалаган деңгээлдеги чарчы мейкиндиктерди тазалоо бир аз жеңилирээк болот, бирок бул чанда гана керек.

Төмөнкү деңгээлдеги квадраттардын биринин мисалы:

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Сейрек массивдер. 3-бөлүк

Бул жерде XAPI долбоорунан бир нече глобалдык көрсөткүчтөр бар: глобалдык индекстин өкүлчүлүгү:

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Сейрек массивдер. 3-бөлүк

глобалдык ^ жол пункттарды сактоо үчүн колдонулат полилиниялар (жолдор, чакан дарыялар ж. б.) жана полигондор (жабык аймактар: имараттар, токойлор ж.б.).

Глобалдарда сейрек массивдерди колдонуунун болжолдуу классификациясы.

  1. Биз белгилүү бир объектилердин координаттарын жана алардын абалын сактайбыз (карта түзүү, уюлдук автоматтар)
  2. Биз сейрек матрицаларды сактайбыз.

2-жагдай үчүн) элементке маани берилбеген конкреттүү координатты талап кылганда, биз демейки сейрек массив элементинин маанисин алышыбыз керек.

Глобалдарда көп өлчөмдүү матрицаларды сактоодо алган бонустар

Катарлардын, тегиздиктердин, кубтардын ж. Бүтүн сандык индекстер колдонулган учурларда, катарлардын, тегиздиктердин, кубтардын ж.б. көп болгон мейкиндиктин бөлүктөрүн тез алып салуу жана/же алуу мүмкүнчүлүгү пайдалуу болушу мүмкүн.

команда өлтүрүү биз бир элементти же сапты, ал тургай бүтүндөй бир тегиздикти жок кыла алабыз. Глобалдардын касиеттеринин аркасында бул абдан тез ишке ашат – элементти элементтерди алып салууга караганда миң эсе тезирээк.

Сүрөт глобалдык үч өлчөмдүү массивди көрсөтөт ^a жана жок кылуунун ар кандай түрлөрү.

Глобалдар маалыматтарды сактоо үчүн кенч-кылычтар болуп саналат. Сейрек массивдер. 3-бөлүк

Белгилүү индекстерди колдонуу менен мейкиндиктин бөлүктөрүн тандоо үчүн, сиз буйрукту колдоно аласыз кошулуу.

Column өзгөрмөсүнө матрицалык тилкени тандоо:

; Зададим трёхмерный разреженный массив 3x3x3
Set ^a(0,0,0)=1,^a(2,2,0)=1,^a(2,0,1)=1,^a(0,2,1)=1,^a(2,2,2)=1,^a(2,1,2)=1
Merge Column = ^a(2,2)
; Выведем переменную Column
Zwrite Column

корутундусу:

Column(0)=1
Column(2)=1

Column өзгөрмөлөрүнүн кызыктуусу, бизде сейрек массив бар, ага да кирүү керек $GET, анткени демейки маанилер анда сакталбайт.

Мейкиндиктин бөлүктөрүн тандоо функцияны колдонуу менен чакан программа аркылуу да жасалышы мүмкүн $Order. Бул өзгөчө индекстери квантталбаган мейкиндиктерде (картография) ыңгайлуу.

жыйынтыктоо

Азыркы мезгил жаңы дымактуу милдеттерди коюп жатат. Графиктер миллиарддаган чокулардан, карталар миллиарддаган чекиттерден турушу мүмкүн, ал тургай кээ бирлери уюлдук автоматтарда өз ааламын иштетүүнү каалашы мүмкүн (1, 2).

Сейрек массивдерден алынган маалыматтардын көлөмү мындан ары RAMга батпай калганда, бирок алар менен иштөө керек болсо, анда глобалдык жана COS боюнча окшош долбоорлорду ишке ашыруу мүмкүнчүлүгүн карап чыгуу керек.

Конул бурганын учун рахмат! Суроолоруңузду жана каалооңузду комментарийлерде күтөбүз.

баш тартуу: Бул макала жана ага менин комментарийлерим менин оюм жана InterSystems Corporation расмий позициясына эч кандай тиешеси жок.

Source: www.habr.com

Комментарий кошуу