コンピュータサイエンスにおいて、簡潔なデータ構造とは、情報理論の下限に「近い」量の空間を使用するデータ構造ですが、(他の圧縮表現とは異なり)効率的なクエリ操作が可能です。この概念は、もともとジェイコブソン[1]によってビットベクトル、(ラベルなしの)ツリー、および平面グラフをエンコードするために導入されました。一般的なロスレスデータ圧縮アルゴリズムとは異なり、簡潔なデータ構造では、最初に解凍することなく、その場で使用することができます。関連する概念として、圧縮データ構造があります。これは、格納またはエンコードされたデータのサイズが、データ自体の特定のコンテンツに同様に依存しているという点で共通しています。
あるデータを格納するために必要な情報理論的最適ビット数を 仮定します。このデータの表現は次のように呼ばれます。
- 暗黙的に、スペースを少し取る場合は
- スペースを少し取る場合は簡潔に、
- 少しのスペースを取る場合はコンパクトにします。
たとえば、ストレージのビットを使用するデータ構造はコンパクトで、ビットは簡潔で、ビットも簡潔で、ビットは暗黙的です。
したがって、暗黙的な構造は通常、入力データの何らかの順列を使用して情報を格納するように簡略化されます。この最もよく知られた例はヒープです。
簡潔なインデックス可能な辞書
簡潔なインデックス可能辞書は、ランク/選択辞書とも呼ばれ、二分木、-分木、多重集合、[2]や接尾辞木、配列[3]など、数多くの簡潔な表現手法の基礎を形成します。基本的な問題は、通常、 ビット配列 として表されるユニバースのサブセットを格納することです。インデックス可能辞書は、辞書に対する通常の方法 (クエリ、および動的なケースでの挿入/削除) に加えて、次の操作をサポートします。
のために。
つまり、 は位置までの に等しい要素の数を返しますが、 は の - 番目の出現の位置を返します。
ビットの記憶空間(元のビット配列と補助構造)を使用し、定数時間で順位付けと選択をサポートする単純な表現[4]があります。これは、範囲最小クエリと同様のアイデアを使用します。つまり、限られたサイズのサブ問題で停止する前に、定数回の再帰が行われます。ビット配列は、サイズ ビットの大きなブロックとサイズ ビットの小さなブロックに分割されます。各大きなブロックについて、その最初のビットの順位が別のテーブル に格納されます。各エントリは、合計ビットの記憶域を占めます。大きなブロック内では、別のディレクトリに、そこに含まれる小さなブロックのそれぞれの順位が格納されます。ここでの違いは、エントリごとに ビットのみが必要であることです。これは、格納する必要があるのが、それを含む大きなブロックの最初のビットの順位との差のみであるためです。したがって、このテーブルは合計 ビットを必要とします。その後、 の長さのビット文字列に対するすべての可能な順位付けクエリへの回答を格納するルックアップテーブルを使用できます。これにはビットの記憶域が必要です。したがって、これらの補助テーブルはそれぞれスペースを占有するため、このデータ構造は時間とスペースのビットでランク付けクエリをサポートします。
クエリに一定時間で回答するために、一定時間アルゴリズムは次の計算を行います。
実際には、ルックアップテーブルは、ビット単位の演算と、小さなブロックに設定されているビットの数を見つけるために使用できる小さなテーブルに置き換えることができます。これは多くの場合有益です。なぜなら、簡潔なデータ構造は大規模なデータ セットで使用されるためです。その場合、キャッシュ ミスがはるかに頻繁になり、ルックアップ テーブルが近くの CPU キャッシュから追い出される可能性が高くなります。[5]選択クエリは、ランクに使用されるのと同じ補助構造でバイナリ検索を実行することで簡単にサポートできますが、最悪の場合、時間がかかります。追加のストレージのビットを使用するより複雑な構造を使用すると、定数時間で選択をサポートできます。 [6]実際には、これらのソリューションの多くには、漸近的な利点が明らかになる前に支配的な表記法に隠れた定数があります。ブロードワード演算とワード境界ブロックを使用した実装は、実際にはパフォーマンスが向上することがよくあります。[7]
エントロピー圧縮ソリューション
空間アプローチは、の異なる- 部分集合(または長さが で、それぞれが1 である 2 進文字列)が存在することに注目することで改善できます。したがって、を格納するために必要なビット数の情報理論上の下限値となります。この上限値、つまり空間を使用する上限値を達成する簡潔な (静的) 辞書があります。 [8]この構造は、ランク付けと選択のクエリをサポートするように拡張することができ、空間を必要とします。[2]ただし、この構造の正しいランク付けクエリは、最小完全ハッシュ関数の動作と同様に、セットに含まれる要素に制限されます。この上限値は、辞書のストレージ スペースを に減らすことで、空間と時間のトレードオフにまで減らすことができます。クエリには時間がかかります。 [9]
ビット未満でランク(選択ではない)をサポートするインデックス可能な辞書を構築することも可能です。このような辞書は単調最小完全ハッシュ関数と呼ばれ、 ビット未満で実装できます。[10] [11]
簡潔なハッシュテーブル
簡潔なハッシュ テーブル (簡潔な順序なし辞書とも呼ばれる) は、スペース ビットを使用してユニバースからのキーを格納し、一定の予想時間でメンバーシップ クエリをサポートするデータ構造です。簡潔なハッシュ テーブルが一定の予想時間で挿入と削除もサポートする場合は動的と呼ばれ、そうでない場合は静的と呼ばれます。
最初の動的簡潔ハッシュテーブルは、2003 年に Raman と Rao によって提案されました。[12]の場合、彼らのソリューションではスペース ビットを使用します。その後、このスペースの境界は、任意の定数個の対数に対して ビットに改善できることが示され[13]、その後すぐにこの境界も最適であることが示されました。[14] [15]後者のソリューションは、すべての操作を最悪の場合でも一定時間で高い確率でサポートします。
最初の静的簡潔ハッシュテーブルは、1999 年に Pagh によって提案されました。[16] [17]の場合、彼らのソリューションは空間ビットを使用し、最悪の場合の定数時間のクエリをサポートします。この境界はその後ビットに改善され、[18]、さらにビットに改善されました。[19]最初の 2 つのソリューション[17] [18] は最悪の場合の定数時間のクエリをサポートしますが、最後のソリューションは定数の期待時間のクエリをサポートします。[19]最後のソリューションでは、サイズ のルックアップテーブルへのアクセスも必要ですが、このルックアップテーブルは格納される要素のセットに依存しません。[19]
その他の例
任意の長さの文字列 (パスカル文字列)はZ + log( Z ) のスペースを占めるため、簡潔です。最大長がある場合 (実際には 2 32 = 4 GiB のデータは非常に長い文字列であり、2 64 = 16 EiB のデータは実際のどの文字列よりも大きいため)、長さのある文字列も暗黙的であり、Z + k のスペースを占めます。ここで、k は最大長を表すデータの数 (例: 64 ビット) です。
可変長の項目 (文字列など) のシーケンスをエンコードする必要がある場合、さまざまな方法があります。直接的な方法は、各レコードに長さと項目を格納することです。これらを次々に配置できます。これにより、効率的な next が可能になりますが、k番目の項目を見つけることはできません。別の方法としては、項目を区切り文字で順序付けて配置する方法があります (例: null で終了する文字列)。これは長さの代わりに区切り文字を使用し、シーケンス全体をスキャンして区切り文字を探す必要があるため、大幅に遅くなります。どちらもスペース効率に優れています。別の方法は、帯域外分離です。項目を区切り文字なしで次々に配置するだけです。項目の境界は、長さのシーケンスとして、またはより適切なのは、このシーケンスへのオフセットとして格納できます。または、項目が始まる位置に 1 が入り、それ以外の場所に 0 が入った別のバイナリ文字列を、項目と一緒にエンコードします。この文字列が与えられると、関数はインデックスが与えられれば、各項目がどこから始まるかをすばやく判断できます。[20]これはコンパクトだが簡潔ではない。2Zの空間、つまりO( Z )を占有するからである。
もう 1 つの例は、二分木の表現です。ノード上の任意の二分木は、任意のノードに対するさまざまな操作をサポートしながら、ビットで表現できます。操作には、親、左と右の子の検索、サブツリーのサイズの取得など、それぞれ定数時間で実行できます。ノード上の異なる二分木の数は です。 が大きい場合、この数は約 です。したがって、これをエンコードするには少なくとも約ビットが必要です。したがって、簡潔な二分木は、ノードあたり ビットのみを占有します。
参照
参考文献
- ^ Jacobson, G. J (1988).簡潔な静的データ構造(博士論文). ペンシルバニア州ピッツバーグ: カーネギーメロン大学.
- ^ ab Raman, R.; V. Raman; S. S Rao (2002). 「簡潔なインデックス可能辞書と、k-ary ツリーおよびマルチセットのエンコードへの応用」。離散アルゴリズムに関する第 13 回 ACM-SIAM シンポジウムの議事録。pp. 233–242。arXiv : 0705.0552。CiteSeerX 10.1.1.246.3123。doi : 10.1145 / 1290672.1290680。ISBN 0-89871-513-X。
- ^ Sadakane, K.; R. Grossi (2006). 「簡潔なデータ構造をエントロピー境界内に押し込む」(PDF)。離散アルゴリズムに関する第 17 回 ACM-SIAM シンポジウムの議事録。pp. 1230–1239。ISBN 0-89871-605-52011年9月29日時点のオリジナル(PDF)よりアーカイブ。
- ^ Jacobson, G. (1989年11月1日). スペース効率の良い静的ツリーとグラフ(PDF) . 30th IEEE Symposium on Foundations of Computer Science. doi :10.1109/SFCS.1989.63533. 2016年3月12日時点のオリジナル(PDF)からアーカイブ。
- ^ González, R.; S. Grabowski; V. Mäkinen; G. Navarro (2005). 「ランク付けおよび選択クエリの実用的な実装」(PDF)。第 4 回効率的かつ実験的なアルゴリズムに関するワークショップ (WEA) のポスター プロシーディング ボリューム。pp . 27–38。
- ^ Clark, David (1996). Compact pat trees (PDF) (博士論文). ウォータールー大学.
- ^ Vigna, S. (2008). 「ランク/選択クエリのブロードワード実装」(PDF) .実験アルゴリズム. コンピュータサイエンスの講義ノート。第 5038 巻。pp. 154–168。CiteSeerX 10.1.1.649.8950 . doi : 10.1007 /978-3-540-68552-4_12。ISBN 978-3-540-68548-7. S2CID 13963489。
- ^ Brodnik, A.; J. I Munro (1999). 「一定時間とほぼ最小の空間でのメンバーシップ」(PDF) . SIAM J. Comput . 28 (5): 1627–1640. CiteSeerX 10.1.1.530.9223 . doi :10.1137/S0097539795294165.
- ^ Pătraşcu, M. (2008). 「Succincter」(PDF) . Foundations of Computer Science, 2008. FOCS'08. IEEE 49th Annual IEEE Symposium on . pp. 305–313.
- ^ Belazzougui, Djamal; Boldi, Paolo; Pagh, Rasmus; Vigna, Sebastiano (2009-01-04). 「モノトーン最小完全ハッシュ: O(1) アクセスによるソート済みテーブルの検索」。第20 回 ACM-SIAM 離散アルゴリズムシンポジウムの議事録。フィラデルフィア、ペンシルバニア州: 産業応用数学協会: 785–794。doi : 10.1137 / 1.9781611973068.86。ISBN 978-0-89871-680-1。
- ^ Assadi, Sepehr; Farach-Colton, Martín; Kuszmaul, William (2023年1月)、「Tight Bounds for Monotone Minimal Perfect Hashing」、2023 Annual ACM-SIAM Symposium on Discrete Algorithms (SODA) の議事録、フィラデルフィア、ペンシルバニア州: Society for Industrial and Applied Mathematics、pp. 456–476、arXiv : 2207.10556、doi :10.1137/1.9781611977554.ch20、ISBN 978-1-61197-755-4、2023-04-28取得
- ^ ラマン、ラジーブ、ラオ、サッティ・スリニヴァサ (2003)、「簡潔な動的辞書とツリー」、オートマタ、言語、プログラミング、ベルリン、ハイデルベルク: シュプリンガー・ベルリン・ハイデルベルク、pp. 357–368、doi :10.1007/3-540-45061-0_30、ISBN 978-3-540-40493-4、2023-04-28取得
- ^ Bender, Michael A.; Farach-Colton, Martín; Kuszmaul, John; Kuszmaul, William; Liu, Mingmou (2022-06-09). 「ハッシュテーブルの最適な時間/スペースのトレードオフについて」。第54回ACM SIGACTコンピューティング理論シンポジウムの議事録。ニューヨーク、ニューヨーク、米国:ACM。pp. 1284–1297。arXiv :2111.00602。doi:10.1145 / 3519935.3519969。hdl: 1721.1 / 146419。ISBN 9781450392648. S2CID 240354692。
- ^ 李天暁;リャン・ジンシュン。ユウ、華城。周、仁飛(2023)。 「動的簡潔辞書の厳密なセルプローブ下限」。arXiv : 2306.02253 [cs.DS]。
- ^ Nadis, Steve (2024年2月8日). 「科学者がデータストレージと時間の最適なバランスを発見」. Quanta Magazine .
- ^ Pagh, Rasmus (1998-01-28). 「最悪のケース検索時間が O(1) の辞書の冗長性が低い」BRICS レポート シリーズ. 5 (28). doi : 10.7146/brics.v5i28.19434 . ISSN 1601-5355.
- ^ ab Pagh, Rasmus (2001 年 1 月)。「クエリ時間が一定な静的辞書の低冗長性」。SIAM Journal on Computing。31 ( 2): 353–363。doi : 10.1137 /s0097539700369909。ISSN 0097-5397 。
- ^ ab Patrascu, Mihai (2008 年10 月)。「Succincter」。2008年 49 回 IEEE コンピュータ サイエンスの基礎に関する年次シンポジウム。IEEE。pp. 305–313。doi :10.1109/ focs.2008.83。ISBN 978-0-7695-3436-7. S2CID 257721481。
- ^ abc Yu, Huacheng (2020-06-22). 「ほぼ最適な静的ラスベガス簡潔辞書」。第52回ACM SIGACTコンピューティング理論シンポジウムの議事録。ニューヨーク、ニューヨーク、米国:ACM。pp. 1389–1401。arXiv : 1911.01348。doi : 10.1145 / 3357713.3384274。ISBN 9781450369794. S2CID 207780523。
- ^ Belazzougui, Djamal. 「ハッシュ、置き換え、圧縮」(PDF)。
