確率的検索データ構造は役に立ちますか?


9

SkipListは、バランス調整されたツリーと同じ境界を提供し、再調整が不要であるという利点があります。SkipListはランダムコインフリップを使用して構築されるため、SkipListの構造が十分に「バランス」されている限り、これらの境界は保持されます。特に、一定のc > 0に対して1 / n cの確率で、要素を挿入した後にバランスの取れた構造が失われる可能性があります。O(logn)1/ncc>0

永久に実行される可能性のあるWebアプリケーションのストレージバックエンドとしてスキップリストを使用するとします。したがって、いくつかの多項式の操作の後、SkipListのバランスのとれた構造は失われる可能性が非常に高くなります。

私の推論は正しいですか?そのような確率的検索/ストレージデータ構造には実用的なアプリケーションがありますか?そうであれば、上記の問題をどのように回避しますか?

編集:私は、(クラシックな)ランダム化されたSkipListに比べて実装がはるかに複雑な、SkipListの確定的なバリアントがあることを認識しています。


1
どのような具体的なアプリケーションを考えていますか?
Pratik Deoghare 2013

回答:


6

「バランス」を失う可能性は多項式ではないと思います。スキップリストに要素を挿入した後、コインが表に出るまでコインを裏返して、その上にコピーの塔を構築します。

k2kkn/2kclogn1/ncω(logn)M

E[M]=k1Pr(Mk)log(n)+klog(n)n/2k=log(n)+2.

kn/2kn

レベルごとに一定数のステップしか実行しないことも示せるため(非常に高い確率で!)、検索コストは対数です。

ですから、不均衡なリストになってしまうのは、実に非常に不運でなければなりません。ここでの「運」は、たとえば不均衡な検索ツリーとは異なり、データから独立していることに注意してください。スキップリストのコイン投げは常にランダムです。

私の知る限りでは、スキップリストはロックフリーの検索構造として比較的簡単に実装でき、明らかな利点があるため、実用上非常に興味深いものです。一方、Bツリーは、同時アクセスのもとでパフォーマンスを向上させることがかなり困難です。


二分探索木の予想される深さも対数です。なぜここの状況は良くなるのですか?(また、ランダムな順列を想定していますか?)
ラファエル

2
検索ツリーでは、深さはデータに依存します。乱数を入力すると、非常に高い確率で対数深度になります。ただし、実際にはデータはランダムではありません。スキップリストはデータをランダム性のソースとして使用しないため、この問題は発生しません。
adrianN 2013年

1

スキップリストには、単に挿入/検索/削除以外の操作が使用される状況で魅力的な他のプロパティがあります。

O(1)O(1)

さらに、スキップリストは、同時比較ベースの検索構造を実装する一般的な方法です。歴史的には、バランスのとれた検索ツリーは、高い同時競合下で同様に実行されていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.