Iiglobals ngamakrele okugcina idatha. Uluhlu olunqabileyo. Icandelo lesi-3

Iiglobals ngamakrele okugcina idatha. Uluhlu olunqabileyo. Icandelo lesi-3Kwiindawo ezidlulileyo (1, 2) sithethe ngeeglobals njengemithi, kule siza kujonga iiglobals as sparse arrays.

Sparse Array luhlobo loluhlu apho uninzi lwamaxabiso luthatha ixabiso elifanayo.

Ngokwesiqhelo, ii-arrays ezinqabileyo zihlala zinkulu kangangokuba akukho sizathu sokuhlala kwimemori ngezinto ezifanayo. Ke ngoko, iyavakala ukumilisela uluhlu olufutshane ngendlela yokuba inkumbulo ingachithwa ekugcineni amaxabiso afanayo.
Kwezinye iilwimi zeprogram, i-sarse arrays ibandakanyiwe kulwimi ngokwalo, umzekelo kuJ, MATLAB. Ezinye iilwimi zenkqubo zinamathala eencwadi akhethekileyo akuvumela ukuba uwaphumeze. Ye-C++ - Okwakho nabanye.

Iiglobals ngabaviwa abalungileyo ekuphumezeni i-sarse arrays kuba:

  1. Bagcina amaxabiso eendawo ezithile kuphela kwaye abawagcini amaxabiso angachazwanga;
  2. Ujongano lokufikelela kwixabiso le-node lufana kakhulu nokuba zingaphi iilwimi zokuprograma eziphumeza ukufikelela kwizinto ezininzi zoluhlu.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. I-Global sisakhiwo esikwinqanaba elisezantsi lokugcina idatha, ngoko ke ineempawu zesantya ezibalaseleyo (ukusuka kumakhulu amawaka ukuya kwishumi lezigidi zentengiselwano ngomzuzwana, ngokuxhomekeke kwi-hardware, jonga ngezantsi). 1)

Ekubeni ihlabathi liyisakhiwo esiqhubekayo, kunengqiqo ukudala i-arrays enqabileyo kubo xa iyaziwa kwangaphambili ukuba isixa se-RAM asiyi kwanela.

Enye yeepropathi zomiliselo lwe-sarse array kukubuyisela ixabiso elimiselweyo ukuba ufikelelo lwenziwe kwiseli engachazwanga.

Oku kunokwenziwa kusetyenziswa umsebenzi $GET kwi-COS. Lo mzekelo uqwalasela uluhlu lwe-3-dimensional.

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

Yeyiphi imisebenzi efuna uluhlu oluncinci kwaye iiglobals zinganceda njani?

I-adjacency (uqhagamshelwano) matrix

Iimatriki ezinjalo isetyenziselwa ukubonisa iigrafu:

Iiglobals ngamakrele okugcina idatha. Uluhlu olunqabileyo. Icandelo lesi-3

Ngokucacileyo, igrafu inkulu, i-zeros iya kubakho kwi-matrix. Ukuba, umzekelo, sithatha igrafu yenethiwekhi yoluntu kwaye siyibonise ngendlela ye-matrix efanayo, ngoko iya kuba phantse ngokupheleleyo i-zeros, i.e. iya kuba uluhlu olufutshane.

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

Kulo mzekelo, sisindisa kwihlabathi jikelele ^m uqhagamshelo lwematriki, kunye nenani leecala kwindawo nganye (ngoobani abahlobo kunye nenani labahlobo).

Ukuba inani leezakhi kwigrafu alikho ngaphezu kwezigidi ezingama-29 (eli nani lithathwa njengemveliso ye-8 * ubungakanani bomgca ophezulu), oko kukuthi, indlela eyongayo yokugcina i-matrices enjalo i-bit strings, ekubeni ukuphunyezwa kwabo kwandisa izikhewu ezinkulu ngendlela ekhethekileyo.

Ukuguqulwa ngeentambo ezincinci zenziwa ngumsebenzi $BIT.

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

Itheyibhile yokutshintsha komatshini karhulumente

Ekubeni igrafu yenguqu ye-automaton egqityiweyo yigrafu eqhelekileyo, ngoko itheyibhile yenguqu ye-automaton egqityiweyo ikwayi-matrix ekufutshane exoxwe ngayo ngasentla.

I-automata yeselula

Iiglobals ngamakrele okugcina idatha. Uluhlu olunqabileyo. Icandelo lesi-3

Eyona automaton yeselula idumileyo yi umdlalo "Ubomi", leyo, ngenxa yemithetho yayo (xa iseli inabamelwane abaninzi, iyafa) i-sarse array.

