12. Juli 2012
1 Besprechung Blatt 11 Fragen 2 Binary Search Binäre Suche in Arrays Binäre Suchbäume (Binary Search Tree) 3 Sortierverfahren Allgemein Heapsort Bubblesort Insertionsort Mergesort Quicksort 4 Vorbereitung Blatt 12 Hinweise
1 Besprechung Blatt 11 Fragen 2 Binary Search Binäre Suche in Arrays Binäre Suchbäume (Binary Search Tree) 3 Sortierverfahren Allgemein Heapsort Bubblesort Insertionsort Mergesort Quicksort 4 Vorbereitung Blatt 12 Hinweise
Fragen Fragen zu Blatt 11?
1 Besprechung Blatt 11 Fragen 2 Binary Search Binäre Suche in Arrays Binäre Suchbäume (Binary Search Tree) 3 Sortierverfahren Allgemein Heapsort Bubblesort Insertionsort Mergesort Quicksort 4 Vorbereitung Blatt 12 Hinweise
Binäre Suche in Arrays Zur Erinnerung: Binary Search sucht nach einem Element in einer sortierten Datenstruktur nach dem Divide and Conquer Prinzip. Vorraussetzungen Sortiert Zugriff über Index in O(1) Arrays
Binäre Suche in Arrays Algorithmus Array leer
Binäre Suche in Arrays Algorithmus Array leer Element nicht enthalten sonst:
Binäre Suche in Arrays Algorithmus Array leer Element nicht enthalten sonst: gesuchten Wert mit mittlerem Element vergleichen
Binäre Suche in Arrays Algorithmus Array leer Element nicht enthalten sonst: gesuchten Wert mit mittlerem Element vergleichen Element gleich gefunden Element zu groß gesuchtes Element liegt links Element zu klein gesuchtes Element liegt rechts
Binäre Suche in Arrays Algorithmus Array leer Element nicht enthalten sonst: gesuchten Wert mit mittlerem Element vergleichen Element gleich gefunden Element zu groß gesuchtes Element liegt links Element zu klein gesuchtes Element liegt rechts beginne die Suche im eingegrenzten Array von Neuem
Binäre Suche in Arrays Bei der binären Suche ist es egal, ob man Zahlen oder irgendwelche anderen Elemente durchsucht, für die eine feste Ordnung definiert ist. ( Comparable-Interface)
Binäre Suche in Arrays Bei der binären Suche ist es egal, ob man Zahlen oder irgendwelche anderen Elemente durchsucht, für die eine feste Ordnung definiert ist. ( Comparable-Interface) Problem die Suche ist damit in logarithmischem Aufwand aber: Einfügen in sortiertes Array hat Aufwand O(n)!
Binäre Suchbäume (Binary Search Tree) Binäre Suchbäume - Aufbau (verzeigerte) Baumstruktur, das heißt: ein Wurzelelement (vgl. mit Head in Listen) mehrere Kinder erlaubt (hier Binärbaum max. 2!) wie bei verketteten Listen ist der Speicherverbrauch dynamisch von der momentanen Anzahl der Elemente abhängig.
Binäre Suchbäume (Binary Search Tree) Binäre Suchbäume - Aufbau (verzeigerte) Baumstruktur, das heißt: ein Wurzelelement (vgl. mit Head in Listen) mehrere Kinder erlaubt (hier Binärbaum max. 2!) wie bei verketteten Listen ist der Speicherverbrauch dynamisch von der momentanen Anzahl der Elemente abhängig. Anordnung (über Wert selbst oder Key oder Comparator): kleinere Kinder links größere (und wenn erlaubt gleiche) Kinder rechts Elemente steigen von links nach rechts an
Binäre Suchbäume (Binary Search Tree) Binäre Suchbäume - Aufbau (verzeigerte) Baumstruktur, das heißt: ein Wurzelelement (vgl. mit Head in Listen) mehrere Kinder erlaubt (hier Binärbaum max. 2!) wie bei verketteten Listen ist der Speicherverbrauch dynamisch von der momentanen Anzahl der Elemente abhängig. Anordnung (über Wert selbst oder Key oder Comparator): kleinere Kinder links größere (und wenn erlaubt gleiche) Kinder rechts Elemente steigen von links nach rechts an Im folgenden sind keine doppelten Keys (bzw. Werte, wenn nach diesen sortiert wird) erlaubt.
Binäre Suchbäume (Binary Search Tree) Suchen Baum leer
Binäre Suchbäume (Binary Search Tree) Suchen Baum leer Element nicht enthalten sonst:
Binäre Suchbäume (Binary Search Tree) Suchen Baum leer Element nicht enthalten sonst: gesuchtes Element mit Wurzel vergleichen
Binäre Suchbäume (Binary Search Tree) Suchen Baum leer Element nicht enthalten sonst: gesuchtes Element mit Wurzel vergleichen Element gleich gefunden Element zu groß ges. Element liegt in linkem Unterbaum Element zu klein ges. Element liegt in rechtem Unterbaum
Binäre Suchbäume (Binary Search Tree) Suchen Baum leer Element nicht enthalten sonst: gesuchtes Element mit Wurzel vergleichen Element gleich gefunden Element zu groß ges. Element liegt in linkem Unterbaum Element zu klein ges. Element liegt in rechtem Unterbaum beginne die Suche im Unterbaum von Neuem
Binäre Suchbäume (Binary Search Tree) Suchen Baum leer Element nicht enthalten sonst: gesuchtes Element mit Wurzel vergleichen Element gleich gefunden Element zu groß ges. Element liegt in linkem Unterbaum Element zu klein ges. Element liegt in rechtem Unterbaum beginne die Suche im Unterbaum von Neuem Im Prinzip eine binäre Suche auf einer verzeigerten Datenstruktur. (Zugriff auf die Kinder in O(1))
Binäre Suchbäume (Binary Search Tree) Einfügen
Binäre Suchbäume (Binary Search Tree) Einfügen beginne mit einer Suche nach dem Element diese bricht an 2 Stellen ab:
Binäre Suchbäume (Binary Search Tree) Einfügen beginne mit einer Suche nach dem Element diese bricht an 2 Stellen ab: Abbruch bei leerem Restbaum Element an diese Stelle einfügen
Binäre Suchbäume (Binary Search Tree) Einfügen beginne mit einer Suche nach dem Element diese bricht an 2 Stellen ab: Abbruch bei leerem Restbaum Element an diese Stelle einfügen Element gefunden - je nach Wunsch Element verwerfen, da bereits enthalten bei Sortierung über Keys könnte Aktualisieren des Inhalts sinnvoll sein
Binäre Suchbäume (Binary Search Tree) Löschen beginne mit einer Suche nach dem Element Abbruch in 2 Fällen: leerer Restbaum Element gefunden
Binäre Suchbäume (Binary Search Tree) Löschen beginne mit einer Suche nach dem Element Abbruch in 2 Fällen: leerer Restbaum Element nicht enthalten Element gefunden Element löschen
Binäre Suchbäume (Binary Search Tree) Löschen beginne mit einer Suche nach dem Element Abbruch in 2 Fällen: leerer Restbaum Element nicht enthalten Element gefunden Element löschen Beim Löschen gibt es 3 Möglichkeiten, es darf kein Loch entstehen Element ist ein Blatt Element hat ein Kind Element hat zwei Kinder
Binäre Suchbäume (Binary Search Tree) Löschen beginne mit einer Suche nach dem Element Abbruch in 2 Fällen: leerer Restbaum Element nicht enthalten Element gefunden Element löschen Beim Löschen gibt es 3 Möglichkeiten, es darf kein Loch entstehen Element ist ein Blatt beim Löschen entsteht kein Loch, ok Element hat ein Kind Kind an Stelle des Elements hängen Element hat zwei Kinder Element durch ein innerstes Kind ersetzen (siehe nächste Folie)
Binäre Suchbäume (Binary Search Tree) Löschen Beispiel: Löschen eines Elements mit 2 Kindern Die 6 und die 9 sind die innersten Kinder - alle anderen Unterelemente sind sowohl von der Zahlenordnung als auch von der horizontalen Position gesehen weiter von der 7 (Mitte) entfernt. Quelle: http://en.wikipedia.org/wiki/file:binary_search_tree_delete.svg Daher bleibt die Suchbaumeigenschaft beim Ersetzen erhalten.
1 Besprechung Blatt 11 Fragen 2 Binary Search Binäre Suche in Arrays Binäre Suchbäume (Binary Search Tree) 3 Sortierverfahren Allgemein Heapsort Bubblesort Insertionsort Mergesort Quicksort 4 Vorbereitung Blatt 12 Hinweise
Allgemein Aufwand eines Sortieralgorithmus: average-case (durschnittl. Aufwand) best-case (min. Aufwand) worst-case (max. Aufwand)
Allgemein Aufwand eines Sortieralgorithmus: average-case (durschnittl. Aufwand) best-case (min. Aufwand) worst-case (max. Aufwand) Eigenschaften eines Sortieralgorithmus:
Allgemein Aufwand eines Sortieralgorithmus: average-case (durschnittl. Aufwand) best-case (min. Aufwand) worst-case (max. Aufwand) Eigenschaften eines Sortieralgorithmus: sortiert stabil oder nicht stabil
Allgemein Aufwand eines Sortieralgorithmus: average-case (durschnittl. Aufwand) best-case (min. Aufwand) worst-case (max. Aufwand) Eigenschaften eines Sortieralgorithmus: sortiert stabil oder nicht stabil sortiert in-place oder nicht in-place
Allgemein Aufwand eines Sortieralgorithmus: average-case (durschnittl. Aufwand) best-case (min. Aufwand) worst-case (max. Aufwand) Eigenschaften eines Sortieralgorithmus: sortiert stabil oder nicht stabil sortiert in-place oder nicht in-place ist nicht adaptiv (Aufwand immer gleich) oder adaptiv (Aufwand profitiert von teilw. sortierten Daten)
Allgemein Aufwand eines Sortieralgorithmus: average-case (durschnittl. Aufwand) best-case (min. Aufwand) worst-case (max. Aufwand) Eigenschaften eines Sortieralgorithmus: sortiert stabil oder nicht stabil sortiert in-place oder nicht in-place ist nicht adaptiv (Aufwand immer gleich) oder adaptiv (Aufwand profitiert von teilw. sortierten Daten) sehr gute Referenz: http://sorting-algorithms.com
Allgemein Aufwand eines Sortieralgorithmus: average-case (durschnittl. Aufwand) best-case (min. Aufwand) worst-case (max. Aufwand) Eigenschaften eines Sortieralgorithmus: sortiert stabil oder nicht stabil sortiert in-place oder nicht in-place ist nicht adaptiv (Aufwand immer gleich) oder adaptiv (Aufwand profitiert von teilw. sortierten Daten) sehr gute Referenz: http://sorting-algorithms.com Anmerkung: in Java sind Intervallgrenzen meist in der Form [inklusiv, exklusiv) angegeben!
Heapsort Heapsort Algorithmus (vgl. Herausnehmen aus einem Heap, Übung 10) statt das Maximum herauszunehmen, wird es an die hinterste Position getauscht der Heap wird um eins kürzer und seine Struktur muss wie beim Herausnehmen wiederhergestellt werden dahinter wird die sortierte Reihung rückwärts aufgebaut
Heapsort Heapsort Algorithmus (vgl. Herausnehmen aus einem Heap, Übung 10) statt das Maximum herauszunehmen, wird es an die hinterste Position getauscht der Heap wird um eins kürzer und seine Struktur muss wie beim Herausnehmen wiederhergestellt werden dahinter wird die sortierte Reihung rückwärts aufgebaut Eigenschaften
Heapsort Heapsort Algorithmus (vgl. Herausnehmen aus einem Heap, Übung 10) statt das Maximum herauszunehmen, wird es an die hinterste Position getauscht der Heap wird um eins kürzer und seine Struktur muss wie beim Herausnehmen wiederhergestellt werden dahinter wird die sortierte Reihung rückwärts aufgebaut Eigenschaften sortiert nicht stabil sortiert in-place average-/best-/worst-case O(n log n) nicht adaptiv
Bubblesort Bubblesort Algorithmus von vorne alle Elemente durchgehen, ist ein Element kleiner als sein Vorgänger: tauschen wiederholen, bis kein Tausch mehr nötig ist
Bubblesort Bubblesort Algorithmus von vorne alle Elemente durchgehen, ist ein Element kleiner als sein Vorgänger: tauschen wiederholen, bis kein Tausch mehr nötig ist Eigenschaften sortiert stabil sortiert in-place average-/worst-case O(n 2 ) best-case
Bubblesort Bubblesort Algorithmus von vorne alle Elemente durchgehen, ist ein Element kleiner als sein Vorgänger: tauschen wiederholen, bis kein Tausch mehr nötig ist Eigenschaften sortiert stabil sortiert in-place average-/worst-case O(n 2 ) best-case O(n) (Eingabedaten fast sortiert) adaptiv
Insertionsort Insertionsort Algorithmus von vorne alle Elemente durchgehen jedes Element solange mit seinem Vorgänger tauschen, bis dieser kleiner ist
Insertionsort Insertionsort Algorithmus von vorne alle Elemente durchgehen jedes Element solange mit seinem Vorgänger tauschen, bis dieser kleiner ist Eigenschaften sortiert stabil sortiert in-place average-/worst-case O(n 2 ) best-case O(n) (Eingabedaten fast sortiert) adaptiv
Mergesort Mergesort (Sortieren durch Mischen ) Algorithmus Liste rekursiv halbieren Teile rückwärts mit Reißverschlussverfahren zusammenfügen
Mergesort Mergesort (Sortieren durch Mischen ) Algorithmus Liste rekursiv halbieren Teile rückwärts mit Reißverschlussverfahren zusammenfügen Eigenschaften sortiert stabil sortiert normalerweise nicht in-place average-/best-/worst-case O(n log n) nicht adaptiv
Quicksort Quicksort Algorithmus Pivotelement auswählen Liste aufteilen: (Restlisten noch unsortiert) kleinere Elemente < Pivotelement < größere Elemente wiederholen bis Restlisten leer
Quicksort Quicksort Algorithmus Pivotelement auswählen Liste aufteilen: (Restlisten noch unsortiert) kleinere Elemente < Pivotelement < größere Elemente wiederholen bis Restlisten leer Eigenschaften sortiert nicht stabil sortiert normalerweise nicht in-place average-/best-case O(n log n) worst-case O(n 2 ) (Pivotelement immer schlecht gewählt) adaptiv durchschnittlich schnellster Sortieralgorithmus
1 Besprechung Blatt 11 Fragen 2 Binary Search Binäre Suche in Arrays Binäre Suchbäume (Binary Search Tree) 3 Sortierverfahren Allgemein Heapsort Bubblesort Insertionsort Mergesort Quicksort 4 Vorbereitung Blatt 12 Hinweise
Hinweise Wie teste ich meine Implementierung? Sortierverfahren lassen sich sehr einfach testen, indem man sie mit denen aus der API vergleicht. beliebigen Array erzeugen echte Kopie des Arrays erzeugen ( Arrays.copyOf() ) Original mit eigenem Sortierverfahren testen es gibt eine Überladung von java.util.arrays.sort(), die genau die gleichen Parameter annimmt. mit dieser die Kopie sortieren beide Arrays mit Arrays.toString() ausgeben und vergleichen Erzeugt man keine echte Kopie, so wird 2x der selbe Array sortiert und das Ergebnis zeigt nur den letzten Algorithmus! Details zu den Arrays Methoden in der API.
Hinweise 12.? Zum Rumspielen mit binären Suchbäumen den Link auf dem Übungsblatt oder folgendes Java-Applet verwenden: http://www.site.uottawa.ca/~stan/csi2514/applets/avl/ BT.html (Haken bei AVL rausnehmen!) Alles weitere bis Freitag Topf-Secret!
Hinweise Noch Fragen?
Hinweise Noch Fragen? Danke für die Aufmerksamkeit!