Globals mangrupakeun harta-pedang pikeun nyimpen data. Asép Sunandar Sunarya. Bagian 3

Globals mangrupakeun harta-pedang pikeun nyimpen data. Asép Sunandar Sunarya. Bagian 3Dina bagian saméméhna (1, 2) urang ngobrol ngeunaan globals salaku tangkal, dina ieu urang bakal kasampak di globals salaku arrays sparse.

Asép Sunandar Sunarya mangrupakeun tipe Asép Sunandar Sunarya nu lolobana nilai nyokot nilai sarua.

Dina prakték, arrays sparse mindeng jadi badag yén euweuh titik dina occupying memori sareng elemen idéntik. Ku alatan éta, ngajadikeun rasa pikeun nerapkeun arrays sparse ku cara nu memori teu wasted dina nyimpen nilai idéntik.
Dina sababaraha basa program, arrays jarang kaasup dina basa sorangan, contona dina J, MATLAB. Basa pamrograman sanésna ngagaduhan perpustakaan khusus anu ngamungkinkeun anjeun ngalaksanakeunana. Pikeun C++ - Eigen jeung sajabana.

Globals mangrupikeun calon anu saé pikeun ngalaksanakeun susunan jarang sabab:

  1. Aranjeunna nyimpen nilai ukur titik-titik anu tangtu sareng henteu nyimpen nilai-nilai anu teu jelas;
  2. Antarbeungeut pikeun ngaksés nilai node sami pisan sareng sabaraha basa program anu nerapkeun aksés kana unsur array multidimensional.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. Global mangrupikeun struktur anu cukup rendah pikeun nyimpen data, janten gaduh ciri kecepatan anu luar biasa (tina ratusan rébu dugi ka puluhan juta transaksi per detik, gumantung kana hardware, tingali di handap). 1)

Kusabab global mangrupa struktur pengkuh, ngajadikeun rasa nyieun arrays sparse on aranjeunna nalika eta dipikanyaho sateuacanna yén jumlah RAM moal cukup.

Salah sahiji sipat palaksanaan Asép Sunandar Sunarya sparse nyaéta mulangkeun sababaraha nilai standar upami aksés dilakukeun kana sél anu teu ditangtukeun.

Ieu bisa dilaksanakeun ngagunakeun fungsi $GET dina COS. Conto ieu nganggap susunan 3 diménsi.

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

Tugas naon anu ngabutuhkeun susunan anu jarang sareng kumaha global tiasa ngabantosan?

Adjacency (konektipitas) matrix

Matriks sapertos kitu dipaké pikeun ngagambarkeun grafik:

Globals mangrupakeun harta-pedang pikeun nyimpen data. Asép Sunandar Sunarya. Bagian 3

Jelas, langkung ageung grafik, langkung seueur nol dina matriks. Upami, contona, urang nyandak grafik jaringan sosial sareng nampilkeunana dina bentuk matriks anu sami, maka éta ampir sadayana diwangun ku nol, i.e. bakal Asép Sunandar Sunarya sparse.

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

Dina conto ieu, urang simpen sacara global ^m matriks konektipitas, kitu ogé jumlah edges dina unggal titik (saha babaturan jeung saha jeung jumlah babaturan).

Lamun jumlah elemen dina grafik teu leuwih ti 29 juta (angka ieu dicokot salaku hasil tina 8 * ukuran garis maksimum), nyaéta, cara anu langkung ekonomis pikeun nyimpen matriks sapertos nyaéta bit string, sabab palaksanaanna ngaoptimalkeun jurang ageung dina cara anu khusus.

Manipulasi kalawan bit string anu dipigawé ku fungsi $BIT.

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

méja transisi mesin kaayaan

Kusabab grafik transisi tina hiji otomat terhingga mangrupa grafik biasa, mangka tabel transisi tina otomat terhingga mangrupa matriks adjacency sarua dibahas di luhur.

Automata sélular

Globals mangrupakeun harta-pedang pikeun nyimpen data. Asép Sunandar Sunarya. Bagian 3

