効率的な挿入、削除、検索を備えたデータ構造を探しています。これには通常、バイナリ ツリーが適していますが、アイテムは値に基づいて並べ替えられるのではなく、実際の挿入位置に基づいて並べ替える必要があります (つまり、配列のように)。すべての操作は、配列の場合と同様に、この位置に基づいてアイテムにアクセス、挿入、または削除します。
- getItem(整数位置)
- addItem(int insertPosition, オブジェクト項目)
- removeItem(整数位置)
したがって、基本的な問題は、アイテムを挿入/削除すると、その後のすべてのアイテムのインデックスが 1 シフトされることです。明らかにインデックスを格納しても、O(n) よりも優れた結果が得られることはないため、基本的なバイナリ ツリー/ハッシュ テーブルはアウトです。
これらすべての操作をサブリニア時間で実装できる構造はありますか? 私は二分木を何らかの方法で適応させることができると考え続けており、各ノードに左の枝にノードの数を格納させることで、インデックスによる検索をサポートしたいと考えています。