(すでにメインサイトで尋ねられましたが、ここでもより良い報道を求めています、申し訳ありません)
私は簡潔なデータ構造について知っていたので、私はその分野での最新の開発の良い概観を切望しています。
私はグーグルで検索して、頭からのリクエストに関するグーグルの検索結果の上部に表示される多くの記事を読みました。私はここで重要な何かを見逃したとまだ疑っています。
私にとって特に興味深いトピックは次のとおりです。
親、左/右の子、サブツリー内の要素数を取得する効率的な操作を使用した、バイナリツリーの簡潔なエンコード。
ここでの主な質問は次のとおりです。私が知っているすべてのアプローチは、このノードの呼吸優先順で列挙されたツリーノードを仮定します私の仕事に適しているようです。深さ優先レイアウトで指定された巨大なバイナリツリーを処理し、深さ優先ノードインデックスは他のノードプロパティのキーであるため、ツリーレイアウトを変更するにはコストを最小限に抑える必要があります。したがって、BFツリーレイアウト以外を考慮した作品への参照を取得することに関心があります。
外部メモリ内の大きな可変長アイテム配列。配列は不変です。アイテムを追加/削除/編集する必要はありません。唯一の要件は、O(1)要素のアクセス時間と可能な限り低いオーバーヘッドであり、単純なオフセットとサイズのアプローチよりも優れています。ここに、タスクの一般的なデータについて収集した統計をいくつか示します。
典型的なアイテムの数-数億、最大数千ミリアード;
アイテムの約30%の長さは1 ビット以下です。
40%-60%のアイテムの長さは8ビット未満です。
32〜255ビットの長さを持つアイテムの数パーセントのみ(255ビットが制限です)
平均アイテム長〜4ビット+/- 1ビット。
アイテムの長さのその他の分布は理論的には可能ですが、実際に興味深いケースはすべて上記に近い統計値を持っています。
複雑な記事へのリンク、不明瞭なチュートリアル、文書化されたC / C ++ライブラリなど-似たようなタスクで役立つもの、または経験に基づいた推測でそのように見えるもの-すべてが感謝されます。
更新:質問1に追加するのを忘れました:扱っているバイナリツリーは不変です。それらを変更する必要はありません。ノードから子または親に常に移動するさまざまな方法でそれらを移動するだけで、そのような操作の平均コストはO(1)でした。
また、典型的なツリーには数千ノードのノードがあり、RAMに完全に保存するべきではありません。