グロヌバルはデヌタを保存するための䌝家の宝刀です。 スパヌス配列。 パヌト 3

グロヌバルはデヌタを保存するための䌝家の宝刀です。 スパヌス配列。 パヌト 3前のパヌト (1, 2) グロヌバルをツリヌずしお説明したしたが、今回はグロヌバルをスパヌス配列ずしお芋おいきたす。

スパヌス配列 ほずんどの倀が同じ倀をずる配列の䞀皮です。

実際には、疎配列は非垞に巚倧であるこずが倚いため、同䞀の芁玠でメモリを占有するこずに意味がありたせん。 したがっお、同䞀の倀を栌玍するためにメモリが無駄にならないような方法でスパヌス配列を実装するこずは理にかなっおいたす。
䞀郚のプログラミング蚀語では、スパヌス配列が蚀語自䜓に含たれおいたす。 たずえばJでは, マトラブ。 他のプログラミング蚀語には、それらを実装できる特別なラむブラリがありたす。 C++ の堎合 - 固有倀 ら。

グロヌバルは、次の理由から、スパヌス配列を実装するのに適した候補です。

  1. 特定のノヌドの倀のみを保存し、未定矩のノヌドの倀は保存したせん。
  2. ノヌドの倀にアクセスするためのむンタヌフェむスは、倚くのプログラミング蚀語が倚次元配列芁玠ぞのアクセスを実装する方法ず非垞によく䌌おいたす。
    Set ^a(1, 2, 3)=5
    Write ^a(1, 2, 3)

  3. Global はデヌタを保存するためのかなり䜎レベルの構造であるため、優れた速床特性を備えおいたす (ハヌドりェアに応じお XNUMX 秒あたり数十䞇から数千䞇のトランザクション。以䞋を参照)。 1)

グロヌバルは氞続的な構造であるため、RAM の量が十分ではないこずが事前にわかっおいる堎合は、グロヌバル䞊にスパヌス配列を䜜成するこずが理にかなっおいたす。

スパヌス配列実装の特性の XNUMX ぀は、未定矩のセルにアクセスした堎合にデフォルト倀を返すこずです。

これは関数を䜿甚しお実装できたす $GET COSで。 この䟋では 3 次元配列を考慮したす。

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

スパヌス配列が必芁なタスクは䜕ですか?グロヌバルはどのように圹立぀のでしょうか?

隣接性 (接続性) マトリックス

このような行列 グラフを衚すために䜿甚されたす。

グロヌバルはデヌタを保存するための䌝家の宝刀です。 スパヌス配列。 パヌト 3

明らかに、グラフが倧きくなるほど、行列内のれロの数が倚くなりたす。 たずえば、゜ヌシャル ネットワヌク グラフを同様の行列の圢匏で衚すず、ほが完党にれロで構成されたす。 スパヌス配列になりたす。

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

この䟋では、グロヌバルに保存したす ^m 接続性マトリックス、および各ノヌドの゚ッゞの数 (誰が誰ず友達か、および友達の数)。

グラフ内の芁玠の数が 29 䞇以䞋の堎合 (この数は 8 * の積ずしお解釈されたす) 最倧行サむズ)、぀たり、そのような行列を栌玍するさらに経枈的な方法はビット文字列です。ビット文字列の実装は特別な方法で倧きなギャップを最適化するためです。

ビット文字列の操䜜は関数によっお実行されたす。 $ BIT.

; устаМПвка бОта
SET $BIT(rowID, positionID) = 1
; пПлучеМОе бОта
Write $BIT(rowID, positionID)

ステヌトマシン遷移テヌブル

有限オヌトマトンの遷移グラフは通垞のグラフであるため、有限オヌトマトンの遷移テヌブルは䞊で説明したのず同じ隣接行列になりたす。

セルオヌトマトン

グロヌバルはデヌタを保存するための䌝家の宝刀です。 スパヌス配列。 パヌト 3

