ロープ用にヴァンエムデボアスの木に相当するものはありますか?


23

私が知っている誰かが近い将来にテキストエディタを実装することを計画しているので、テキストエディタにとってどのようなデータ構造が高速かを考えるようになりました。最も使用される構造は、明らかにロープまたはギャップバッファです。

Van Emde Boasツリーは、最速の優先度キューの周りにあります。もしあなたがそこに入れることができるアイテムの数と大きな初期化コストの上限を気にしないなら。私の質問は、van Emde Boasツリーと同じくらい速いが、テキストエディター操作をサポートするデータ構造が存在するかどうかです。

データ構造でサポートする必要があるのは最大文字です(場合、最大4GBのASCII文字をサポートします)。私たちは許可されている時間新しいデータ構造を初期化します。次の操作をサポートしたいと思います。ログM = 32 mlogm=32m

  • 位置に文字を挿入し(これにより、後続のすべての文字の位置を1ずつ増やし)。O log log m iO(loglogm)
  • 位置の文字を削除し中。O log log m iO(loglogm)
  • 位置にある文字を返します。中。O log log m iO(loglogm)

したがって、insert(0、 'a')に続いてinsert(0、 'b')を実行すると、「ba」になります。

さらに良いのはこれです:

  • いくつかのインデックスへの「ポインタ」を返します中。O log log m iO(loglogm)
  • 'pointer'を指定すると、この位置にある文字を返します。O(1)
  • 'pointer'を指定すると、この位置の文字を削除します。O(1)
  • 「ポインタ」を指定すると、この位置に文字を追加し、次の位置へのポインタを返します。O(1)
  • (オプション) 'pointer'を指定すると、次/前の文字への 'pointer'を返します。O(1)

回答:


14

フレッドマンとサックスは、「動的データ構造のセルプローブの複雑さ」で、である操作の償却時間よりも良くできないことを示しています。探している。彼らはこの問題を「リスト表現」と呼んでいます。Θ(lgmlglgm)

Dietzは、この限界を達成する「リストのインデックス付けとサブセットランクの最適なアルゴリズム」でデータ構造を提示しました。


最初の記事へのリンクをお願いできますか?
ラファエル

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