EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Ähnliche Dokumente
EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 15/16

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

EINI I. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 10/11

Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 18/19

Copyright, Page 1 of 7 Heapsort

Sortieren II / HeapSort Heaps

Suchen und Sortieren Sortieren. Heaps

7. Sortieren Lernziele. 7. Sortieren

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

Algorithmen und Datenstrukturen Heapsort

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Vorlesung Datenstrukturen

Algorithmen und Datenstrukturen

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Programmiertechnik II

18. Natürliche Suchbäume

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

Kap. 3: Sortieren (3)

5.5 Prioritätswarteschlangen

Auswählen nach Rang (Selektion)

SORTIEREN MIT BÄUMEN - HEAPSORT

Algorithmen und Datenstrukturen (für ET/IT)

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16

9. Natürliche Suchbäume

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

Lernmodul 7 Algorithmus von Dijkstra

Kapitel 12: Induktive

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

Datenstrukturen & Algorithmen

Abgabe: (vor der Vorlesung) Aufgabe 7.1 (P) Binomial Heap

Informatik II, SS 2018

Diskrete Strukturen Kapitel 4: Graphentheorie (Bäume)

Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Suchen und Sortieren Sortieren. Heaps

Rotation. y T 3. Abbildung 3.10: Rotation nach rechts (analog links) Doppelrotation y

Informatik II Prüfungsvorbereitungskurs

Aufgaben, Hilfestellungen und Musterlösungen zum Modul 5 Druckversion

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Kap. 3 Sortieren. 7. VO DAP2 SS Mai Vorlesung am Do 7.5. entfällt wegen FVV um 14 Uhr HeapSort ff 3.1.

Grundlagen der Algorithmen und Datenstrukturen Kapitel 6

ContainerDatenstrukturen. Große Übung 4

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Anwendungsbeispiel MinHeap

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Vorlesung Datenstrukturen

(Digital) Sorting. October 25, Algorithms & Datastructures 2 Exercises WS 2016

Clausthal C G C C G C. Informatik II Bäume. G. Zachmann Clausthal University, Germany Beispiele.

WS 2013/14. Diskrete Strukturen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Informatik II Vorlesung am D-BAUG der ETH Zürich

Algorithmen I. Tutorium 1-5. Sitzung. Dennis Felsing

Präsenzübung Datenstrukturen und Algorithmen SS 2014

Algorithmen und Datenstrukturen II

Technische Universität München. Vorlesungsgrobstruktur: wo stehen wir, wie geht s weiter

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

Algorithmen und Datenstrukturen

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Informatik B Sommersemester Musterlösung zur Klausur vom

Tutoraufgabe 1 (Sortieralgorithmus):

Algorithmen und Datenstrukturen

Prüfung Algorithmen und Datenstrukturen I

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

Heapsort. Ziel: Sortieren Feld A[1..n]von nschlüsseln in O(n log n)worst case Zeit(so wie Mergesort), aber ohne Zusatzspeicher(so wie Quicksort).

Vorlesung Datenstrukturen

Algorithmen und Datenstrukturen 1

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Transkript:

EINI LW Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 11/12 Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@udo.edu http://ls1-www.cs.uni-dortmund.de EINI Kap. 5 Arrays Internes Sortieren 1

EINI Kap. 5 Arrays Internes Sortieren 2 Thema Kapitel 5 Algorithmen und Datenstrukturen Konstruktion von Datentypen: Algorithmen: Arrays Sortieren Unterlagen Gumm/Sommer, Kapitel 2.7 & 2.8 Echtle/Goedicke, Einführung in die Programmierung mit Java, dpunkt Verlag, Kapitel 4 Doberkat/Dißmann, Einführung in die objektorientierte Programmierung mit Java, Oldenbourg, Kapitel 3.4 & 4.1

EINI Kap. 5 Arrays Internes Sortieren 3 Übersicht Begriffe Spezifikationen, Algorithmen, formale Sprachen, Grammatik Programmiersprachenkonzepte Grundlagen der Programmierung Algorithmen und Datenstrukturen Felder Sortieren Rekursive Datenstrukturen (Baum, binärer Baum, Heap) Heapsort Objektorientierung Einführung Vererbung Anwendung