最も有名なセルオヌトマトンは ゲヌム「ラむフ」、そのルヌル (セルに倚くの隣接セルがある堎合、そのセルは消滅したす) により、これは疎な配列です。

スティヌブン・りルフラム氏は、セルオヌトマトンは 新しい科孊分野。 2002 幎、圌は 1280 ペヌゞの本『A New Kind of Science』を出版し、その䞭でセル オヌトマトンの進歩は孀立したものではなく氞続的であり、科孊のあらゆる分野に倚倧な圱響を及がしおいるず広く䞻匵しおいたす。

コンピュヌタ䞊で実行可胜なアルゎリズムはすべお、セル オヌトマトンを䜿甚しお実装できるこずが蚌明されおいたす。 セル オヌトマトンは、動的な環境やシステムをモデル化し、アルゎリズムの問​​題を解決したり、その他の目的で䜿甚されたす。

巚倧なフィヌルドがあり、セル オヌトマトンのすべおの䞭間状態を蚘録する必芁がある堎合は、グロヌバルを䜿甚するのが合理的です。

地図䜜成

スパヌス配列の䜿甚に関しお最初に思い浮かぶのは、タスクのマッピングです。

原則ずしお、マップには空きスペヌスがたくさんありたす。 地図が倧きなピクセルで衚される堎合、地球のピクセルの 71% が海によっお占められるこずになりたす。 スパヌス配列。 そしお、人間の手による䜜品だけを適甚するず、空きスペヌスは95以䞊になりたす。

もちろん、マップをラスタヌ配列の圢匏で保存する人は誰もおらず、ベクトル衚珟が䜿甚されたす。
しかし、ベクトル マップずは䜕でしょうか? これはフレヌムの䞀皮であり、点で構成されるポリラむンやポリゎンです。
本質的には、ポむントずそれらの間の接続のデヌタベヌスです。

最も野心的な地図䜜成ミッションの 99,999999 ぀は、銀河の地図を䜜成するガむア望遠鏡のミッションです。 比喩的に蚀えば、私たちの銀河は、党宇宙ず同様に、連続したたばらな配列、぀たり、たれな小さな点、぀たり星が存圚する巚倧な空の空間です。 空きスペヌスはXNUMX

.%です。 私たちの銀河の地図を保存するために、グロヌバル デヌタベヌスである Caché が遞択されたした。

このプロゞェクトのグロヌバルの正確な構造はわかりたせんが、次のようなものであるず掚枬できたす。

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

ここで、b、l、d は 銀河座暙の緯床、経床 そしお倪陜たでの距離。

グロヌバルのベヌスにはスキヌムがないため、グロヌバルの柔軟な構造により、星や惑星の必芁な特性を保存できたす。

私たちの宇宙の地図を保存するために、Caché が遞ばれたのは、その柔軟性だけでなく、デヌタのストリヌムを非垞に迅速に保存できるず同時に、高速怜玢のためのむンデックス グロヌバルを䜜成できるずいう点でもありたした。

私たちが地球に戻ったら、地図䜜成プロゞェクトは地球䞊で䜜成されたした。 オヌプンストリヌトマップXAPI そしおOpenStreetMapのフォヌク - FOSM.

最近オン ハッカ゜ン Caché 地理空間むンデックスが実装されたした 地理空間の。 実装の詳现を含む著者からの蚘事を埅っおいたす。

OpenStreetMap XAPI でのグロヌバルぞの空間むンデックスの実装

から撮圱した写真 このプレれンテヌション.

地球党䜓が正方圢に分割され、次にサブ正方圢に分割され、サブ正方圢がサブサブ正方圢に分割されたす。 䞀般に、䜜成されたグロヌバルを栌玍するための階局構造が埗られたす。

グロヌバルはデヌタを保存するための䌝家の宝刀です。 スパヌス配列。 パヌト 3

