Eelmistes osades (, ) rÀÀkisime globaalidest kui puudest, sel korral vaatleme globaale harudena.
on massiivi tĂŒĂŒp, kus enamus vÀÀrtusi on samad.
Praktikas esinevad tihti nii suured harulised massiivid, et pole mĂ”tet neid mĂ€lu jaotada ĂŒhesuguste elementidega. SeetĂ”ttu on mĂ”istlik implementerida harulisi massiive nii, et mĂ€lu ei kuluks sama vÀÀrtuse hoidmiseks.
MĂ”nes programmeerimiskeeles on harulised massiivid keele osa, , . Teistes programmeerimiskeeltes on spetsiaalsed teegid, mis vĂ”imaldavad neid teostada. C++ jaoks â jne.
Globaalid on head kandidaadid haruliste massiivide rakendamiseks, kuna:
- Need hoiavad vÀÀrtusi ainult teatud sÔlmedes ja ei hoia defineerimata vÀÀrtusi;
- SÔlme vÀÀrtusele juurdepÀÀsu liides sarnaneb vÀga sellele, kuidas paljudes programmeerimiskeeltes on rakendatud juurdepÀÀs mitmemÔÔtmelise massiivi elemendile.
Set ^a(1, 2, 3)=5 Write ^a(1, 2, 3) - Globaal on piisavalt madala taseme struktuur andmete salvestamiseks, seega omab see erakordseid kiirusnĂ€itajaid (sajad tuhanded kuni kĂŒmned miljonid tehingud sekundis sĂ”ltuvalt riistvarast, vt. )
Kuna globaal on pĂŒsiv struktuur, on mĂ”tet luua haruldasi massiive siis, kui on eelnevalt teada, et pĂ€risraha maht on ebapiisav.
Ăheks haruldaste massiivide rakenduse omaduseks on mingi vaikimisi vÀÀrtuse tagastamine, kui pöördutakse mÀÀratlemata mĂ€lurakenduse poole.
Seda saab rakendada, kasutades funktsiooni COSis. Antud nÀites on kÀsitletud kolme mÔÔtme massiivi.
SET a = $GET(^a(x,y,z), defValue)Millistes ĂŒlesannetes on vajalikud haruldased massiivid ja kuidas globaalid vĂ”ivad abiks olla?
Sidematriits (ĂŒhenduse)
kasutatakse graafide esitamiseks:

On ilmne, et mida suurem on graaf, seda rohkem nullvÀÀrtusi on matriitsis. NÀiteks, kui vÔtta sotsiaalvÔrgustiku graaf ja esitada see sarnase matriitsina, koosneb see peaaegu tÀielikult nullidest, see tÀhendab, et see on haruldane massiiv.
Sea ^m(id1, id2) = 1
Sea ^m(id1, id3) = 1
Sea ^m(id1, id4) = 1
Sea ^m(id1) = 3
Sea ^m(id2, id4) = 1
Sea ^m(id2, id5) = 1
Sea ^m(id2) = 2
....
Selles nĂ€ites salvestame globaalselt ^m ĂŒhenduvuse maatriksi ja iga sĂ”lme kĂŒlgnevate (kellega keegi sĂ”brustab ja sĂ”prade arvu).
Kui graafis on elemente mitte rohkem kui 29 miljonit (see number vĂ”etakse 8 * ), siis on veelgi ökonoomsem viis selliste maatriksite hoidmiseks â bitijad, kuna nende rakenduses optimeeritakse suurte vahedega spetsiaalselt.
Bitijad manipuleerimise teostab funktsioon .
; bit'i seadmine
SEA $BIT(rowID, positionID) = 1
; bit'i saamine
Kirjuta $BIT(rowID, positionID)
LĂ”ppautomaatide ĂŒleminekute tabel
Kuna lĂ”ppautomaatide ĂŒleminekute graaf on tavaline graaf, on ka lĂ”ppautomaatide ĂŒleminekute tabel sama, mis eelpool mainitud kĂŒlgnevuse maatriks.
Rakendused automaatide

