Zum Inhalt springen

Frage zu Max-Heap


r.euch

Empfohlene Beiträge

Hallo.

Ich habe Max-Heap nicht verstanden, also locker bei Wikipedia reingucken, Beispiel abfassen.

Hat aber nicht geholfen, also ab zu fi.de :D

Insbes. verstehe ich das "Beispiel für die Überführung in einen Max-Heap" nicht.

1.) Warum z.B. wird als allerletzter Schritt nicht A und E getauscht? Das müsste man doch gemäss "Versickern (auch: absinken) heißt, dass man einen Knoten mit dem größeren seiner beiden Nachfolgeknoten vertauscht, falls dieser größer ist als er selbst, und damit so lange fortfährt, bis er keinen Nachfolgeknoten mehr hat, der größer ist als er selbst." tun, oder?

2.) Warum wird das H zweimal versickert? Die Buchstaben sind doch konstant?

Nicht hauen, bitte! oder falls doch, nur ein bisschen :(

Tschüß

Link zu diesem Kommentar
Auf anderen Seiten teilen

1.) Warum z.B. wird als allerletzter Schritt nicht A und E getauscht? Das müsste man doch gemäss "Versickern (auch: absinken) heißt, dass man einen Knoten mit dem größeren seiner beiden Nachfolgeknoten vertauscht, falls dieser größer ist als er selbst, und damit so lange fortfährt, bis er keinen Nachfolgeknoten mehr hat, der größer ist als er selbst." tun, oder?
Richtig. Aber im Verlauf der ersten Heap-Erstellung sind A und E niemals in einer Nachfolger-Beziehung. Warum sollten sie also vertauscht werden?

2.) Warum wird das H zweimal versickert? Die Buchstaben sind doch konstant?
Die Heap-Erstellung ist nur ein Teilschritt, der mehrfach durchgeführt werden muss, um das Array zu sortieren. Wenn der Heap erstellt wurde, steht das größte Element ganz vorn. Dann wird durch Vertauschen ein Element aus der untersten Ebene des Heaps an die Wurzel geholt und muss neu versickert werden. Und das kann durchaus mehrfach dasselbe sein.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht etwas abstrakter formuliert:

Du hast einen Heap (Halde), auf die kannst Du Elemente drauf werfe. Jedes Element bekommt einen Schlüssel (Hash) der es auf dem gesamten Heap eindeutig identifiziert.

Nun hast Du aber das Problem, dass wenn Du ein Element suchst, Du im schlimmsten Fall einfach mal alle Schlüssel prüfen musst, bis Du das Element findest => wenn Du die Schlüssel irgendwie vorsortieren kannst, wäre das besser, weil Du in einer sortierten Menge schneller etwas suchen kannst

=> Heapsort

Du nimmst nun den Heap und durchläuft alle Elemente und gibst ihnen einen Schlüssel, den Du nach seiner Größe ordnen kannst. Nun sortierst Du diese Schlüssel in einen Binärbaum ein (ein Knoten eines Binärbaums hat immer genau 2 Nachfolger, in unserem Fall hast Du im Knoten (Vater) den Schlüssel Y stehen, im linken Nachfolger X und im rechten Nachfolger Z _und_ es gilt X < Y < Z). Wenn Du nun den Wurzelknoten betrachtest, dann sind alle Element die im linken Teilbaum hängen kleiner als die Wurzel und alle rechts größer (schau Dir aber dazu einmal einen Binärbaum an).

Wie so ein Baum aussieht hier Binärer Heap ? Wikipedia

Wenn Du aber nun Deinen Heap in diesen Baum überführen willst, weißt Du ja noch nicht, wie der Baum aussieht, d.h. Du weißt nicht wo das Element genau hin muss. Also macht man folgendes, man fügt es einfach ein und erzeugt den Baum neu, in dem man eben dieses Element, das falsch ist (sprich unserer Bedingung X < Y < Z nicht genügt) so lange die Äste hoch wandert, bis es eben an der korrekten Stelle ist.

Wenn Du nun das ganze als sortierte Liste haben willst, dann musst Du diesen Baum nur noch traversieren. Je nach Bedingung X > Y > Z bzw X < Y < Z hast Du eben eine Max bzw MinHeap

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...