Global minangka pedhang bandha kanggo nyimpen data. Susunan jarang. Bagean 3

Global minangka pedhang bandha kanggo nyimpen data. Susunan jarang. Bagean 3Ing bagean sadurunge (1, 2) kita ngomong babagan global minangka wit, ing siji iki kita bakal ndeleng global minangka array sing jarang.

Array Jarang minangka jinis array sing paling akeh nilai njupuk nilai sing padha.

Ing laku, susunan jarang asring dadi gedhe banget sing ora ana gunane kanggo manggoni memori karo unsur sing padha. Mulane, iku ndadekake pangertèn kanggo ngleksanakake susunan jarang ing kuwi cara sing memori ora boroske ing nyimpen nilai podho rupo.
Ing sawetara basa pamrograman, susunan jarang kalebu ing basa kasebut, contone ing J, Matlab. Basa pamrograman liyane duwe perpustakaan khusus sing ngidini sampeyan ngetrapake. Kanggo C++ - Dhewe lan liyane.

Globals minangka calon sing apik kanggo ngetrapake susunan jarang amarga:

  1. Dheweke mung nyimpen nilai simpul tartamtu lan ora nyimpen nilai sing ora ditemtokake;
  2. Antarmuka kanggo ngakses nilai simpul meh padha karo pirang-pirang basa pamrograman sing ngetrapake akses menyang unsur array multidimensi.
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. Global minangka struktur sing cukup murah kanggo nyimpen data, mula nduweni karakteristik kacepetan sing luar biasa (saka atusan ewu nganti puluhan yuta transaksi per detik, gumantung saka hardware, deleng ing ngisor iki). 1)

Wiwit global punika struktur ngengkel, iku ndadekake pangertèn kanggo nggawe susunan jarang ing wong nalika dikenal ing advance sing jumlah RAM ora cukup.

Salah sawijining properti saka implementasi array jarang yaiku ngasilake sawetara nilai standar yen akses digawe menyang sel sing ora ditemtokake.

Iki bisa ditindakake kanthi nggunakake fungsi kasebut $GET ing COS. Conto iki nganggep array 3 dimensi.

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

Tugas apa sing mbutuhake susunan jarang lan kepiye carane bisa mbantu global?

Matriks adjacency (konektivitas).

Matriks kuwi digunakake kanggo makili grafik:

Global minangka pedhang bandha kanggo nyimpen data. Susunan jarang. Bagean 3

Temenan, luwih gedhe grafik kasebut, luwih akeh nol ing matriks. Yen, umpamane, kita njupuk grafik jaringan sosial lan nampilake ing wangun matriks sing padha, mula bakal meh kabeh kalebu nol, i.e. bakal dadi array sing jarang.

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

Ing conto iki, kita nyimpen global ^m matriks konektivitas, uga jumlah pinggiran ing saben simpul (sapa kanca karo sapa lan jumlah kanca).

Yen jumlah unsur ing grafik ora luwih saka 29 yuta (nomer iki dijupuk minangka produk saka 8 * ukuran baris maksimum), yaiku, cara sing luwih ekonomis kanggo nyimpen matriks kasebut yaiku bit strings, amarga implementasine ngoptimalake kesenjangan gedhe kanthi cara khusus.

Manipulasi kanthi senar bit ditindakake kanthi fungsi kasebut $BIT.

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

Tabel transisi mesin negara

Wiwit grafik transisi saka automaton winates minangka grafik biasa, mula tabel transisi saka automaton winates minangka matriks adjacency sing padha sing dibahas ing ndhuwur.

Automata seluler

Global minangka pedhang bandha kanggo nyimpen data. Susunan jarang. Bagean 3

Automat seluler sing paling misuwur yaiku game "Life", kang, amarga aturan sawijining (nalika sel wis akeh pepadhamu, iku mati) iku array jarang.

Stephen Wolfram percaya yen automata seluler yaiku lapangan ilmu anyar. Ing taun 2002, dheweke nerbitake buku 1280 kaca, A New Kind of Science, ing ngendi dheweke mratelakake kanthi wiyar yen kemajuan ing automata seluler ora diisolasi, nanging tetep lan duwe implikasi gedhe kanggo kabeh bidang ilmu.

Wis kabukten manawa algoritma apa wae sing bisa dieksekusi ing komputer bisa dileksanakake nggunakake otomatis seluler. Automata seluler digunakake kanggo model lingkungan lan sistem dinamis, kanggo ngatasi masalah algoritma lan kanggo tujuan liyane.

Yen kita duwe lapangan gedhe lan kita kudu ngrekam kabeh negara penengah saka automaton seluler, banjur iku ndadekake pangertèn kanggo nggunakake globals.

Kartografi

Wangsulan: Bab ingkang pisanan sing teka ing pikiranku nalika nerangake nggunakake array jarang iku tugas pemetaan.

Minangka aturan, ana akeh ruang kosong ing peta. Yen peta diwakili minangka piksel gedhe, banjur 71% piksel Bumi bakal dikuwasani dening segara. Array sing jarang. Lan yen sampeyan mung nggunakake karya tangan manungsa, ruang kosong bakal luwih saka 95%.

Mesthi, ora ana sing nyimpen peta ing wangun raster sing digunakake minangka perwakilan vektor.
Nanging apa peta vektor? Iki minangka jinis pigura lan polylines lan poligon sing dumadi saka titik.
Ateges database titik lan sambungan ing antarane.