KĂ”ige tuntum rakendusautomaat on , mis oma reeglite tĂ”ttu (kui rakendusel on palju naabreid â see sureb) kujutab endast hĂ”re massiivi.
Steven Wolfram peab rakenduste automaatide olemuseks . 2002. aastal avaldab ta 1280-lehekĂŒljelise raamatu «A New Kind of Science», kus ta laialdaselt argumenteerib, et rakkuautomaadid ei ole eraldiseisvad saavutused, vaid on vĂ€ga pĂŒsivad ja olulised kĂ”igis teaduse valdkondades.
On tĂ”estatud, et iga arvutis töötav algoritm saab rakkuautomaadi kaudu teostatud. Rakkautomaate kasutatakse dĂŒnaamiliste keskkondade ja sĂŒsteemide modelleerimiseks, algoritmiliste probleemide lahendamiseks ja muudel eesmĂ€rkidel.
Kui meil on suur vÀli ja peame salvestama kÔik rakkuautomaadi vahepealsed olekud, on mÔistlik kasutada globaale.
Kaardistus
Esimene asi, mis mulle meelde tuleb, kui rÀÀkida haruldaste massiivide kasutamisest, on kaardistamise ĂŒlesanded.
Tavaliselt on kaartidel palju tĂŒhja ruumi. Kui kaarti kujutada suurte pikslitena, siis 71% Maa pikslitest oleks ookeani katte all. Haruldane massiiv. Ja kui joonistada ainult inimkĂ€te looming, siis on tĂŒhja ruumi rohkem kui 95%.
Loomulikult ei hoia keegi kaarte rasterdatana, kasutatakse vektorgraafikat.
Aga mis on vektorkaardid? Need koosnevad raamistikust ning punktidest, polĂŒlinetest ja polĂŒgoonidest.
Tegelikult on see punktide ja nendevaheliste seoste andmebaas.
Ăks ambitsioonikamaid kaardistamise ĂŒlesandeid on meie galaksie kaardistamine Gaia teleskoobi abil. Kujundlikult öeldes on meie galaktika, nagu kogu universum, pidev hĂ”re mass: tohutud tĂŒhjad ruumid, kus leidub harva vĂ€ikeseid punkte â tĂ€hti. TĂŒhja ruumi on 99,999999âŠâŠ.%. Meie galaktika kaardi salvestamiseks on valitud globaalide andmebaas â CachĂ©.
Ma ei tea selle projekti globaalide tÀpset struktuuri, kuid vÔin eeldada, et see on midagi sarnast jÀrgmisele:
Set ^galaxy(b, l, d) = 1; TĂ€rni number kataloogis, kui see on olemas
Set ^galaxy(b, l, d, "name") = "PĂ€ike"
Set ^galaxy(b, l, d, "type") = "tavaline"; variandid: must auk, kvasaari, punane kÀÀbus jne.
Set ^galaxy(b, l, d, "weight") = 14E50
Set ^galaxy(b, l, d, "planetes") = 7
Set ^galaxy(b, l, d, "planetes", 1) = "Merkuur"
Set ^galaxy(b, l, d, "planetes", 1, weight) = 1E20
...
Kus b, l, d on ja kaugus PĂ€ikesest.
Globaalide paindlik struktuur vÔimaldab sÀilitada kÔiki vajalikke tÀhtede ja planeetide omadusi, kuna globaalide alused on skeemivabad (scheme-less).
Meie universumi kaardi hoidmiseks valiti Caché mitte ainult paindlikkuse, vaid ka selle vÔime tÔttu salvestada andmevooge vÀga kiiresti, samal ajal luues indekseerimise globaalid kiireks otsimiseks.
Kui tagasi Maale tulla, siis on globaalides loodud kaardistamisprojektid ja OpenStreetMapi fork â .
Hiljuti rakendati georuumilisi indekseid . Ootame artikli autoritelt rakenduse ĂŒksikasju.
Ruumiliste indeksite rakendamine globaalil OpenStreetMap XAPI
Pildid on saadud .
Kogu Maapind jaguneb ruutudeks, siis alakategooriateks ning alakategooriad jaotatakse veelgi. LÔppkokkuvÔttes saame hierarhilise struktuuri, mille jaoks on globaalid loodud.

