効率的なマージをサポートするソートされた辞書構造?


8

多くのバランスの取れたツリー構造(赤/黒ツリー、スプレイツリーなど)およびその他のいくつかのソートされた辞書構造(スキプリスト)は、最初の構造のすべてのキーが2番目の構造のすべてのキーよりも小さい2つの辞書を取り込む結合操作をサポートしています。次に、2つの辞書を組み合わせて、時間で単一のソートされた辞書にします。ここで、nはキーの総数です。ただし、これは、それらのツリーに格納されているキーの範囲に重複がない場合にのみ機能します。O(logn)n

同様に、多くの優先度キュー(二項ヒープ、フィボナッチヒープなど)は、時間のマージをサポートしています。これらのマージは、どのキーが格納されているかに関係なく機能しますが、データ構造が優先キューであるとすると、結果の構造のランダムな要素を検索することはできません。O(logn)

そこ辞書構造をソートし、その時間内の任意の辞書の支持体のマージである、一方の時間で同時に通常のソートされた辞書の動作をサポートする(挿入、欠失、ルックアップ、後継/先行クエリなど)O 対数N 、またはそのような構造が存在できないという下限の証明?O(logn)O(logn)


2
ソートされたディクショナリには他にどのような操作が必要であり、それらはどれだけ速く実行できますか?挿入とルックアップのソートが必要ない場合、二重にリンクされたリストは問題なく動作しますが、マージ以外の操作にはリストの長さで線形時間がかかり、異なるキーの数で超線形になる可能性があります。
jbapple

他のソートされたディクショナリー操作(挿入、削除、ルックアップ、後続操作、先行操作)をサポートし、それらがすべて時間で実行されることが理想的であると想定していました。O(logn)
templatetypedef

質問を編集して、この情報を質問に含めることをお勧めします...
DW

時間でマージできる並べ替えデータ構造(辞書など)が必要であり、nが要素の総数であると正しく理解していますか?O(logn)n
Shahab

回答:


8

たとえば、スプレイツリーのように、フィンガーサーチツリープロパティを持つバランスのとれたバイナリサーチツリーデータ構造(から離れた位置にあるアイテムの検索には時間O log d )がある場合、ソートされたシーケンスを挿入すると、そこへのkアイテムの挿入の合計時間はO k log n / k )になります。dO(logd)kO(klog(n/k))

ここで、挿入、破壊的マージ、および検索をサポートするとします。挿入と検索には、既存の検索ツリー操作を使用するだけです。マージの場合、常に小さなツリーを大きなツリーにマージし、小さなツリーの順序トラバーサルを使用して、並べ替えられた順序を線形時間で取得します。次に、小さなツリーの要素を一度に1つずつ、このソートされた順序で大きなツリーに挿入します。

要素が挿入され、サイズがn 1n 2…の一連の大きなツリーにマージされる場合、挿入とマージの時間合計マージ時間のxの一部のみを数える)はO log n 1O log n 2 / n 1…はO log n )に伸縮シーケンスを追加しますxn1,n2,xO(logn1)O(log(n2/n1))O(logn)。したがって、潜在的なマージシーケンスのこの対数合計時間がの挿入操作に課金される償却スキームを使用する場合、挿入または検索ごとの償却時間はO log n であり、O 1 のみが得られます。マージごとの償却時間。xO(logn)O(1)

削除はこの分析を複雑にしますが、それほど複雑ではありません。それらを処理する1つの方法は、半遅延削除を実行することです。削除されたアイテムはツリーから削除されますが、このツリーのアイテムのカウントからは削除されません。そのため、2つのツリーのどちらが小さいか大きいかを決定すると、これまでツリー内にあったすべてのアイテムを数えます。次いで、O ログN nO(logn)操作ごとの時間は、現在存在する数ではなく、挿入または削除されたアイテムの合計数である必要があります。これらの2つの数値が大きく離れすぎている場合は、すべてのカウントを実際の数値に再調整する更新を行って、データ構造を遅延削除されたアイテムがない状態にリセットできます。この更新の償却時間は、これまでの数をバラバラにするために実行しなければならなかった削除操作に対して請求することができます。または、場合によっては、遅延のない削除を使用してマージの償却を直接機能させることもできますが、その部分の詳細はわかりません。


1
logUU

いいえ、同時にツリー内にあるアイテムの最大数のログを記録するだけです。
David Eppstein
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.