Ich versuche zu beweisen, dass ein binärer Heap mit Knoten genau Blätter hat, , der Heap ist folgendermaßen aufgebaut:⌈ n
Jeder neue Knoten wird per Perkolation eingefügt . Dies bedeutet, dass jeder neue Knoten beim nächsten verfügbaren untergeordneten Knoten erstellt werden muss. Damit meine ich, dass Kinder von links nach rechts und von unten nach unten gefüllt sind. Zum Beispiel der folgende Heap:
0
/ \
1 2
würde haben in dieser Reihenfolge gebaut wurden: 0, 1, 2. (Die Zahlen sind nur Indizes, sie geben keinen Hinweis auf die tatsächlichen Daten in diesem Knoten gehalten.)
Dies hat zwei wichtige Auswirkungen:
Es kann keinen Knoten auf Ebene ohne dass Ebene vollständig gefüllt istk
Da untergeordnete Elemente von links nach rechts erstellt werden, dürfen zwischen den Knoten auf Ebene keine "Leerzeichen" oder Situationen wie die folgenden vorhanden sein:
0 / \ 1 2 / \ \ 3 4 6
(Dies wäre meiner Definition nach ein illegaler Heap.) Ein guter Weg, sich diesen Heap vorzustellen, ist die Array-Implementierung eines Heaps, bei der es keine "Sprünge" zwischen den einzelnen Arrays geben kann.
Also dachte ich, Induktion wäre wahrscheinlich ein guter Weg, um dies zu tun ... Vielleicht muss sich etwas mit geraden und ungeraden Fällen für n befassen. Eine Induktion, die die Tatsache verwendet, dass gerade Heaps, die auf diese Weise erstellt wurden, einen internen Knoten mit einem untergeordneten Knoten für ein gerades n und keinen solchen Knoten für ein ungerades n haben müssen. Ideen?
quelle
Antworten:
Wenn ich Ihre Frage richtig bekommen, ist der erhaltene Haufen nur ein binären Baum bestellt, wo in geordneten meine ich , dass die - ten Stufe kann erst nach dem belegt werden k - 1 Ebene vollständig gefüllt ist, und jede Ebene von links besetzt nach rechts, ohne zu überspringen.k k−1
Dann geht der Beweis so.
quelle
Hier ist ein einfacher logischer Beweis.
quelle