UStephen Wolfram ukholelwa ukuba i-automata yeselula icandelo elitsha lesayensi. Kwi-2002, wapapasha incwadi enamaphepha angama-1280, Uhlobo olutsha lweSayensi, apho exoxa ngokubanzi ukuba ukuqhubela phambili kwi-automata yeselula ayiyedwanga, kodwa inyamezele kwaye inefuthe elikhulu kuzo zonke iinkalo zesayensi.

Kuye kwangqinwa ukuba nayiphi na i-algorithm ephunyeziweyo kwikhompyutheni inokuphunyezwa ngokusebenzisa i-automaton yeselula. I-automata yeselula isetyenziselwa ukulinganisa iimeko eziguquguqukayo kunye neenkqubo, ukusombulula iingxaki ze-algorithmic kunye nezinye iinjongo.

Ukuba sinentsimi enkulu kwaye kufuneka sirekhode onke amazwe aphakathi kwe-automaton yeselula, ngoko kuyavakala ukusebenzisa i-globals.

Ukuzoba

Into yokuqala ethi qatha engqondweni yam xa kufikwa ekusebenziseni i-sarse arrays yimisebenzi yemephu.

Njengomthetho, kukho indawo eninzi engenanto kwiimephu. Ukuba imephu imelwe njengeepikseli ezinkulu, ngoko ke i-71% yeepikseli zoMhlaba ziya kuhlala elwandle. Uluhlu olunqabileyo. Kwaye ukuba usebenzisa kuphela imisebenzi yezandla zomntu, ke indawo engenanto iya kuba ngaphezu kwe-95%.

Ngokuqinisekileyo, akukho mntu ugcina iimephu ngendlela ye-raster arrays isetyenzisiweyo.
Kodwa zithini iimephu zevekhtha? Olu luhlobo lwesakhelo kunye neepolylines kunye neepolygons ezibandakanya amanqaku.
Ngokusisiseko isiseko sedatha samanqaku kunye noqhagamshelwano phakathi kwabo.

Olona hambo lunebhongo lwemephu yimishini yeGaia Telescope yokwenza imaphu yomnyele wethu. Xa sithetha ngokufuziselayo, umnyele wethu, njengendalo iphela, luluhlu oluthe gqolo olunqabileyo: izithuba ezinkulu ezingenanto apho kukho iindawo ezincinci ezinqabileyo - iinkwenkwezi. Indawo engenanto yi-99,999999…….%. Ukugcina imephu yomnyele wethu, kukhethwe idatabase yehlabathi - iCaché.

Andazi ukuba ubume behlabathi jikelele kule projekthi, ndinokucinga ukuba yinto efana nale:

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

Apho u-b, l, d akhoyo igalaksi ilungelelanisa isibanzi, ubude kunye nomgama ukuya eLangeni.

Ulwakhiwo oluguqukayo lweeglobals lukuvumela ukuba ugcine naziphi na iimpawu eziyimfuneko zeenkwenkwezi kunye neeplanethi, kuba iziseko zeglobals zincinci.

Ukugcina imephu yendawo yonke, i-Caché ayikhethwanga kuphela ngenxa yokuguquguquka kwayo, kodwa kunye nokukwazi kwayo ukugcina umlambo wedatha ngokukhawuleza, ngelixa kwangaxeshanye idala i-index globals yokukhangela ngokukhawuleza.

Ukuba sibuyela eMhlabeni, ke iiprojekthi zekhathuni zenziwe kwiiglobals OpenStreetMap XAPI kunye nefolokhwe ye-OpenStreetMap - IFOSM.

Kutshanje Hackathon Cache Izalathisi ze-geospatial zaphunyezwa Geospatial. Silindele inqaku elivela kubabhali ngeenkcukacha zokuphunyezwa.

Ukuphunyezwa kwezalathisi zesithuba kwihlabathi kwi-OpenStreetMap XAPI

Imifanekiso ethathwe kwi le ntetho.

Iglowubhu yonke yahlulwe yaba zizikwere, emva koko i-sub-squares, kunye ne-sub-squares ibe yi-sub-squares, njalo njalo. Ngokubanzi, sifumana ulwakhiwo olunoluhlu lokugcinwa apho iiglobals zenziwe.

Iiglobals ngamakrele okugcina idatha. Uluhlu olunqabileyo. Icandelo lesi-3

Ngawo nawuphi na umzuzu, singaphantse ngoko nangoko ukucela isikwere esifunekayo okanye sisisule, kwaye zonke izikwere ezisezantsi nazo ziya kubuyiswa okanye zicocwe.