EINI Kap. 5 Arrays Internes Sortieren 4 Binärer Baum Definition: Binärer Baum 1. Der "leere" Baum ist ein binärer Baum mit der Knotenmenge. 2. Seien B i binäre Bäume mit den Knotenmengen K i, i = 1,2. Dann ist auch B = (w, B 1, B 2 ) ein binärer Baum mit der Knotenmenge K = {w} K 1 K 2. ( bezeichnet disjunkte Vereinigung.) 3. Jeder binäre Baum B lässt sich durch endlich häufige Anwendung von 1.) oder 2.) erhalten.

EINI Kap. 5 Arrays Internes Sortieren 5 Binärer Baum Sprech-/Darstellungsweisen (im Falle 2.)): Sei B = (w, B 1, B 2 ) binärer Baum w heißt Wurzel, B 1 linker und B 2 rechter Unterbaum. w Wurzel B 1 B 2 linker Unterbaum rechter Unterbaum

EINI Kap. 5 Arrays Internes Sortieren 6 Binärer Baum Darstellung eines Beispiels nach Definition: B 1 = (k 1,, (k 2, (k 3,, ), )). k 1 k 2 k 3

EINI Kap. 5 Arrays Internes Sortieren 7 Terminologie Binäre Bäume Wurzel innerer Knoten Blatt

EINI Kap. 5 Arrays Internes Sortieren 8 Knotenmarkierter binärer Baum Definition: Sei M eine Menge. (B, km) ist ein knotenmarkierter binärer Baum (mit Markierungen aus M) : 1. B ist binärer Baum (mit Knotenmenge K = K(B)) 2. km: K --> M Abbildung. (Markierung/Beschriftung der Knoten k K mit Elementen m M) Jedem Knoten wird ein Element aus der Menge M zugeordnet. Alternative: Markierung von Kanten.

EINI Kap. 5 Arrays Internes Sortieren 9 Knotenmarkierter binärer Baum Beispiel M := Z, Z := Menge der ganzen Zahlen Damit existiert auf M eine Ordnung! "Übliche" Darstellung der Knotenbeschriftung km durch "Anschreiben" der Beschriftung an/in die Knoten. 16 24 18 k 1 k 2 k 3

EINI Kap. 5 Arrays Internes Sortieren 10 Definition: Heap Ein Heap (Haufen) ist ein knotenmarkierter binärer Baum, für den gilt: Die Markierungsmenge ist geordnet. Der binäre Baum ist links-vollständig. Die Knotenmarkierung der Wurzel ist kleiner oder gleich der Markierung des linken resp. rechten Sohnes (, sofern vorhanden). Die Unterbäume der Wurzel sind Heaps. An der Wurzel steht das kleinste (eines der kleinsten) Element(e).

EINI Kap. 5 Arrays Internes Sortieren 11 Beispiel: Heap Binärbaum Alle Ebene, bis auf letzte vollständig gefüllt Links-vollständig gefüllt Knotenmarkierung der Wurzel kleiner als die der Kinder

Abstrakte Datentypen Grobidee zum abstrakten Datentyp Heap Datenstruktur siehe Folien vorher Operationen Init Einfügen eines Elementes in einen Heap Entfernen eines der kleinsten Elemente/des kleinsten Elementes aus dem Heap und Hinterlassen eines Rest- Heaps Zudem: Heap ist leer?/ Heap ist voll? Drucken... EINI Kap. 5 Arrays Internes Sortieren 12

EINI Kap. 5 Arrays Internes Sortieren 13 Implementierung über Feld Darstellung: Binärer Baum <--> Feld S[1] S[2] S[3] S[4] S[5] S[6] S[7] S[8] S[9] S[10] S[11] S[12] S[13] S[] S[15] Array S[1] S[2] S[3] S[4] S[12] S[13] S[] S[15]

EINI Kap. 5 Arrays Internes Sortieren Implementierung über Feld Beziehung Baum-Feld-Darstellung: Der Inhalt des i-ten Knotens in der Baumdarstellung wird im i-ten Feldelement abgelegt. Das bedeutet: Baum ebenenweise von links nach rechts eintragen. Das Feldelement a[0] wird nicht verwendet! Beobachtung: Die Söhne des Knotens i in einem Heap haben die Knotennummern 2i : linker Sohn 2i + 1 : rechter Sohn Beweis : Induktiv

