バランスの取れたツリーが挿入、削除、検索をO(log n)-時間で実行することはわかっています。例には次のものがあります。
ただし、キーが特定の範囲内の整数である場合、Van Emde Boasツリーを使用して、これらの操作をO(log(log n))-時間にドロップすることができます。つまり、指数関数的にAVLまたはRBツリー。まあ、これは実際には多くの実際のアプリケーションの場合です。
これにはたくさんのアプリケーションがあります。引用したいのはデータベースです。データベースの場合、インデックスの作成には基本的にハッシュかB *ツリーのどちらかを選択する必要があります。 Van Emde Boasツリーが実装された場合、これら2つのオプションの中間になり、理論的には多くのクエリ最適化問題が改善されます。
Van EmdeBoasツリーがRed-BlackやB-treeなどのように広く使用されていない理由
そしてそれについての考慮事項は何ですか?
漸近的な複雑さは、誤解を招くことがあります。 Van Emde Boas tree
の場合、定数は非常に大きくなります ここを参照 。私は引用します:
However, for small trees the overhead associated with vEB trees
is enormous: on the order of 2^(m/2)
より複雑なアルゴリズムが存在するが、実際にはほとんど使用されないほど大きな入力に対してのみ改善される場合もあります。線形時間静的RMQ。
その理由の1つは、複雑さは、格納するセットのサイズではなく、値のユニバースのサイズで定義されるためです。もう1つの違いは、キーは、比較操作を行う任意のタイプにすることはできませんが、整数でなければならないことです。 vEBをBSTの代替としてではなく、アレイの代替として見る必要があります。配列にはO(1)整数でキー設定されたオブジェクトのコストを格納および検索します。vEBはO(log log M)を提供します。ここで、Mは値のユニバースのサイズです。ルックアップとストアについてはvEBが通常の配列よりも優れているわけではありませんが、O(1)最小、最大操作およびO(ログログM)を提供しています。 vEBツリーのレイアウトには、最新のCSのはるかに興味深い開発であるキャッシュ忘却ツリーの作成を可能にするプロパティがあります。