Salah sawijining misi pemetaan sing paling ambisius yaiku misi Teleskop Gaia kanggo peta galaksi kita. Secara kiasan, galaksi kita, kaya kabeh alam semesta, minangka susunan jarang sing terus-terusan: spasi kekosongan gedhe sing ana titik cilik sing langka - bintang. Ruang kosong yaiku 99,999999…….%. Kanggo nyimpen peta galaksi kita, database global dipilih - Caché.

Aku ora ngerti struktur global sing tepat ing proyek iki, aku bisa nganggep manawa ana sing padha karo:

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

Ing endi b, l, d koordinat galaksi latitude, longitude lan jarak menyang Srengenge.

Struktur fleksibel global ngidini sampeyan nyimpen karakteristik lintang lan planet sing dibutuhake, amarga basis global ora ana skema.

Kanggo nyimpen peta alam semesta kita, Caché dipilih ora mung kanggo keluwesan, nanging uga kanggo kemampuan kanggo nyimpen aliran data kanthi cepet banget, nalika bebarengan nggawe indeks global kanggo nggoleki cepet.

Yen kita bali menyang Bumi, banjur proyek kartografi digawe ing global OpenStreetMap XAPI lan garpu saka OpenStreetMap - FOSM.

Bubar ing hackathon Caché indeks geospasial dileksanakake Geospatial. Kita ngenteni artikel saka penulis kanthi rincian implementasine.

Implementasi indeks spasial ing global ing OpenStreetMap XAPI

Gambar dijupuk saka presentation iki.

Sakabehe globe dipérang dadi kothak, banjur sub-kuadrat, lan sub-kuadrat dadi sub-kuadrat, lan liya-liyane. Umumé, kita entuk struktur hirarkis kanggo nyimpen global sing digawe.

Global minangka pedhang bandha kanggo nyimpen data. Susunan jarang. Bagean 3

Sawayah-wayah, kita meh bisa langsung njaluk kothak sing dikarepake utawa mbusak, lan kabeh sub-kotak uga bakal bali utawa dibusak.

Skema sing padha ing global bisa ditindakake kanthi pirang-pirang cara.

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

Opsi 2:

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

Ing kasus kasebut, ora angel nggunakake COS / M kanggo njaluk titik sing ana ing kothak ing level apa wae. Iku bakal luwih gampang kanggo ngresiki kothak kothak ing sembarang tingkat ing pilihan pisanan, nanging iki arang perlu.

Conto salah sawijining kothak tingkat ngisor:

Global minangka pedhang bandha kanggo nyimpen data. Susunan jarang. Bagean 3

Lan ing ngisor iki sawetara global saka proyek XAPI: perwakilan indeks ing global:

Global minangka pedhang bandha kanggo nyimpen data. Susunan jarang. Bagean 3

global ^ cara digunakake kanggo nyimpen TCTerms polylines (dalan, kali cilik, lsp) lan poligon (wilayah sing ditutup: bangunan, alas, lsp).

Klasifikasi kasar panggunaan array jarang ing global.

  1. Kita nyimpen koordinat obyek tartamtu lan statuse (pemetaan, automata seluler)
  2. Kita nyimpen matriks sing jarang.

Kanggo kasus 2) nalika njaluk koordinat tartamtu ing ngendi unsur ora diwenehi nilai, kita kudu entuk nilai saka unsur array jarang standar.

Bonus sing ditampa nalika nyimpen matriks multidimensi ing global

Cepet mbusak lan / utawa pilih potongan spasi sing kelipatan larik, pesawat, kubus, lsp. Kanggo kasus ing ngendi indeks integer digunakake, kemampuan kanggo mbusak lan/utawa njupuk potongan spasi kanthi cepet sing kelipatan larik, pesawat, kubus, lsp.

tim matèni kita bisa mbusak unsur siji utawa baris, utawa malah kabeh bidang. Thanks kanggo sifat global, iki kedadeyan kanthi cepet - ewonan kaping luwih cepet tinimbang mbusak unsur-by-elemen.

Tokoh nuduhake array telung dimensi ing global ^a lan macem-macem jinis pambusakan.

Global minangka pedhang bandha kanggo nyimpen data. Susunan jarang. Bagean 3

Kanggo milih potongan spasi nggunakake indeks dikenal, sampeyan bisa nggunakake printah Gabung.

Pilih kolom matriks menyang variabel 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

Kesimpulan:

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

Apa sing menarik babagan variabel Column yaiku kita uga duwe array sing jarang, sing uga kudu diakses liwat $GET, amarga nilai standar ora disimpen ing kono.

Milih potongan papan uga bisa ditindakake liwat program cilik nggunakake fungsi kasebut $Pesenan. Iki luwih trep ing spasi sing indeks ora diukur (kartografi).

kesimpulan

Jaman saiki nggawe tugas ambisi anyar. Grafik bisa dumadi saka milyaran simpul, peta sing dumadi saka milyaran titik, lan sawetara uga pengin mbukak alam semesta dhewe ing automata seluler (1, 2).

Nalika volume data saka susunan jarang bisa maneh pas menyang RAM, nanging sampeyan kudu bisa karo wong-wong mau, iku worth considering kamungkinan kanggo ngleksanakake proyek padha ing global lan COS.

Matur nuwun kanggo perhatian sampeyan! Kita ngenteni pitakon lan panjaluk sampeyan ing komentar.

Nolak tanggung jawab: Artikel iki lan komentarku minangka pendapatku lan ora ana hubungane karo posisi resmi InterSystems Corporation.

Source: www.habr.com

Add a comment