Was ist die Nutzung des Heap-Datenstruktur?
Arbeite ich an einige Hausaufgaben mit Haufen, und ich verstehe, wie Sie strukturiert sind. Ein heap muss jeder Knoten der Erfüllung der heap-Eigenschaft,
die max-heap-Eigenschaft ist, dass für
jeden Knoten i außer der Wurzel,
Heap[Parent(i)] >= Heap[i]
Also an jedem Knoten, der höhere Knoten höhere zahlen haben, den unteren Knoten haben niedrigere zahlen. Verstehe ich das. Aber ich kann nicht sehen eine Verwendung von einem Haufen andere dann einfach Holen Sie sich die höchste n zahlen in einer Liste. Ich sehe nicht einen einfachen Weg, um die Suche auf einen bestimmten Wert und return-Knoten, oder um die Suche für die n-niedrigsten Zahl (in einem max-heap). Beide sind relativ einfach in einem binären Suchbaum.
Warum würden Sie nicht einfach mit einem einfachen binären Suchbaum? Oder noch besser, eine ausgewogene binären Suchbaum?
BEARBEITEN:
Ich sollte anmerken, dass dies nicht auf der Suche nach einer Antwort auf eine Hausaufgaben-problem. Die eigentlichen Hausaufgaben problem war das schreiben pseudocode für parallel-p-heap für die insert() und extractMax () - Funktionen. Und ich schon beantwortet. Sie gerade machte mir klar, dass ich nicht wirklich verstehe Haufen.
- mögliche Duplikate von Wenn würde ich wollen, zu einem heap?
- Ich suchte für die Antwort auf SO verpasste aber, dass man. Und ja, es sieht aus wie ich bin ein dup. Sollte ich in der Nähe meine Frage?
- Das ist nicht notwendig. Es geht um geschlossen zu sein von uns, aber dups sind allgemein als Gute Dinge, da gibt es mehr als einen Weg, um die gleiche Frage zu stellen.
- funktioniert für mich, ich habe meine Antwort.
- bewegen Sie den Kommentar zu einer Antwort und ich werde es akzeptieren.
- Ich habe bereits eine Antwort -- werde ich hinzufügen, dass die neuen Informationen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil der Mangel an Zeigern (Halden in der Regel verwenden Sie eine array-basierte Daten-Struktur), die Operationen, neigen dazu, schneller zu sein als für einen binären Baum. Auch, einige komplizierter Haufen (wie der Binomialverteilung) können zusammengeführt werden, die effizient, das ist nicht leicht für einen binären Baum. Es gibt auch Informationen, die zu diese Frage ALSO.
Die heap-Datenstruktur, die viele Anwendungen hat.
Vollständige und fast vollständige binäre heaps, dargestellt werden können in einem sehr platzsparender Weise unter Verwendung eines Arrays alleine. Der erste (oder Letzte) element enthält die Wurzel. Die nächsten zwei Elemente des Arrays enthalten seine Kinder. Die nächsten vier enthalten die vier Kinder der zwei untergeordneten Knoten, etc. So werden die Kinder von den Knoten an der position n wäre an den Positionen 2n und 2n+1 eine eins-basiertes array, oder 2n+1 und 2n+2 in ein null-basiertes array. Dies ermöglicht das verschieben der up-oder down-Baum durch einfache index-Berechnungen. Balancing ein heap geschieht durch austauschen von Elementen, die sind nicht in Ordnung. Wie bauen wir einen heap aus einem array, ohne dass Sie zusätzlichen Speicher (für die Knoten, zum Beispiel), heapsort kann verwendet werden, um ein array sortiert in-place.
Noch ein Vorteil der Haufen über Bäume in einigen Anwendungen ist, dass der Bau von Haufen getan werden kann in linearer Zeit mit Tarjan ' s Algorithmus.
Referenz: http://en.wikipedia.org/wiki/Heap_%28data_structure%29