EINI Kap. 5 Arrays Internes Sortieren 15 Implementierung über Feld Ebene 0 S[1] Ebene 1 S[2] S[3] Ebene 2 S[4] S[5] S[6] S[7] Ebene 3 S[8] S[9] S[10] S[11] S[12] S[13] S[] S[15] Array S[1] S[2] S[3] S[4] S[12] S[13] S[] S[15] In Tiefe i befinden sich die Schlüssel S[2 i 2 i+1-1]

Implementierung über Feld linker Sohn von S[i] S[2i] rechter Sohn von S[i] S[2i+1] Vater von S[i] S[ i/2 ] Ebene 0 Ebene 1 S[3] Ebene 2 S[6] S[7] Ebene 3 S[8] S[9] S[10] S[11] S[12] S[13] S[] S[15] Array S[3] S[12] S[13] S[] S[15] EINI Kap. 5 Arrays Internes Sortieren 16

EINI Kap. 5 Arrays Internes Sortieren 17 Heap-Eigenschaft Die Heapeigenschaft wird über die Inhalte definiert Ein Feld a mit n ganzen Zahlen realisiert einen Heap, falls a[i/2] a[i] für alle i= 2,..., n gilt. Der Wert des Vaters ist höchstens so groß, wie der der Söhne Dabei ist "/" als ganzzahlige Division zu verstehen. z.b. 5/2 = 2 Verzicht auf Floor( )-Funktion in der Notation In einem (Minimum-)Heap, realisiert durch das Feld a, steht das kleinste Element immer in a[1]. Analog wird der Maximum-Heap definiert

EINI Kap. 5 Arrays Internes Sortieren 18 Beobachtungen Ein Feld S[1... n] ist ein Heap ab l, wenn der Teilbaum mit Wurzel l ein Heap ist. Jedes Feld ist ein Heap ab n/2 + 1, denn alle Einträge mit Indices ab n/2 + 1 haben keine Kinder, d.h. der Teilbaum besteht nur aus einer Wurzel Ist S[1... n] ein Heap ab l, so ist S ebenfalls ein Heap ab 2l und 2l + 1. S[1] S[2] S[3] S[4] S[5] S[6] S[7] S[8] S[9] S[10] S[11] S[12] S[13] S[] S[15] S[1] S[2] S[3] S[4] S[12] S[13] S[] S[15]

EINI Kap. 5 Arrays Internes Sortieren 19 Operation Einfügen: Algorithmus Eingabe: Heap a mit n Elementen, neues Element x Ergebnis: Heap a mit n+1 Elementen, x seiner Größe gemäß eingefügt Vorgehensweise: Schaffe neuen Knoten n+1, setze a[n+1] = x Füge also neuen Knoten mit Beschriftung x in den Heap (evtl.noch an falscher Stelle) ein Sortiere an richtige Stelle ein

EINI Kap. 5 Arrays Internes Sortieren Operation Einfügen "An richtige Stelle einsortieren" - Idee: einsortieren(k) : k bezeichnet Knotennummer ist k=1, so ist nichts zu tun, ist k>1, so geschieht folgendes: falls a[k/2] > a[k], vertausche a[k/2] mit a[k], rufe einsortieren(k/2) auf Verletzung der Heap-Eigenschaft einsortieren ist somit eine rekursive Funktion

EINI Kap. 5 Arrays Internes Sortieren 21 Beispiel Ausgangssituation 3 6 12 7 13 18 11

EINI Kap. 5 Arrays Internes Sortieren 22 Beispiel Einfügen der Zahl 11 in den Heap 11 3 6 12 7 13 18

EINI Kap. 5 Arrays Internes Sortieren 23 Beispiel Linksvollständigkeit bietet nur eine Position 3 6 12 7 13 18 11

EINI Kap. 5 Arrays Internes Sortieren 24 Beispiel Binärer Baum? Ja. Test auf Heap-Eigenschaften 3 6 12 7 13 18 11

EINI Kap. 5 Arrays Internes Sortieren 25 Beispiel Binärer Baum? Ja. Test auf Heap-Eigenschaften 3 6 12 7 13 18 11

EINI Kap. 5 Arrays Internes Sortieren 26 Beispiel Vater größer als Sohn Positionen vertauschen 3 6 12 7 13 18 11

EINI Kap. 5 Arrays Internes Sortieren 27 Beispiel Knoten mit Inhalt 18 an der richtigen Position. 3 6 12 7 13 11 18