Igal ajal saame peaaegu koheselt nÔuda vajalikku ruutu vÔi selle puhastada, samal ajal kui kÔik alakategooriad tagastatakse vÔi puhastatakse.
Sarnast skeemi globaalides saab rakendada mitmel viisil.
Variant 1:
MÀÀrake ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 1) = idEsimesePunkti
MÀÀrake ^m(a, b, a, c, d, a, b,c, d, a, b, a, c, d, a, b,c, d, a, 2) = idTeisePunkti
...Variant 2:
MÀÀrake ^m('abacdabcdabacdabcda', 1) = idEsimesePunkti
MÀÀrake ^m('abacdabcdabacdabcda', 2) = idTeisePunkti
...MĂ”lemas olukorras ei ole COS/M-is raskusi nĂ”uda punkte, mis asuvad mistahes taseme ruudis. Esimeses variandis on ruutude tĂŒkkide puhastamine mistahes tasemel veidi lihtsam, kuid see on harva vajalik.
NĂ€ide ĂŒhest madalama taseme ruudust:

Siin on mÔned globaalsed objektid projektist XAPI: indeksi esitamine globaalsetes:

Globaal ^way kasutatakse punktide salvestamiseks (teed, vĂ€iksed jĂ”ed jne) ja polĂŒgoonide (sulguvad alad: hooned, metsad jne).
HÀmmastav klassifikatsioon hÔredate massiivide kasutamisest globaalsetes.
- Me salvestame teatud objektide koordinaadid ja nende seisundid (kaardistamine, rakuautomaatide puhul)
- Me salvestame hÔredaid maatrikseid.
Juhtumi 2 korral, kui nÔutakse teatud koordinaati, kus elemendile ei ole vÀÀrtust mÀÀratud, peame saama hÔreda massiivi elemendi vaikevÀÀrtuse.
Boonused, mida me saame, kui salvestame mitmemÔÔtmelisi maatrikseid globaalsetes
Kiirelt saab eemaldada ja/vÔi valida ruumide osi, mis on jagatud ridade, tasandeid, kuubikute jne jÀrgi. Kohandatud tervete indeksite kasutamisel vÔib olla kasulik vÔimalus kiiresti eemaldada ja/vÔi valida ruumide osi, mis on jagatud ridade, tasandeid, kuubikute jne jÀrgi.
KĂ€sk saame eemaldada nii eraldi elemendi, rea kui ka terve tasandi. Globalide omaduste tĂ”ttu toimub see vĂ€ga kiiresti â tuhandetes kordadest kiiremini kui elementi kaupa eemaldamine.
Joonisel on kujutatud kolme mÔÔtmega massiivi globaalis ^a ja erinevad eemaldamisviisid.

Ruumide osade valimiseks tuntud indeksite jÀrgi saab kasutada kÀsku .
Veeru valimine maatriksist muutuja Column:
; MÀÀrame kolme mÔÔtmega hÔreda massiivi 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
Kombineeri Column = ^a(2,2)
; VĂ€ljastame muutuja Column
Zwrite Column
VĂ€ljund:
Column(0)=1
Column(2)=1
Huvitaval kombel on muutuja Column samuti saavutanud hÔreda massiivi, millele tuleb viidata ka lÀbi , kuna vaikimisi vÀÀrtused selles ei hoitakse.
Ruumide osade valimine vÔib toimuda ka vÀikese programmi kaudu, kasutades funktsiooni . See on eriti mugav ruumides, mille indeksid ei ole kvantitud (kaardistamine).
KokkuvÔte
TÀnapÀeva ajad toovad uusi ambitsioonikaid vÀljakutseid. Graafid vÔivad koosneda miljarditest tipudest, kaardid miljarditest punktidest ning keegi vÔib isegi soovida kÀivitada omaenda universumi rakenduste pÔhjal (, ).
Kui hajusate massiivide andmemaht ei mahu enam operatiivmÀlu, kuid nendega tuleb töötada, tuleks kaaluda selliste projektide rakendamist globaalselt ja COS-is.
AitĂ€h tĂ€helepanu eest! Ootame teie kĂŒsimusi ja soove kommentaarides.
MĂ€rkus: Antud artikkel ja minu kommentaarid sellele on minu arvamus ja ei oma seost InterSystems korporatsiooni ametliku positsiooniga.
Allikas: habr.com
