Globalak datuak gordetzeko altxor-ezpatak dira. Array urriak. 3. zatia

Globalak datuak gordetzeko altxor-ezpatak dira. Array urriak. 3. zatiaAurreko zatietan (1, 2) globalak zuhaitz gisa hitz egin dugu, honetan globalak array urri gisa ikusiko ditugu.

Array urrikoa balio gehienek balio bera hartzen duten array mota bat da.

Praktikan, array urriak hain handiak izaten dira askotan, ezen memoria elementu berdinekin okupatzeak ez duela balio. Horregatik, zentzuzkoa da array urriak ezartzea, memoria balio berdinak gordetzeko alferrik gal ez den moduan.
Programazio-lengoaia batzuetan, array eskasak hizkuntzan bertan sartzen dira, adibidez, J, MATLAB. Beste programazio-lengoaia batzuek liburutegi bereziak dituzte horiek inplementatzeko aukera ematen dutenak. C++-rako - Berezkoa eta abar.

Globalak hautagai onak dira array urriak ezartzeko, zeren eta:

  1. Nodo jakin batzuen balioak gordetzen dituzte eta ez dituzte zehaztu gabekoen balioak gordetzen;
  2. Nodo baten balioa atzitzeko interfazea dimentsio anitzeko array-elementu baterako sarbidea inplementatzen duten programazio-lengoaiek oso antzekoa da.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. Global nahiko maila baxuko egitura bat da datuak gordetzeko, beraz, abiadura ezaugarri bikainak ditu (segundoko ehunka milatik hamarnaka milioi transakzio, hardwarearen arabera, ikus behean). 1)

Globala egitura iraunkorra denez, zentzuzkoa da haietan array urriak sortzea RAM kopurua nahikoa ez dela aldez aurretik jakitea denean.

Array urriko inplementazioen propietateetako bat balio lehenetsiren bat itzultzea da zehaztu gabeko gelaxka batera sarbidea egiten bada.

Hau funtzioa erabiliz inplementa daiteke $LORTU COS-en. Adibide honek 3 dimentsioko array bat hartzen du kontuan.

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

Zer zereginek array urriak behar dituzte eta nola lagundu dezakete globalek?

Aldakortasun (konektibitate) matrizea

Halako matrizeak grafikoak adierazteko erabiltzen da:

Globalak datuak gordetzeko altxor-ezpatak dira. Array urriak. 3. zatia

Jakina, grafikoa zenbat eta handiagoa izan, orduan eta zero gehiago egongo dira matrizean. Adibidez, sare sozialeko grafiko bat hartu eta antzeko matrize baten moduan aurkezten badugu, ia osorik zeroz osatuta egongo da, hau da. array urri bat izango da.

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
....

Adibide honetan, globalki aurrezten dugu ^m konektibitate-matrizea, baita nodo bakoitzeko ertz kopurua ere (nor den norekin lagun eta lagun kopurua).

Grafikoko elementu kopurua 29 milioi baino gehiago ez bada (zenbaki hau 8 *-ren biderkadura gisa hartzen da gehienezko lerroaren tamaina), hau da, matrizeak gordetzeko are modu ekonomikoago bat bit-kateak dira, haien ezarpenak hutsune handiak modu berezi batean optimizatzen baititu.

Bit-kateekin manipulazioak funtzioak egiten ditu $ BIT.

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

Egoera-makinen trantsizio-taula

Automata finitu baten trantsizio-grafoa grafiko arrunta denez, orduan automata finituaren trantsizio-taula goian aztertutako aldameneko matrize bera da.

Automata zelularrak

Globalak datuak gordetzeko altxor-ezpatak dira. Array urriak. 3. zatia

Automata zelularrik ospetsuena da "Bizitza" jokoa, bere arauengatik (zelula batek bizilagun asko dituenean, hil egiten da) array urri bat da.

Stephen Wolfram-ek uste du automata zelularrak direla zientzia arlo berria. 2002an, 1280 orrialdeko liburu bat argitaratu zuen, A New Kind of Science, eta bertan dio modu zabalean zelula-automateen aurrerapenak ez direla isolatuak, baizik eta iraunkorrak direla eta inplikazio handiak dituztela zientziaren arlo guztietan.

Frogatuta dago ordenagailu batean exekuta daitekeen edozein algoritmo inplementa daitekeela automata zelularra erabiliz. Automata zelularrak ingurune eta sistema dinamikoak modelatzeko, problema algoritmikoak ebazteko eta beste helburu batzuetarako erabiltzen dira.

Eremu izugarria badugu eta automata zelular baten tarteko egoera guztiak erregistratu behar baditugu, zentzuzkoa da globalak erabiltzea.

Kartografia

Array urriak erabiltzeko orduan burura etortzen zaidan lehenengo gauza mapa lanak dira.

Oro har, leku huts asko dago mapetan. Mapa pixel handi gisa irudikatzen bada, Lurraren pixelen % 71 ozeanoak hartuko du. Array urria. Eta giza eskuen lanak soilik aplikatzen badituzu, hutsunea % 95 baino gehiago izango da.

Jakina, inork ez ditu mapak biltegiratzen arraster-array moduan, irudikapen bektoriala erabiltzen da.
Baina zer dira mapa bektorialak? Hau puntuz osatutako marko eta polilerro eta poligono moduko bat da.
Funtsean, puntuen eta haien arteko konexioen datu-base bat.

Kartografia-misio handienetako bat Gaia Telescope misioa da gure galaxia mapatzeko. Figurakoki hitz eginez, gure galaxia, unibertso osoa bezala, etengabeko sorta urri bat da: hutsuneko espazio erraldoiak eta horietan puntu txiki arraroak dauden - izarrak. Espazio hutsa % 99,999999 da. Gure galaxiaren mapa gordetzeko, datu-base global bat aukeratu zen - Caché.

