私が知っている誰かが近い将来にテキストエディタを実装することを計画しているので、テキストエディタにとってどのようなデータ構造が高速かを考えるようになりました。最も使用される構造は、明らかにロープまたはギャップバッファです。
Van Emde Boasツリーは、最速の優先度キューの周りにあります。もしあなたがそこに入れることができるアイテムの数と大きな初期化コストの上限を気にしないなら。私の質問は、van Emde Boasツリーと同じくらい速いが、テキストエディター操作をサポートするデータ構造が存在するかどうかです。
データ構造でサポートする必要があるのは最大文字です(場合、最大4GBのASCII文字をサポートします)。私たちは許可されている時間新しいデータ構造を初期化します。次の操作をサポートしたいと思います。ログM = 32 √
- 位置に文字を挿入し(これにより、後続のすべての文字の位置を1ずつ増やし)。O (log log m )
- 位置の文字を削除し中。O (log log m )
- 位置にある文字を返します。中。O (log log m )
したがって、insert(0、 'a')に続いてinsert(0、 'b')を実行すると、「ba」になります。
さらに良いのはこれです:
- いくつかのインデックスへの「ポインタ」を返します中。O (log log m )
- 'pointer'を指定すると、この位置にある文字を返します。
- 'pointer'を指定すると、この位置の文字を削除します。
- 「ポインタ」を指定すると、この位置に文字を追加し、次の位置へのポインタを返します。
- (オプション) 'pointer'を指定すると、次/前の文字への 'pointer'を返します。