各要素にアクセスする確率がわからないが、一部の要素が他の要素よりもはるかに頻繁にアクセスされると確信している場合は、Splay treeを使用します。すべての確率がわかっている場合、何を使用すればよいですか? この場合、スプレイツリーよりも優れたデータ構造が必要であると思います。
あらゆるタイプの検索ツリーをいつ、どこで使用する必要があるかをすべて想像しようとしています。誰かがすべての検索ツリーの比較や類似の構造に関する記事へのリンクを投稿できますか?
編集私はまだO(log n)
最悪のケースを望んでいますが、平均的にはより高速になるはずです。スプレー ツリーは良い例ですが、このツリーの構成を事前定義したいと思います。
たとえば、保存する要素の配列と、各要素にアクセスする頻度を定義する[a1, a2, .. an]
各要素の確率があります。[p1, p2, .. pn]
スプレイ ツリーを作成し、各要素をスプレイ ツリー ( O(n log n)
) に追加し、指定された確率でそれらにアクセスして、目的のツリーを作成できます。したがって、確率がある場合[1/2, 1/4, 1/4]
、最初の要素を広げて最初の要素にする必要があります。そのため、要素を確率で並べ替え、アクセス確率が低いものから高いものへと並べる必要があります。それもかかりO(n log n)
ます。したがって、そのようなツリーを構築する全体の時間はO(n log n)
大きな定数です。私の目標は、この数値を下げることです。
他のものを使用してもかまいませんが、検索ツリーは使用しませんが、Splay ツリーの場合よりも時間を短縮したいと考えています。そして、検索、挿入、削除がO(log n)
償却の範囲内にあることを望みます。