Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
WS 03/041 Algorithmentheorie 01 - Einleitung Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
Kapitel 6: Klassifizierung von Sortiertechniken
3. Kapitel: Komplexität und Komplexitätsklassen
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
5. Sortier-Algorithmen Vorbemerkungen:
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Diskrete Mathematik I Vorlesung 9b AVL-Baum, Algorithmen.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung In welcher Masche liegt der Punkt p?
Vortrag: Ingo Gensch, Mathias Reich am:
Bubbelsort und Quicksort Vortrag von Rolf Heitzenröder
Ideen der Informatik Suchen und Sortieren [Ordnung muss sein…]
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 4 Dr. W. Narzt u. Dr. A. Stritzinger.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
4 Sortierverfahren 4.1 Einführung 4.2 Naive Sortierverfahren
Sortieralgorithmen Sortieren von Arrays.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung 7 SS 2000 Punkt-in-Polygon-Verfahren I (Trapezkarte)
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Algorithmen und Datenstrukturen Übungsmodul 10
Algorithmen und Datenstrukturen SS 2005
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen 1 SS 2007 Dr. W. Narzt u. Dr. A. Stritzinger Institut.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 5 Dr. W. Narzt u. Dr. A. Stritzinger.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Algorithmen und Datenstrukturen Übungsmodul 8
Algorithmen und Datenstrukturen Übungsmodul 11
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Algorithmen und Datenstrukturen SS 2005
Algorithmen und Datenstrukturen Übungsmodul 1
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 2 Dr. W. Narzt u. Dr. A. Stritzinger.
Algorithmen und Datenstrukturen Übungsmodul 3
Kapitel 6: Suchbäume und weitere Sortierverfahren
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation III Vorlesung 1 WS 2001/02 Punkt-in-Landkarte I (Streifenkarte)
Algorithmen und Datenstrukturen 1 SS 2002
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Algorithmen und Datenstrukturen 1 SS 2002
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Algorithmen und Datenstrukturen 1 SS 2002
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Rekursion-
Sortiernetzwerke1 Seminar über Algorithmen SS 2005 von Arash Sarkohi und Christian Bunse.
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen 1 SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Algorithmen und Datenstrukturen
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
InsertionSort Einfügen eines Elements an der richtigen Stelle eines bereits sortierten Arrays. Verschiebungen von Elementen statt Vertauschungen Element.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
 Präsentation transkript:

Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 2 Inhalt Lösung Übung 8 Quicksort-Verfahren Vorbesprechung Übung 10

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 3 Partitionierung - Konzept Bedeutet die Aufteilung eines Feldes in einen unteren Teil (z.B. alle Elemente kleiner 436) und einen oberen Teil (alle Elemente größer gleich 436); die Teile können natürlich verschieden groß sein; Partitionierung wird auch als eigenständige Lösung manchmal eingesetzt. z.B.: Mitarbeiter mit EK>x oder EK<=x Partitionierung führt zu keiner Sortierung, auch wenn nachher die Elemente gewissermaßen weniger unsortiert sind als vorher. Der Wert, der die Trennlinie zw. unten und oben darstellt heißt Pivot-Wert.

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 4 Partitionierung - Lösungsidee Zwei Indices leftIndex und rightIndex laufen aufeinander zu; wenn unten ein großes und oben ein kleines Element gefunden wurde werden die beiden getauscht; solange bis leftIndex und rightIndex aneinander vorbei laufen. Aus Gründen, die erst später klar werden, wird nicht immer das gesamte Feld partitioniert, sondern der Teil zwischen leftBound und rightBound. Als Rückgabewert soll der Algorithmus den Index des Pivot-Elements liefern. Analyse: Lineare asymptotische Laufzeitkomplexität O(n)

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 5 Partitionierung: Verfahren int partitionIt( double[0:n-1] array, int leftBound, int rightBound, double pivot) { int leftIndex = leftBound int rightIndex = rightBound while (true) { while (leftIndex < rightBound && array[leftIndex] < pivot) { leftIndex++} while (rightIndex > leftBound && array[rightIndex] > pivot) { rightIndex-- } if (leftIndex >= rightIndex) {// finsh return leftIndex } else {// swap double temp = array[leftIndex] array[leftIndex] = array[rightIndex] array[rightIndex] = temp leftIndex++ rightIndex-- }

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 6 Quicksort - Idee Quicksort ist das schnellste bekannte und vermutlich auch das theoretisch schnellst mögliche Sortierverfahren. Erfunden von C.A.R. Hoare Die Grundidee des Quicksorts besteht darin, das zu sortierende Feld in zwei kleinere zu teilen, diese lassen sich effizienter sortieren. Aufteilen (Partitioning oder Partitionierung) läßt sich in linearer Zeit bewältigen O(n) und fällt daher wenig ins Gewicht. Zusammenmischen ist überflüssig, da die sortierten Teile ein sortiertes Gesamtfeld bilden. Ein nicht zu vernachlässigendes Problem, stellt das Finden eines gut geeigneten Pivot-Wertes dar. Er soll nach Möglichkeit die Menge der Werte etwa in der Hälfte teilen (Median). Es ist sind aber weder die Maximal- und Minimalwerte noch die Verteilung bekannt. Je unterschiedlicher die Größe der Teile ist, desto schlechter wird die Performance des Quicksorts. Daher wird häufig eine Näherung durch Ermittlung des Medians des ersten, letzten und mittleren Elements gewählt. Weitere Steigerung der Performance ist durch Sortierung dieser drei Elemente möglich, da beim Partitionieren einige Bedingungen nicht mehr geprüft werden müssen. Quicksort funktioniert nicht für sehr kleine Felder, daher wird unterhalb einer festen Schranke (ca. 10 Elemente) auf ein einfaches Einfüge-Sortierverfahren umgestellt.

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 7 double medianOf3( double[0:n-1] array, int leftBound, int rightBound) { int center = (leftBound + rightBound) / 2 if (array[leftBound] > array[center]) { swap( array, leftBound, center) } if (array[leftBound] > array[rightBound]) { swap( array, leftBound, rightBound) } if (array[center] > array[rightBound]) { swap( array, center, rightBound) } swap( array, center, rightBound-1) //put pivot on right return array[rightBound-1] } swap( double[0:n-1] array, int first, int second) { double temp = array[first] array[first] = array[second] array[second] = temp } Quicksort - Hilfsalgorithmen

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 8 int partitionIt( double[0:n-1] array, int leftBound, int rightBound, double pivot) { // pivot value stored at array[rightBound-1] int leftIndex = leftBound + 1 int rightIndex = rightBound - 2 while (true) { while (array[leftIndex] > pivot) {leftIndex++} while (array[rightIndex] < pivot) {rightIndex--} if (leftIndex >= rightIndex) {// finsh break } else {// swap swap( array, leftIndex, rightIndex) leftIndex++ rightIndex-- } swap( array, leftIndex, rightBound-1)// restore pivot value return leftIndex } Quicksort - Partitionierung

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 9 recQuickSort( double[0:n-1] array, int leftBound, int rightBound) { int size = rightBound – leftBound + 1 if (size < 10) { insertionSort( array, leftBound, rightBound) } else { double median = medianOf3( array, leftBound, rightBound) int pivotIndex = partitionIt( array, leftBound, rightBound, median) recQuickSort( array, leftBound, pivotIndex-1) recQuickSort( array, pivotIndex+1, rightBound) } Quicksort - Verfahren

Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 10 Asymtotische Laufzeitkomplexität O(n * log n) Vergleich SortierverfahrenO() –Wert100 Elemente Elemente Einfüge-Sortierenn Shellsortn * (log n) Quicksortn * log n Wenn Quicksort beispielsweise für Elemente 40 Sekunden benötigt, braucht Einfüge-Sortieren dafür etwa 28 Stunden! Quicksort - Analyse