私はE =(K、V)要素の順序付きリストを格納するデータ構造を探しており、多くてもO(log(N))時間であり、Nは要素の数である。メモリ使用量は問題ではありません。インデックスとキーによるランダムアクセスをサポートしているデータ構造、順序が維持された状態でlogaritmic時間での挿入、削除
- Eは(インデックス)//はインデックス
- int型のfind(K)で要素を取得// K一致し
- (インデックス)//がインデックスにある要素を削除し、削除要素のインデックスを見つけます、次の要素は、そのインデックスは、インデックスにある要素を挿入する// 1つの
- 挿入(インデックス、E)減少しており、以下の要素がそのインデックスは、私は、次の間違った解決策を検討している1
増加しています
- 使用アレイ:
find
、delete
、及びinsert
意志依然としてO(N) - 使用アレー+インデックスKのマップ:
delete
とinsert
は依然としてO(N)の費用がかかりますマップ の要素をシフトし、更新します
- 使用は、エレメントアドレスをリスト+ Kのマップをリンク:
get
とfind
はまだ私の想像ではO(N)
の費用がかかります、最後の解決策が最も近いですが、代わりにリンクされたリストの、自己均衡ツリー各ノードが左にある要素の数を格納すると、get
をO(log(N))で実行できるようになります。
私は正しいかどうか分からないので、私の想像力が正しいかどうか、この種のデータ構造の名前があるかどうかを尋ねたいと思いますので、既製のソリューションを探すことができます。
+1答えを待っています。あなたはキーやインデックスを使ってO(lg N)のfind()をサポートしなければならないので、それは可能ですが、構造体(私が知っている)はキーまたはインデックスまたは値によってのみソートできます... – shole
@私はあまりにもあなたが4つの操作から3つの操作を選んで、O(logn)をサポートしていないと思っています4。質問がcs.stackexchange.comでもタグ付けされていると良いかもしれません –