Inkqubo efanayo kwiiglobals inokuphunyezwa ngeendlela ezininzi.

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

Inketho 2:

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

Kuzo zombini iimeko, akunzima ukusebenzisa i-COS/M ukucela amanqaku abekwe kwisikwere salo naliphi na inqanaba. Kuya kuba lula ukucoca iziqwenga zesithuba kuwo nawuphi na umgangatho kukhetho lokuqala, kodwa oku akufane kufuneke.

Umzekelo wesinye sezikwere ezisezantsi:

Iiglobals ngamakrele okugcina idatha. Uluhlu olunqabileyo. Icandelo lesi-3

Kwaye nazi iiglobal ezininzi ezivela kwiprojekthi ye-XAPI: ukumelwa kwesalathiso kwiiglobals:

Iiglobals ngamakrele okugcina idatha. Uluhlu olunqabileyo. Icandelo lesi-3

Ihlabathi jikelele ^indlela esetyenziselwa ukugcina amanqaku iipolylines (iindlela, imilambo emincinci, njl.njl.) kunye neepolygons (iindawo ezivaliweyo: izakhiwo, amahlathi, njl.).

Ukuhlelwa okurhabaxa kokusetyenziswa kwee-arrays ezinqabileyo kwiiglobals.

  1. Sigcina ulungelelwaniso lwezinto ezithile kunye namazwe azo (imephu, i-automata yeselula)
  2. Sigcina iimatriki ezimbalwa.

Kwimeko yesi-2) xa ucela ulungelelwaniso oluthile apho isiqalelo singabelwanga ixabiso, kufuneka sifumane ixabiso le-array sparse engagqibekanga.

Iibhonasi esizifumanayo xa sigcina imatriki emacala maninzi kwihlabathi

Susa ngokukhawuleza kunye / okanye ukhethe iziqwenga zesithuba eziphindaphindwe kwimiqolo, iinqwelomoya, iityhubhu, njl. Kwiimeko apho izalathisi ezipheleleyo zisetyenziswa, ukukwazi ukususa ngokukhawuleza kunye/okanye ukulanda iziqwenga zesithuba eziziphinda-phinda zemiqolo, iinqwelo-moya, iityhubhu, njl. njl. kunokuba luncedo.

iqela bulala singacima nokuba yinto enye okanye umqolo, okanye inqwelomoya yonke. Enkosi kwiipropathi zeglobals, oku kwenzeka ngokukhawuleza okukhulu-ngamawaka amaxesha ngokukhawuleza kunokususwa kwe-element-by-element.

Umzobo ubonisa uluhlu olumacala amathathu kwihlabathi ^a kunye neentlobo ezahlukeneyo zokucinywa.

Iiglobals ngamakrele okugcina idatha. Uluhlu olunqabileyo. Icandelo lesi-3

Ukukhetha amaqhekeza esithuba usebenzisa izalathisi ezaziwayo, ungasebenzisa umyalelo Hlanganisa.

Ukukhetha ikholamu yematrix kuluhlu lweKholam:

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

Isiphelo:

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

Yintoni enomdla malunga nokuguquguquka kweKholamu kukuba sikwanalo uluhlu olufutshane, ekufuneka lufikeleleke ngalo. $GET, kuba amaxabiso angagqibekanga awagcinwanga kuyo.

Ukukhetha iziqwenga zendawo kunokwenziwa kwakhona ngeprogram encinci usebenzisa umsebenzi $Oda. Oku kulungele ngakumbi kwizithuba ezinezalathisi ezingabalwanga (i-cartography).

isiphelo

Amaxesha angoku anika imisebenzi emitsha yamabhongo. Iigrafu zinokwenziwa ngeebhiliyoni zee-vertices, iimephu zenziwe ngamanqaku eebhiliyoni, kwaye abanye banokufuna ukuqhuba eyabo indalo kwi-automata yeselula (1, 2).

Xa umthamo wedatha ovela kwi-sarse arrays ungasakwazi ukungena kwi-RAM, kodwa kufuneka usebenze nabo, ngoko kuyafaneleka ukuqwalasela ukuphunyezwa kweeprojekthi ezifanayo kwii-globals kunye ne-COS.

Enkosi ngosinaka kwakho! Silindele imibuzo yakho kunye neminqweno kwizimvo.

isikhanyeli: Eli nqaku kunye nezimvo zam kulo ngumbono wam kwaye akukho nto inxulumene nesikhundla esisemthethweni se-InterSystems Corporation.

umthombo: www.habr.com

Yongeza izimvo