Algorithmen und Datenstrukturen 12

Ähnliche Dokumente
Algorithmen und Datenstrukturen

Übung: Algorithmen und Datenstrukturen SS 2007

7. Sortieren Lernziele. 7. Sortieren

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

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

Tutoraufgabe 1 (Sortieralgorithmus):

JAVA - Suchen - Sortieren

Programmieren I. Kapitel 7. Sortieren und Suchen

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

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

Inhaltsverzeichnis. Teil 1 Grundlagen 21. Teil 2 Datenstrukturen 85

Inhaltsverzeichnis. Teil 1 Grundlagen 23

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

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

Robert Sedgewick. Algorithmen in Java. Teil 1-4 Grundlagen Datenstrukturen Sortieren Suchen. Java-Beratung durch Michael Schidlowsky

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

Datenstrukturen & Algorithmen

Pro Informatik 2009: Objektorientierte Programmierung Tag 18. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

Robert Sedgewick. Algorithmen in Java. »il 1-4 Grundlagen Datenstrykturen Sortleren Suchen. java-beratung durch Michael Schidlowsky

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

Bucketsort. Korrektheit. Beispiel. Eingabe: Array A mit n Elementen im Bereich [0,1) Annahme: die Elemente sind in [0,1) gleichverteilt.

Suchen und Sortieren

Informatik II Prüfungsvorbereitungskurs

Übung Algorithmen und Datenstrukturen

NAME, VORNAME: Studiennummer: Matrikel:

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen

Mehrwegbäume Motivation

Priority Queues and Heapsort

Prof. Dr. Margarita Esponda

ContainerDatenstrukturen. Große Übung 4

Vorlesung Datenstrukturen

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

Vorlesung Datenstrukturen

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Programmiertechnik II

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Datenstrukturen und Algorithmen

Binärbäume: Beispiel

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Hallo Welt für Fortgeschrittene

Untere Schranke für allgemeine Sortierverfahren

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Grundlegende Sortieralgorithmen

Programmiertechnik II

Algorithmen und Datenstrukturen 13

Folge 13 - Quicksort

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Algorithmen und Datenstrukturen II

Pro Informatik 2009: Objektorientierte Programmierung Tag 17. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

Abschnitt: Algorithmendesign und Laufzeitanalyse

Algorithmen und Datenstrukturen 1

Informatik II, SS 2014

Suchen und Sortieren (Die klassischen Algorithmen)

Vorlesung Datenstrukturen

Grundlagen der Programmierung

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

4. Sortieren 4.1 Vorbemerkungen

Algorithmen und Datenstrukturen

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

Mathematik AG. Geschickt gesucht ist halb gefunden: Suchen und Sortieren mit Mathe

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min

Übung Datenstrukturen. Sortieren

Datenstrukturen und Algorithmen

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

Grundlagen der Programmierung 2. Sortierverfahren

Übung Algorithmen I

Technische Universität Wien Institut für Computergraphik und Algorithmen Abteilung für Algorithmen und Datenstrukturen

4.4.2 Virtuelles Hashing Erweiterbares Hashing Das Gridfile Implementation von Hashverfahren in Java

Sortierverfahren für Felder (Listen)

Algorithmen und Datenstrukturen

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

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

13 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 9. Sortieren

Übersicht. Rot-schwarz Bäume. Rot-schwarz Bäume. Beispiel. Eigenschaften. Datenstrukturen & Algorithmen. Rot-schwarz Bäume Eigenschaften Einfügen

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch

Sortieralgorithmen. Selection Sort

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen, FS17 Prof Dr Christian Tschudin

Grundlagen der Informatik

Übung Algorithmen I

Übung Algorithmen I

Kapitel 6 Elementare Sortieralgorithmen

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Kapitel 8 Fortgeschrittene Sortieralgorithmen

Informatik I (D-ITET)

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Datenstrukturen und Algorithmen 2. Klausur SS 2001

> Parallele Systeme Übung: 4. Übungsblatt Philipp Kegel Wintersemester 2012/2013. Parallele und Verteilte Systeme, Institut für Informatik

7. Übung zu Algorithmen I 1. Juni 2016

Vorlesung Datenstrukturen

Teil VII. Hashverfahren

Algorithmen und Datenstrukturen 1

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

Transkript:

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!