Otomat sélulér anu paling kasohor nyaéta kaulinan "Kahirupan", nu, alatan aturan na (lamun sél boga loba tatanggana, éta maot) mangrupakeun Asép Sunandar Sunarya sparse.

Stephen Wolfram percaya yén automata sélular téh widang élmu anyar. Taun 2002, anjeunna medalkeun buku 1280 halaman, A New Kind of Science, dimana anjeunna ngadawuh sacara lega yén kamajuan dina automata sélular henteu terasing, tapi tetep awét sareng gaduh implikasi anu ageung pikeun sadaya bidang élmu.

Éta parantos kabuktosan yén algoritma naon waé anu tiasa dieksekusi dina komputer tiasa dilaksanakeun nganggo otomat sélulér. Automata sélular dipaké pikeun modél lingkungan sareng sistem dinamis, pikeun ngabéréskeun masalah algoritmik sareng pikeun tujuan anu sanés.

Upami urang ngagaduhan lapangan anu ageung sareng urang kedah ngarékam sadaya kaayaan panengah tina otomat sélulér, maka masuk akal ngagunakeun global.

Kartografi

Hal kahiji anu datang ka pikiran kuring lamun datang ka ngagunakeun arrays sparse nyaeta pemetaan tugas.

Sakumaha aturan, aya seueur rohangan kosong dina peta. Lamun peta digambarkeun salaku piksel badag, 71% tina piksel Bumi bakal dikawasaan ku sagara. Asép Sunandar Sunarya. Sareng upami anjeun ngan ukur nerapkeun karya tangan manusa, maka rohangan kosong bakal langkung ti 95%.

Tangtosna, teu aya anu nyimpen peta dina bentuk susunan raster anu dianggo pikeun ngagambarkeun vektor.
Tapi naon peta vektor? Ieu jenis pigura jeung polylines jeung polygons diwangun ku titik.
Dasarna database titik sareng sambungan antara aranjeunna.

Salah sahiji misi pemetaan anu paling ambisius nyaéta Gaia Telescope misi pikeun peta galaksi urang. Figuratively diomongkeun, galaksi urang, kawas sakabeh jagat raya, mangrupakeun Asép Sunandar Sunarya sparse kontinyu: spasi badag emptiness nu aya titik leutik langka - béntang. Ruang kosong nyaéta 99,999999…….%. Pikeun nyimpen peta galaksi urang, database global dipilih - Caché.

Kuring henteu terang struktur pasti global dina proyék ieu, kuring tiasa nganggap yén éta sami sareng:

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

Dimana b, l, d koordinat galaksi lintang, bujur jeung jarak ka Panonpoé.

Struktur global anu fleksibel ngamungkinkeun anjeun pikeun ngahemat sagala ciri anu dipikabutuh pikeun béntang sareng planét, sabab dasar-dasar global henteu skéma.

Pikeun nyimpen peta jagat raya urang, Caché dipilih henteu ngan ukur pikeun kalenturanna, tapi ogé pikeun kamampuan pikeun nyimpen aliran data gancang pisan, bari sakaligus nyiptakeun indéks global pikeun milarian gancang.

Upami urang uih deui ka Bumi, maka proyék kartografis diciptakeun dina global OpenStreetMap XAPI sareng garpu OpenStreetMap - FOSM.

Nembe on hackathon Caché indéks geospasial dilaksanakeun Geospatial. Kami ngantosan tulisan ti panulis kalayan detil palaksanaan.

Palaksanaan indéks spasial dina global dina OpenStreetMap XAPI

Gambar dicokot tina presentasi ieu.

Sakabeh globe dibagi kana kuadrat, lajeng sub-kuadrat, sarta sub-kuadrat jadi sub-kuadrat, jeung saterusna. Sacara umum, urang meunang struktur hirarkis pikeun nyimpen nu globals dijieun.

Globals mangrupakeun harta-pedang pikeun nyimpen data. Asép Sunandar Sunarya. Bagian 3