EINI Kap. 5 Arrays Internes Sortieren 28 Beispiel Knoten mit Inhalt 11 an der richtigen Position? Rekursiver Aufruf! 3 6 12 7 13 11 18

EINI Kap. 5 Arrays Internes Sortieren 29 Beispiel Binärer Baum? Ja. Test auf Heap-Eigenschaften 3 6 12 7 13 11 18

EINI Kap. 5 Arrays Internes Sortieren 30 Beispiel Vater größer als Sohn Positionen vertauschen 3 6 12 7 13 11 18

EINI Kap. 5 Arrays Internes Sortieren 31 Beispiel Knoten mit Inhalt 12 an der richtigen Position. 3 6 11 7 13 12 18

EINI Kap. 5 Arrays Internes Sortieren 32 Beispiel Knoten mit Inhalt 11 an der richtigen Position? Rekursiver Aufruf! 3 6 11 7 13 12 18

EINI Kap. 5 Arrays Internes Sortieren 33 Beispiel Binärer Baum? Ja. Test auf Heap-Eigenschaften 3 6 11 7 13 12 18

EINI Kap. 5 Arrays Internes Sortieren 34 Beispiel Binärer Baum? Ja. Heap? Ja. 3 6 11 7 13 12 18

EINI Kap. 5 Arrays Internes Sortieren 35 Beispiel Fertig! Neuer Heap mit eingefügtem Inhalt 11. 3 6 11 7 13 12 18

EINI Kap. 5 Arrays Internes Sortieren 36 Beispiel mit Array Ausgangssituation 1 3 2 3 6 12 4 5 6 7 7 13 18 8 9 10 11 12 11 3 6 12 7 13 18.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 37 Beispiel mit Array Einfügen der Zahl 11 in den Heap 11 1 3 2 3 6 12 4 5 6 7 7 13 18 8 9 10 11 12 3 6 12 7 13 18.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 38 Beispiel mit Array Linksvollständigkeit bietet nur eine Position 1 3 2 3 6 12 4 5 6 7 7 13 18 8 9 10 11 12 13 11 3 6 12 7 13 18 11... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 39 Beispiel mit Array Binärer Baum? Ja. Test auf Heap-Eigenschaften 1 3 2 3 6 12 4 5 6 7 7 13 18 8 9 10 11 12 13 11 3 6 12 7 13 18 11... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 40 Beispiel mit Array Binärer Baum? Ja. Test auf Heap-Eigenschaften 1 3 2 3 6 12 4 5 6 7 7 13 18 8 9 10 11 12 13 11 3 6 12 7 13 18 11... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 41 Beispiel mit Array Vater größer als Sohn Positionen vertauschen 1 3 2 3 6 12 4 5 6 7 7 13 18 8 9 10 11 12 13 11 3 6 12 7 13 18 11... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 42 Beispiel mit Array Knoten mit Inhalt 18 an der richtigen Position. 1 3 2 3 6 12 4 5 6 7 7 13 11 8 9 10 11 12 13 18 3 6 12 7 13 11 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 43 Beispiel mit Array Knoten mit Inhalt 11 an der richtigen Position? Rekursiver Aufruf! 1 3 2 3 6 12 4 5 6 7 7 13 11 8 9 10 11 12 13 18 3 6 12 7 13 11 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 44 Beispiel mit Array Binärer Baum? Ja. Test auf Heap-Eigenschaften 1 3 2 3 6 12 4 5 6 7 7 13 11 8 9 10 11 12 13 18 3 6 12 7 13 11 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 45 Beispiel mit Array Vater größer als Sohn Positionen vertauschen 1 3 2 3 6 12 4 5 6 7 7 13 11 8 9 10 11 12 13 18 3 6 12 7 13 11 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 46 Beispiel mit Array Knoten mit Inhalt 12 an der richtigen Position. 1 3 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 13 18 3 6 11 7 13 12 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 47 Beispiel mit Array Knoten mit Inhalt 11 an der richtigen Position? Rekursiver Aufruf! 1 3 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 13 18 3 6 11 7 13 12 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 48 Beispiel mit Array Binärer Baum? Ja. Test auf Heap-Eigenschaften 1 3 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 13 18 3 6 11 7 13 12 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 49 Beispiel mit Array Binärer Baum? Ja. Heap? Ja. 1 3 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 13 18 3 6 11 7 13 12 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 50 Beispiel mit Array Fertig! Neuer Heap mit eingefügtem Inhalt 11. 1 3 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 13 18 3 6 11 7 13 12 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 51 Beispiel Neuer Knoten mit k = 13 einsortieren(13) a[k/2] > a[k]? a[6] > a[13]? 18 > 11? Ja, also tauschen a[6] a[13] einsortieren(6) a[k/2] > a[k]? a[3] > a[6]? 12 > 11? Ja, also tauschen a[3] a[6] einsortieren(3) a[k/2] > a[k]? a[1] > a[3]? 3 > 11? Nein, fertig