Ez dakit proiektu honetako globalen egitura zehatza, pentsa dezaket antzeko zerbait dela:

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
...

Non b, l, d dauden koordenatu galaktikoak latitudea, longitudea eta Eguzkiarekiko distantzia.

Globalen egitura malguak izarren eta planeten beharrezko ezaugarriak gordetzeko aukera ematen du, globalen oinarriak eskemarik gabekoak baitira.

Gure unibertsoaren mapa gordetzeko, Caché aukeratu zen bere malgutasunagatik ez ezik, datu-jario bat oso azkar gordetzeko duen gaitasunagatik ere, eta, aldi berean, bilaketa azkarrak egiteko indize globalak sortzen zituen.

Lurrera itzultzen bagara, proiektu kartografikoak sortu ziren globaletan OpenStreetMap XAPI eta OpenStreetMap-en sardexka - FOSM.

Duela gutxi martxan hackathon Caché indize geoespazialak ezarri ziren Geospatial. Egileen artikulu baten zain gaude ezarpenaren xehetasunekin.

Indize espazialak global batean ezartzea OpenStreetMap XAPI-n

Bertatik ateratako argazkiak aurkezpen hau.

Globo osoa karratuetan banatzen da, gero azpikoadroetan, eta azpikoadroak azpiazpikarratuetan, etab. Oro har, egitura hierarkikoa lortzen dugu zein globalak sortzen diren gordetzeko.

Globalak datuak gordetzeko altxor-ezpatak dira. Array urriak. 3. zatia

Edozein unetan, ia berehala eskatu dezakegu nahi duzun laukia edo garbitu, eta azpi-lauki guztiak ere itzuli edo garbitu egingo dira.

Globalen antzeko eskema bat hainbat modutan inplementa daiteke.

Aukera 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ВторойТочки
...

Aukera 2:

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

Bi kasuetan, ez da zaila COS/M erabiltzea edozein mailatako plaza batean kokatutako puntuak eskatzeko. Zertxobait errazagoa izango da edozein mailatan espazio karratuak garbitzea lehen aukeran, baina hori oso gutxitan beharrezkoa da.

Behe mailako laukietako baten adibide bat:

Globalak datuak gordetzeko altxor-ezpatak dira. Array urriak. 3. zatia

Eta hona hemen XAPI proiektuko hainbat global: globalen indize baten irudikapena:

Globalak datuak gordetzeko altxor-ezpatak dira. Array urriak. 3. zatia

globala ^bide puntuak gordetzeko erabiltzen da polilerroak (errepideak, ibai txikiak...) eta poligonoak (eremu itxiak: eraikinak, basoak, etab.).

Array urrien erabilera globaletan gutxi gorabeherako sailkapena.

  1. Zenbait objekturen koordenatuak eta haien egoerak gordetzen ditugu (mapaketa, automata zelularrak)
  2. Matrize urriak gordetzen ditugu.

2. kasurako, elementuari baliorik esleitzen ez zaion koordenatu zehatz bat eskatzerakoan, array-elementu lehenetsiaren balioa lortu behar dugu.

Dimentsio anitzeko matrizeak globaletan gordetzean jasotzen ditugun hobariak

Kendu eta/edo hautatu errenkadaren, planoen, kuboen etab. multiplo diren espazio zatiak. Zenbaki osoen indizeak erabiltzen diren kasuetarako, errenkaden, planoen, kuboen eta abarren multiploak diren espazio zatiak azkar kentzeko eta/edo eskuratzeko gaitasuna erabilgarria izan daiteke.

taldea Kill elementu bakar bat edo errenkada bat edo plano oso bat ere ezaba ditzakegu. Globalen propietateei esker, hori oso azkar gertatzen da - elementuz elementu kentzea baino milaka aldiz azkarrago.

Irudiak hiru dimentsioko array bat erakusten du global batean ^a eta ezabaketa mota desberdinak.

Globalak datuak gordetzeko altxor-ezpatak dira. Array urriak. 3. zatia

Indize ezagunak erabiliz espazio zatiak hautatzeko, komandoa erabil dezakezu Batu.

Matrize-zutabe bat hautatzea Zutabe aldagaian:

; Зададим трёхмерный разреженный массив 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

Ondorioa:

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

Zutabe aldagaiari buruz interesgarria dena zera da: array urri bat ere badugula, hau ere bidez sartu behar da. $LORTU, balio lehenetsiak ez baitira bertan gordetzen.

Espazio zatiak hautatzea programa txiki baten bidez ere egin daiteke funtzioa erabiliz $Order. Hau bereziki komenigarria da indizeak kuantizatuta ez dauden espazioetan (kartografia).

Ondorioa

Egungo garaiak asmo handiko zeregin berriak planteatzen ditu. Grafikoak milaka milioi erpinez osatuta egon daitezke, mapak milaka milioi puntuz osatuta egon daitezke, eta batzuek beren unibertsoa automata zelularretan exekutatu nahi izan dezakete (1, 2).

Array urriko datuen bolumena RAMan sartu ezin denean, baina haiekin lan egin behar duzunean, merezi du kontuan hartzea global eta COSetan antzeko proiektuak ezartzeko aukera.

Eskerrik asko zure arretagatik! Zure galderen eta nahien zain gaude iruzkinetan.

Lege-oharra: Artikulu hau eta nire iruzkinak nire iritzia dira eta ez dute zerikusirik InterSystems Corporation-en posizio ofizialarekin.

Iturria: www.habr.com

Gehitu iruzkin berria