Iraha waé, urang ampir langsung tiasa nyuhunkeun alun-alun anu dipikahoyong atanapi mupus éta, sareng sadaya sub-kuadrat ogé bakal dipulangkeun atanapi diberesihan.

Skéma anu sami dina global tiasa dilaksanakeun ku sababaraha cara.

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

Pilihan 2:

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

Dina duanana kasus, teu hese ngagunakeun COS / M pikeun menta titik lokasina dina kuadrat tingkat mana wae. Ieu bakal rada gampang pikeun ngabersihan potongan kuadrat spasi dina sagala tingkat dina pilihan kahiji, tapi ieu jarang diperlukeun.

Conto salah sahiji kuadrat tingkat handap:

Globals mangrupakeun harta-pedang pikeun nyimpen data. Asép Sunandar Sunarya. Bagian 3

Sareng ieu sababaraha global tina proyék XAPI: ngagambarkeun indéks dina global:

Globals mangrupakeun harta-pedang pikeun nyimpen data. Asép Sunandar Sunarya. Bagian 3

global ^ jalan dipaké pikeun nyimpen titik polylines (jalan, walungan leutik, jeung sajabana) jeung poligon (wewengkon katutup: wangunan, leuweung, jsb).

Klasifikasi kasar tina pamakéan arrays sparse on globals.

  1. Urang nyimpen koordinat objék tangtu jeung kaayaan maranéhanana (pemetaan, automata sélular)
  2. Urang nyimpen matriks sparse.

Pikeun kasus 2) nalika nyuhunkeun koordinat khusus dimana unsur henteu ditugaskeun nilai, urang kedah nampi nilai tina unsur standar sparse array.

Bonus anu kami nampi nalika nyimpen matriks multidimensional dina global

Gancang piceun jeung/atawa pilih potongan spasi nu lilipetan barisan, pesawat, kubus, jsb. Pikeun kasus dimana indéks integer dipaké, kamampuhan pikeun gancang nyabut jeung/atawa dipulut sakumpulan spasi nu lilipetan baris, pesawat, kubus, jsb bisa jadi mangpaat.

tim maehan urang tiasa mupus boh unsur tunggal atawa baris, atawa malah hiji sakabéh pesawat. Hatur nuhun kana sipat globals, ieu kajantenan gancang pisan - rébuan kali langkung gancang tibatan ngaleungitkeun unsur-demi-unsur.

Angka ieu nunjukkeun susunan tilu diménsi dina global ^a jeung tipena béda ngahapus.

Globals mangrupakeun harta-pedang pikeun nyimpen data. Asép Sunandar Sunarya. Bagian 3

Pikeun milih potongan rohangan nganggo indéks anu dipikanyaho, anjeun tiasa nganggo paréntah ngumpulkeun.

Milih kolom matriks kana variabel Kolom:

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

kacindekan:

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

Naon anu pikaresepeun ngeunaan variabel Kolom nyaéta yén urang ogé ngagaduhan susunan anu jarang, anu ogé kedah diaksés ngalangkungan $GET, sabab nilai standar teu disimpen di dinya.

Milih potongan spasi ogé bisa dipigawé ngaliwatan program leutik ngagunakeun fungsi $Pesenan. Ieu hususna merenah dina spasi nu indéks teu quantized (kartografi).

kacindekan

Jaman ayeuna nyababkeun tugas ambisius anyar. Grafik bisa diwangun ku milyaran verteks, peta diwangun ku milyaran titik, sarta sababaraha malah bisa hayang ngajalankeun alam semesta sorangan dina automata sélular (1, 2).

Nalika volume data tina arrays sparse teu bisa deui cocog kana RAM, tapi anjeun kudu digawekeun ku aranjeunna, mangka sia tempo kamungkinan palaksanaan proyék sarupa dina globals na COS.

Nuhun kana perhatosanana! Kami ngantosan patarosan sareng kahoyong anjeun dina koméntar.

Bantahan: Tulisan ieu sareng koméntar kuring kana éta mangrupikeun pendapat kuring sareng henteu aya hubunganana sareng posisi resmi InterSystems Corporation.

sumber: www.habr.com

Tambahkeun komentar