Code: einsortieren In das Feld heapfeld wird richtig einsortiert gemäß: void einsortieren(int knotennr) { if (knotennr > 1){ int vaternr = knotennr/2; } } if (heapfeld[knotennr] < heapfeld[vaternr]) { tausche(knotennr, vaternr); einsortieren(vaternr); } EINI Kap. 5 Arrays Internes Sortieren 52

EINI Kap. 5 Arrays Internes Sortieren 53 Entfernen des kleinsten Elementes Idee einer Hau-Ruck-Lösung: Entfernen des kleinsten Elements Baue einen neuen Heap ohne das erste Element auf z.b. durch sukzessives Einfügen der Elemente in einen neuen Heap Nachteil Berücksichtigt nicht, dass vor dem Entfernen des kleinsten Elements ein Heap vorliegt Idee einer effizienteren Lösung Verwende genau diese Information

Erzeugung eines Heaps Wie behält man in diesem Fall einen Heap? Beobachtung Jedes Blatt erfüllt die Heapbedingung Allgemeinere Situation: Wurzel erfüllt die Heap-Bedingung Unterbäume sollen die Heap-Bedingung erfüllen EINI Kap. 5 Arrays Internes Sortieren 54

EINI Kap. 5 Arrays Internes Sortieren 55 Erzeugung eines Heaps Idee: Lasse die Wurzel einsinken Vergleiche den Eintrag im Knoten k mit denen seiner Söhne (soweit vorhanden) Falls der Eintrag im Knoten k kleiner oder gleich als diejenigen beider Söhne ist o.k. Falls der Eintrag des Knotens k größer als der kleinere Eintrag beider Söhne ist: Ermittle den Sohn s mit dem kleineren Eintrag, Vertausche den Eintrag des Knotens k mit demjenigen des Sohnes s, Wiederhole die Überlegungen mit diesem Knoten s.

