指数木

指数木
タイプ
発明された1995
発明者アルネ・アンダーソン
ビッグO記法による時間計算量
手術平均最悪の場合
検索 O(min( √log ,log  n / log  w +log log  n ,log  wlog log  n )) O(min( √log ,log  n / log  w +log log  n ,log  wlog log  n ))
入れる O(min( √log ,log  n / log  w +log log  n ,log  wlog log  n )) O(min( √log ,log  n / log  w +log log  n ,log  wlog log  n ))
消去 O(min( √log ,log  n / log  w +log log  n ,log  wlog log  n )) O(min( √log ,log  n / log  w +log log  n ,log  wlog log  n ))
空間複雑性
空間

指数木は、深さが増すにつれてノードの子の数が二重指数関数的に減少するタイプの探索木です。値はリーフノードにのみ格納されます。各ノードにはスプリッター(枝分かれ)が含まれます。スプリッターは、探索時に使用されるサブツリー内のすべての値以下の値です。指数木では、子からのスプリッターを含む内部ノードに別のデータ構造を使用することで、高速な探索を可能にします。

指数木は、いくつかの演算において最適な漸近複雑性を実現します。主に理論的な重要性を持ちます。

ツリー構造

指数木は、すべてのノードに分岐子が含まれ、すべての葉ノードに値が含まれる根付き木です。値は分岐子と異なる場合があります。値を含む指数木は再帰的に定義されます。

  • 根には子がある
  • ルートのスプリッターは左端の子のスプリッターと同じである
  • すべての子のスプリッターはローカルデータ構造に格納されます
  • サブツリーは値を持つ指数ツリーです

追加の条件として、スプリッタを使用して値を検索すると、正しいノード(つまり、値を含むノード)が返される必要があります。したがって、サブツリーのルートにスプリッタが含まれ、その右兄弟にスプリッタが含まれる場合、このサブツリーには範囲 のキーのみが含まれます。

ローカルデータ構造

ツリーは、値の高速な検索を可能にするために、すべての内部ノードで静的データ構造を使用しています。この構造は、時間 で値を使用して構築可能でなければなりません。この構造における検索時間は と表記されます。

このデータ構造としてFusion ツリーを使用できます。

オペレーション

指数木は通常の探索木と同じように探索できます。各ノードでは、ローカルデータ構造を利用して次の子ノードを素早く見つけることができます。

探索の時間計算量を とすると、以下の再帰式が成り立ちます。

入れる

消去

参考文献