私はソートされたフラットリスト(展開されたリンクリストデータ構造)になるツリーデータ構造を持っています。ここで私は高速バイナリ検索を行いたいと思いました。各リスト要素は元のツリー構造からMID子要素である別の要素へのポインタを格納します。速い削除のために、各要素がその「親」を指すのも良いでしょう。高速バイナリ検索のための展開されたツリーとして展開されたツリー
質問:
- これは、すでに指定されたデータ構造ですか?その「公式な」名前は何ですか?
- ソートされた挿入、削除、およびキーaka検索によるランダムアクセスの時間複雑度O(?)はどのくらいですか?
[編集]これは、このような構造の半グラフである:(JSON表記で書かれた)
このツリー:
{
"abc": {
"a": 42,
"b": 43,
"c": 44
},
"d": 45,
"e": {
"f": {
"g": 46,
"h": 47
}
}
}
このリストに平坦化される。 ( " - > x"は、要素がインデックスxにある要素のアドレスを指していることを意味する) (各要素は元のツリーのキーと値があればそれを格納する)
[0] "abc": nil -> 2
[1] "a": 42 -> nil
[2] "b": 43 -> nil
[3] "c": 44 -> nil
[4] "d": 45 -> nil
[5] "e": nil -> 6
[6] "f": nil -> 7
[7] "g": 46 -> nil
[8] "h": 47 -> nil
伝説:私が正しく理解していれば(あなたも前の要素にリンクしている場合は二重にリンクされたリスト)
[INDEX] "KEY": VALUE -> ADDRESS OF MID CHILD ELEMENT
リンクリストの各要素には、次の要素へのポインタが含まれていることが分かりました。私が持っているのは、リンクされたリスト(むしろリンクされていないリンクされたリストですが、ここでは関係していないようです)は、要素が子要素の中間を指しています(要素が以前はn個の子ノード)。この構造は、通常のリンクリストとは異なります。これには名前がありますか? – kitomer
なぜ私は元のツリー構造を最初から平坦化しているのかについて:実際にはツリーを持っていなくても、リンクされていないリストにデータを保持しています。私はデータの実際の意味構造を説明するために私の質問にツリーを導入しました。 – kitomer
@kitomer私は、あなたが話している構造(特に "子要素の中間"をどのように定義しているか)を本当に理解していません。あなたは例を投稿できますか?ダイアグラム、クラス/構造体定義、 "追加"メソッド? – anto418