EINI Kap. 5 Arrays Internes Sortieren 56 Beispiel Entfernen der Wurzel (kleinstes Element). 1 3 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 13 18 3 6 11 7 13 12 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 57 Beispiel Füllen der Wurzel mit dem letzten Element. 1 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 13 18. 6 11 7 13 12 18... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 58 Beispiel Knoten mit Index 13 wird nicht mehr benötigt. 1 18 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 18 6 11 7 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 59 Beispiel Binärer Baum? Ja. Heap? 1 18 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 18 6 11 7 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 60 Beispiel Knoten mit Index 2 ist der kleinere Sohn. Vater ist größer 1 18 2 3 6 11 4 5 6 7 7 13 12 8 9 10 11 12 18 6 11 7 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 61 Beispiel Tausche Vater (Index 1) mit kleinerem Sohn (Index 2). 1 6 2 3 18 11 4 5 6 7 7 13 12 8 9 10 11 12 6 18 11 7 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 62 Beispiel Knoten mit Index 1, Inhalt 6 am richtigen Platz. 1 6 2 3 18 11 4 5 6 7 7 13 12 8 9 10 11 12 6 18 11 7 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 63 Beispiel Rekursiver Aufruf mit geändertem Sohn. 1 6 2 3 18 11 4 5 6 7 7 13 12 8 9 10 11 12 6 18 11 7 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 64 Beispiel Binärer Baum? Ja. Heap? 1 6 2 3 18 11 4 5 6 7 7 13 12 8 9 10 11 12 6 18 11 7 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 65 Beispiel Knoten mit Index 4 ist der kleinere Sohn. Vater ist größer 1 6 2 3 18 11 4 5 6 7 7 13 12 8 9 10 11 12 6 18 11 7 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 66 Beispiel Tausche Vater (Index 2) mit kleinerem Sohn (Index 4). 1 6 2 3 7 11 4 5 6 7 18 13 12 8 9 10 11 12 6 7 11 18 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 67 Beispiel Knoten mit Index 2, Inhalt 7 am richtigen Platz. 1 6 2 3 7 11 4 5 6 7 18 13 12 8 9 10 11 12 6 7 11 18 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 68 Beispiel Rekursiver Aufruf mit geändertem Sohn. 1 6 2 3 7 11 4 5 6 7 18 13 12 8 9 10 11 12 6 7 11 18 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 69 Beispiel Binärer Baum? Ja. Heap? 1 6 2 3 7 11 4 5 6 7 18 13 12 8 9 10 11 12 6 7 11 18 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 70 Beispiel Knoten mit Index 8 ist der kleinere Sohn. Vater ist größer 1 6 2 3 7 11 4 5 6 7 18 13 12 8 9 10 11 12 6 7 11 18 13 12.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 71 Beispiel Tausche Vater (Index 4) mit kleinerem Sohn (Index 8). 1 6 2 3 7 11 4 5 6 7 9 13 12 8 9 10 11 12 18 10 21 15 6 7 11 9 13 12 18 10 21 15.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 72 Beispiel Knoten mit Index 4, Inhalt 9 am richtigen Platz. 1 6 2 3 7 11 4 5 6 7 9 13 12 8 9 10 11 12 18 10 21 15 6 7 11 9 13 12 18 10 21 15.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 73 Beispiel Rekursiver Aufruf mit geändertem Sohn. 1 6 2 3 7 11 4 5 6 7 9 13 12 8 9 10 11 12 18 10 21 15 6 7 11 9 13 12 18 10 21 15.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 74 Beispiel Der hat keine Nachfolger. Fertig. 1 6 2 3 7 11 4 5 6 7 9 13 12 8 9 10 11 12 18 10 21 15 6 7 11 9 13 12 18 10 21 15.... 0 1 2 3 4 5 6 7 8 9 10 11 12 13 15 16

EINI Kap. 5 Arrays Internes Sortieren 75 Code: Heapify void heapify(int k) { int lsnr = 2*k, rsnr = 2*k + 1, selsohn; // Nummer des linken Sohns // Nummer des rechten Sohns // Nummer des selektierten Sohns if (lsnr <= anzahlknoten && rsnr > anzahlknoten) { //es gibt if (heapfeld[lsnr] < heapfeld[k]) { //keinen tausche(k, lsnr); //rechten } //Sohn } else if (rsnr <= anzahlknoten) { selsohn =(heapfeld[lsnr]<heapfeld [rsnr]? lsnr : rsnr ); // wähle den Sohn mit der kleineren Markierung aus. // Bei Gleichheit wähle den rechten Sohn. } } if (heapfeld[selsohn] < heapfeld[k]) { //Heaptausche(k, selsohn); //Bedingung heapify(selsohn); //verletzt }

EINI Kap. 5 Arrays Internes Sortieren 76 Anwendung 1: Heapsort Aufgabe: Benutze Heap zum (effizienten) Sortieren. Heapsort arbeitet in zwei Phasen: Aufbau eines Heaps aus einem Feld Schrittweiser Abbau des Heaps Auslesen des Wurzelelementes und Entfernen desselben Legen des "letzten" Elementes in die Wurzel Rekonstruktion der Heap-Bedingung für diese restlichen Elemente.

EINI Kap. 5 Arrays Internes Sortieren 77 Zusammenfassung Arrays Datenstruktur zur Abbildung gleichartiger Daten Deklaration Dimensionierung und Zuordnung von Speicher zur Laufzeit Zuweisung: ganzes Array, Werte einzelner Elemente Algorithmen auf Arrays: Beispiel Sortieren naives Verfahren: Minimum bestimmen, entfernen, Restmenge sortieren Heapsort: ähnlich, nur mit Binärbaum über Indexstruktur

EINI Kap. 2 Spezifikation Algorithmus Syntax & Semantik 78 EINI sagt Danke! Frohe Weihnachten & guten Rutsch! Nächste Termine Nächste Vorlesung 13.1.12, 08:30 EF-50, HS1 In der Woche 19.12. 23.12. finden keine Übungen statt! Erste Übung im neuen Jahr 9.1.12