2
バイナリヒープを証明する有し
私がいることを証明しようとしているバイナリヒープを持つのノードが正確に持って⌈ nはnnn葉は、ヒープは次のように構築されていることを考えます:⌈ n個2⌉⌈n2⌉\left\lceil \frac{n}{2} \right\rceil percolate upを介して新しいノードがそれぞれ挿入されます。これは、次に使用可能な子で新しいノードをそれぞれ作成する必要があることを意味します。これが意味することは、子供たちはレベルダウンで、左から右に満たされているということです。たとえば、次のヒープ: 0 / \ 1 2 う有し、このために構築されました:0、1、2(数値は、彼らが、そのノードに保持されている実際のデータの兆候を与えない、単に指標です。) これには2つの重要な意味があります。 レベルkが完全に満たされていなければ、レベルノードは存在できません。k + 1k+1k+1kkk 子は左から右に構築されるため、レベルノード間に「空のスペース」、または以下のような状況はありません。 k + 1k+1k+1 0 / \ 1 2 / \ \ 3 4 6 (これは私の定義では違法なヒープです。)したがって、このヒープを考える良い方法は、ヒープの配列実装です。 だから、私は誘導がおそらくこれを行うための良い方法になると思っていた...おそらくnのための奇妙なケースでさえ対処しなければならない何か。たとえば、この方法で構築されたヒープでさえ、偶数nには1つの子を持つ内部ノードがあり、奇数nにはそのようなノードがないという事実を使用した帰納法です。アイデア?