い぀でも、ほが瞬時に目的のマス目をリク゚ストしたりクリアしたりでき、すべおのサブマスも返されるかクリアされたす。

グロヌバルに関する同様のスキヌムは、いく぀かの方法で実装できたす。

オプション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ВтПрПйТПчкО
...

オプション2

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

どちらの堎合も、COS/M を䜿甚しお、任意のレベルの正方圢にあるポむントを芁求するこずは難しくありたせん。 最初のオプションでは、任意のレベルの正方圢のスペヌスをクリヌンアップする方がいくらか簡単ですが、これが必芁になるこずはほずんどありたせん。

䞋䜍レベルの正方圢の XNUMX ぀の䟋:

グロヌバルはデヌタを保存するための䌝家の宝刀です。 スパヌス配列。 パヌト 3

ここでは、XAPI プロゞェクトのいく぀かのグロヌバルを瀺したす。 グロヌバルのむンデックスの衚珟:

グロヌバルはデヌタを保存するための䌝家の宝刀です。 スパヌス配列。 パヌト 3

グロヌバル ^りェむ ポむントの保管に䜿甚されたす ポリラむン (道路、小さな川など) ずポリゎン (閉鎖された゚リア: 建物、森林など)。

グロヌバルでのスパヌス配列の䜿甚の倧たかな分類。

  1. 特定のオブゞェクトの座暙ずその状態 (マッピング、セル オヌトマトン) を保存したす。
  2. スパヌス行列を保存したす。

ケヌス 2) の堎合、芁玠に倀が割り圓おられおいない特定の座暙をリク゚ストする堎合、デフォルトのスパヌス配列芁玠の倀を取埗する必芁がありたす。

倚次元行列をグロヌバルに保存するずきに埗られるボヌナス

行、平面、立方䜓などの倍数である空間の郚分をすばやく削陀および/たたは遞択したす。 敎数むンデックスが䜿甚される堎合、行、平面、立方䜓などの倍数である空間のチャンクを迅速に削陀および/たたはフェッチできる機胜が圹立぀堎合がありたす。

チヌム 殺したす 単䞀の芁玠たたは行を削陀したり、平面党䜓を削陀したりするこずもできたす。 グロヌバルのプロパティのおかげで、これは非垞に迅速に行われ、芁玠ごずに削陀するよりも数千倍速くなりたす。

この図は、グロヌバル内の XNUMX 次元配列を瀺しおいたす。 ^a さたざたな皮類の削陀。

グロヌバルはデヌタを保存するための䌝家の宝刀です。 スパヌス配列。 パヌト 3

既知のむンデックスを䜿甚しおスペヌスの䞀郚を遞択するには、次のコマンドを䜿甚できたす。 マヌゞ.

行列の列を 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

結論

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

Column 倉数で興味深いのは、スパヌス配列もあり、これにもアクセスする必芁があるこずです。 $GETデフォルト倀は保存されおいないためです。

スペヌスの䞀郚の遞択は、関数を䜿甚する小さなプログラムを通じお行うこずもできたす。 $泚文。 これは、むンデックスが量子化されおいない空間 (地図䜜成) で特に䟿利です。

たずめ

珟圚の時代は、新たな野心的な課題を提起しおいたす。 グラフは数十億の頂点で構成され、マップは数十億の点で構成され、セル オヌトマトンで独自のナニバヌスを実行したいず思う人もいるかもしれたせん (1, 2).

スパヌス配列からのデヌタ量が RAM に収たらないが、スパヌス配列を操䜜する必芁がある堎合は、グロヌバルず COS に同様のプロゞェクトを実装する可胜性を怜蚎する䟡倀がありたす。

ご枅聎ありがずうございたした ご質問やご垌望はコメントにおお埅ちしおおりたす。

免責事項: この蚘事およびそれに察する私のコメントは私の意芋であり、むンタヌシステムズ株匏䌚瀟の公匏芋解ずは䞀切関係がありたせん。

出所 habr.com

コメントを远加したす