2017-09-27 10 views
0

私はソートされたフラットリスト(展開されたリンクリストデータ構造)になるツリーデータ構造を持っています。ここで私は高速バイナリ検索を行いたいと思いました。各リスト要素は元のツリー構造から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 

答えて

0

、あなたがlinked listを考えています。

挿入について、リンクされたリストはO(n)の検索時間とO(1)の挿入時間を持ち、木は検索時間とO(n)からO彼らのソート方法については、see for yourselfをお伝えします。

最後に、O(ログn)検索時間のツリーを使用している場合は、直接使用する方がよいでしょう。それ以外の場合は、ツリーをソートされたリンクリスト(たぶんO(n))。

また、ボーナスとして、ツリーの「中間」の子を読む科学用語は、事前注文とポストオーダートラバースとは対照的に、「インオーダートラバーサル」と呼ばれます。

+0

リンクリストの各要素には、次の要素へのポインタが含まれていることが分かりました。私が持っているのは、リンクされたリスト(むしろリンクされていないリンクされたリストですが、ここでは関係していないようです)は、要素が子要素の中間を指しています(要素が以前はn個の子ノード)。この構造は、通常のリンクリストとは異なります。これには名前がありますか? – kitomer

+0

なぜ私は元のツリー構造を最初から平坦化しているのかについて:実際にはツリーを持っていなくても、リンクされていないリストにデータを保持しています。私はデータの実際の意味構造を説明するために私の質問にツリーを導入しました。 – kitomer

+0

@kitomer私は、あなたが話している構造(特に "子要素の中間"をどのように定義しているか)を本当に理解していません。あなたは例を投稿できますか?ダイアグラム、クラス/構造体定義、 "追加"メソッド? – anto418

関連する問題