償却時間での検索、挿入、削除を伴うデータ構造?


25

償却時間で次の操作をサポートする順序付きリストを維持するためのデータ構造はありますか?O(1)

  • GetElement(k):リストの番目の要素を返します。k

  • InsertAfter(x、y):新しい要素yをリストのxの直後に挿入します。

  • Delete(x):リストからxを削除します。

最後の2つの操作では、xがデータ構造への直接のポインターとして与えられていると仮定できます。InsertElementは、yに対応するポインターを返します。InsertAfter(NULL、y)は、リストの先頭にyを挿入します。

たとえば、空のデータ構造から始めて、次の操作は順序付きリストを次のように更新します。

  • InsertAfter(NULL、a) [a]
  • InsertAfter(NULL、b) [b、a]
  • InsertAfter(b、c) [b、c、a]
  • InsertAfter(a、d) [b、c、a、d]
  • Delete(c) [b、a、d]

これらの5つの更新後、GetElement(2)はdを返し、GetElement(3)はエラーを返します。


2
リストインデックスのための最適なアルゴリズムとサブセットランク(1989)私が見つかりました。この問題に対する解決策を。Ω(log nlog log n)
AT

2
@Raphael:彼は、データ構造が配列の場合、と呼ばれる要素を意味すると思います。配列は時間で最初の操作をサポートしますが、2番目の操作はサポートしません。リンクリストは、時間で2番目の操作をサポートしますが、最初の操作はサポートしません。A[k]O(1)O(1)
-JeffE

2
また、バランスの取れたバイナリツリーは、時間で両方の操作をサポートし。O(logn)
-JeffE

1
@Raphael:明確にするために編集されました。
-JeffE

2
ダイナミックアレイ支持@JeffEの最初の2時間(償却cs.uwaterloo.ca/research/tr/1999/09/CS-99-09.pdfO(1)
サンディエゴ

回答:


33

いや

FredmanとSaksは、これらの操作をサポートするデータ構造には、操作ごとに少なくとも償却時間が必要であることを証明しました。(これは、最初のコメントで言及したDietzの論文の参照[1]です。)下限は、更新およびクエリによってアクセスされる個別のメモリアドレスの数のみを考慮する、計算の非常に強力なセルプローブモデル当てはまります。アルゴリズム。Ω(logn/loglogn)

更新操作とクエリ操作に関する追加の前提条件がなければ、Dietzのデータ構造は可能な限り最適です(少なくとも一定の要因まで)。


3
@AT:その限界は決して「間違っている」と証明されたわけではありません。適用されない状況もありますが、それはまったく異なる声明です!
ラファエル

5
@AT:ソートの下限は、はるかに弱い計算モデル、つまりバイナリ決定ツリーで証明されました。境界は、二分決定木とは言えない高速なアルゴリズムを開発することで「間違っている」ことが判明しました。FredmanとSaksの下限が間違っていることを証明するには、メモリにアクセスしない高速なアルゴリズムを設計する必要があります。幸運を祈ります。
-JeffE

@JeffEおよびRaphael; 他の回答を確認し、機会があれば結果を確認/拒否してください。ありがとう。
AT

6

以下のように見えるバリアはクロノグラム技術から解析を変更することによって克服されました。Ω(lognloglogn)

新しい[下]限界は、セルプローブモデル[1]の同様の問題に対して証明されています。その記事を読むことから。私の理解では、その限界はリスト表現の問題にも当てはまります。Ω(logn)


[1] Patrascu、Mihai、およびErik D. Demaine。「セルプローブモデルの対数下限」。SIAMJ. Comput。35、いいえ。4(2006年4月):932–963。doi:10.1137 / S0097539705447256


1
この下限は固定サイズの単語に適用されますが、以前の下限は対数サイズの単語に適用されます。Ω(logn/loglogn)
ユヴァルフィルマス

確かに。また、この境界が一定サイズの単語のリスト表現問題に適用されることを確認できますか?
AT

1
あなた自身が言及したDietzバウンド(hdl.handle.net/1802/5694)のため、私はそれを確認することができます。これにより、複雑さが正確にになり、したがってはなくなります。Ω log n Θ(logn/loglogn) Ω(logn)
-jbapple
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.