バイナリヒープを証明する有し


16

私がいることを証明しようとしているバイナリヒープを持つのノードが正確に持ってnはn葉は、ヒープは次のように構築されていることを考えます:n2

percolate upを介して新しいノードがそれぞれ挿入さます。これは、次に使用可能な子で新しいノードをそれぞれ作成する必要があることを意味します。これが意味することは、子供たちはレベルダウンで、左から右に満たされているということです。たとえば、次のヒープ:

    0
   / \
  1   2

有し、このために構築されました:0、1、2(数値は、彼らが、そのノードに保持されている実際のデータの兆候を与えない、単に指標です。)

これには2つの重要な意味があります。

  1. レベルkが完全に満たされていなければ、レベルノードは存在できません。k+1k

  2. 子は左から右に構築されるため、レベルノード間に「空のスペース」、または以下のような状況はありません。 k+1

        0
       / \
      1   2
     / \   \
    3  4    6
    

(これは私の定義では違法なヒープです。)したがって、このヒープを考える良い方法は、ヒープの配列実装です。

だから、私は誘導がおそらくこれを行うための良い方法になると思っていた...おそらくnのための奇妙なケースでさえ対処しなければならない何か。たとえば、この方法で構築されたヒープでさえ、偶数nには1つの子を持つ内部ノードがあり、奇数nにはそのようなノードがないという事実を使用した帰納法です。アイデア?


@DaveClarke:まったくそうではありません。リンクされた質問は、参考のためにそこに残された編集者の部分に対する誤解の結果です。
ラファエル

ノード番号またはそれぞれの帰納を試みましたか?挿入数
ラファエル

@DaveClarke:なぜですか?それ自体が有効な質問です。
ラファエル

ところで、質問はヒープとは関係ありません。請求はいずれかのために保持している完全なバイナリツリー
蘭G.

回答:


8

kk1

次に、証明はこのようになります。

  1. k2k+11
  2. k
    1. k12k1
    2. n2k+1
  3. k
  4. 2k1k1n2k+122k1n2k+12
  5. n2k+1+2k1n2k+12

1
fullcompleteとは異なり、complete完全なバイナリツリーとは異なることに注意してください。残念ながらあいまいで一貫性のない単語の選択がありますが、それについて何ができますか。ウィキペディアの定義に固執することは理にかなっていると思います。ほとんどの人が最初にそこを見るでしょうか?
ラファエル

ああ、すごい、これらの用語さえ知らなかった。これを指摘してくれてありがとう。
ランG.

「レベルk-1までは、ツリーは完全です(2 ^ k − 1個のノードがあります)」と「したがって、レベルk-1の2 ^(k-1)個のノードのうち」は矛盾するステートメントのようです。または私は何かが欠けていますか?
エイドリアンh。

2k12k12k1+2k2+...

ああ、あなたは完全に正しいです、説明に感謝します!
エイドリアンh。

11

これは、より単純な論理的証明です。

nthn/2n/2+1)thn/2

(n/2)(n/2)


1
非常に直感的で明確な説明。ありがとう。
ホワイトハット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.