Reicht die Teilordnung im Gegensatz zur Gesamtordnung aus, um einen Haufen zu bauen?
C ++ std :: priority_queue benötigt nur eine Teilreihenfolge. Aber wenn seine Umsetzung abinärer Haufen, wie funktioniert es? Beispiel: Nehmen wir an, wir haben ein teilweise bestelltes Set( {a, b, c, x}, {c < b, b < a, c < a} )
, x
hat nichts zu tun mita
, b
, c
. Dann ist ein Max-Heap:
layer 1: x
layer 2: b x
layer 3: x x a c
Ersetzen Sie nach einer Pop-Operation, wie in Lehrbüchern üblich, die Wurzel durchc
und verringern Sie die Größe um 1. Dann müssen wir den Baum unten an der Wurzel heapifizieren:
layer 1: c
layer 2: b x
layer 3: x x a
Wir werden tauschenc
undb
wiec < b
werden wir nicht Und was? Seitdem haben wir noch keinen gültigen Heapb < a
. Aberb
kann nicht sehen"a
.