Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Thema: Algorithmusdesignverfahren Vu Hoang Lam IMN04 HTWK-Leipzig Obersemminar Softwareentwicklung.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
WS 03/041 Algorithmentheorie 01 - Einleitung Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
3. Kapitel: Komplexität und Komplexitätsklassen
Kapitel 6. Suchverfahren
Algorithmen und Datenstrukturen 1 Sommersemester 2000
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
Dynamische Programmierung (2) Matrixkettenprodukt
Algorithmentheorie 02 – Polynomprodukt und Fast Fourier Transformation
Funktionenklassen zur Messung der Komplexität
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (04 – Entwurfsverfahren) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Halbzeit: Kurze Wiederholung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
Sortieren vorsortierter Daten
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
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
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 9 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Anwendungen von Stapeln und Schlangen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 09 - Weitere Sortierverfahren Heapsort-Nachtrag Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Online Competitive Algorithms
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 13 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
WS 06/07 Algorithmentheorie 01 - Einleitung Prof. Dr. Th. Ottmann Tobias Lauer.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 12 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Geometrisches Divide and Conquer
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung In welcher Masche liegt der Punkt p?
Rekursion Richard Göbel.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 1 SS 2001 Algorithmus von Dijkstra.
Effiziente Algorithmen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung 7 SS 2000 Punkt-in-Polygon-Verfahren I (Trapezkarte)
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung
Einführung in die Programmierung Wintersemester 2009/10 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.
Christian Mansky Design - Fallstudien Christian Mansky
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Stefan Werner (Übungen) sowie viele Tutoren.
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
Algorithmen und Datenstrukturen
 Präsentation transkript:

Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät für Angewandte Wissenschaften Albert-Ludwigs-Universität Freiburg Verschiedene Algorithmen für dasselbe Problem

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann2 Das Maximum-Subarray Problem Das Maximum-Subarray Problem: Gegeben: Folge X von n ganzen Zahlen im Array Gesucht: Maximale Summe einer zusammenhängenden Teilfolge von X und deren Index-Grenzen Beispiel: Hier ist die maximale Teilsumme 187. Frage: Wie findet man die maximale Teilfolge möglichst effizient?

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann3 Naive Lösung des Maximum-Subarray Problems für jede obere Grenze o {1, …, n} für jede untere Grenze u {1, …,n} berechne X[u] + X[u+1] + … + X[o] und bestimme dabei das Maximum aller dieser Werte public static Integer3 maxSubArrayBF (int[] a) { Integer3 result = new Integer3 (); for (int u=0; u < a.length; u++) for (int o=u; o < a.length; o++) { int summe=0; for (int i=u; i <= o; i++) summe += a[i]; if (result.sum < summe) result.set (u, o, summe); } return result; } //maxSubArrayBF

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann4 Die halb-naive Lösung für jede obere Grenze o {1, …, n} für jede untere Grenze u {1, …, o} berechne X[u] + X[u+1] + … + X[o] (Dies kann inkrementell aus dem vorhergehenden Wert bestimmt werden., und bestimme dabei das Maximum aller dieser Werte: Gesamtaufwand: O(n 2 ))

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann5 Die halb-naive Lösung public static Integer3 maxSubArrayBF (int[] a) { Integer3 result = new Integer3 (); for (int u=0; u < a.length; u++) for (int o=u; o < a.length; o++) { int summe=0; for (int i=u; i <= o; i++) summe += a[i]; if (result.sum < summe) result.set (u, o, summe); } return result; } //maxSubArrayBF

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann6 Divide and Conquer Lösung (1)

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann7 Divide and Conquer Lösung (2) Der Divide-and-Conquer Ansatz: 1. Kleine Probleme werden direkt gelöst: falls n = 0: Max = 0 falls n = 1 und X[1] < 0: Max = 0 sonst: Max = X[1] 2. (Divide) Größere Probleme werden aufgeteilt (hier in 2 etwa gleich große Teile): 3. (Conquer) Für die Teile kann dasselbe Problem mit demselben Verfahren rekursiv gelöst werden: Das maximale Subarray steckt (a) ganz in A oder (b) ganz in B oder (c) es besteht aus Randmaxima in A und B 4. (Merge) Die Gesamt-Lösung ergibt sich aus den Teil-Lösungen: Der maximale Wert ergibt sich hier als max aus (a), (b), (c) max(A)max(B)rmax(A)lmax(B) A C B

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann8 Divide and Conquer Lösung (3) public static Integer3 maxSubArrayDC (int[] a, int l, int u) { if (l == u) { // Kleines Problem if (a[u] > 1; // Divide Integer3 A = maxSubArrayDC (a, l, m); // Conquer Integer3 B = maxSubArrayDC (a, m+1, u); Integer3 C = join (rmax (a, l, m), lmax (a, m+1, u)); if (A.sum >= B.sum) // Merge if (A.sum >= C.sum) return A; else return C; else if (C.sum >= B.sum) return C; else return B; }

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann9 Divide and Conquer Lösung (4) // berechnet maximale Summe am rechten Rand public static Integer3 rmax (int[] a, int l, int u) { Integer3 ergebnis = new Integer3 (u+1, u, 0); for (int summe=0, i = u; i >= l; i--) { summe += a [i]; if (summe > ergebnis.sum) ergebnis.set (i, u, summe); } return ergebnis; // verbindet rechtes und linkes Randmaximum aus A und B public static Integer3 join (Integer3 l, Integer3 r) { return new Integer3 (l.lower, r.upper, l.sum + r.sum); }

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann10 Berechnung der Randmaxima // berechnet maximale Summe am rechten Rand public static Integer3 rmax (int[] a, int l, int u) { Integer3 ergebnis = new Integer3 (u+1, u, 0); for (int summe=0, i = u; i >= l; i--) { summe += a [i]; if (summe > ergebnis.sum) ergebnis.set (i, u, summe); } return ergebnis;

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann11 Analyse der Divide and Conquer Lösung Sei T(n) = # Schritte zur Lösung des Maximum-Subarry Problems für ein Array der Länge n. T(1) a T(n) 2 T(n/2) + b n Dieses Rekursionsgleichungssystem hat eine geschlossene Lösung: T(n) a n + b n log 2 n O(n log 2 n)

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann12 Lösen von Rekursionsgleichungen Wie findet man Lösungen für die bei der Analyse rekursiver Programme auftretenden Rekursionsgleichungen? 1.Iterative Substitutionsmethode: Beispiel: T(1) = 1, T(2n) = 2T(n) + 2n hat die Lösung T(n) = n+n log n

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann13 Lösen von Rekursionsgleichungen 2. Lösung raten und per Induktion beweisen: Beispiel: T(1) = 1, T(2n) = 2T(n) + 2n hat die Lösung T(n) = n+n log n

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann14 Lösen von Rekursionsgleichungen 3. Verwenden von Computeralgebra-Programmen: Beispiel (Maple): rsolve ({T(1)=1, T(2*n)=2*T(n)+(2*n)^2*b},T); liefert: n + 2n 2 b –2nb also: T(n) = O(n 2 ).

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann15 Lösen von Rekursionsgleichungen 4. Anwenden des Master-Theorems: Seien a 1 und b > 1 konstant und sei f(n) eine reell-wertige Funktion mit positiven Werten für n d. Sei T(n) definiert durch die Rekursionsformel T(n) = c; falls n < d T(n) = aT(n/b) + f(n) ; sonst Dann gilt:

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann16 Das Maximum-Subarray Problem Scan-Line Ansatz

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann17 Der Scan-Line Ansatz: scanMax = 0; bisMax = 0; für i von 1 bis n: scanMax += X[i] falls (scanMax < 0) scanMax = 0; bisMax = max(scanMax, bisMax); max = bisMax; T(n) a n + b O(n) Die Lösung des Maximum-Subarray Problems erfordert einen Aufwand in Θ(n). (Jedes Element muss mindestens einmal betrachtet werden) Das Maximum-Subarray Problem

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann18 Lernziele Algorithmen für wichtige Probleme : Sortieren, Suchen, Wörterbuch-Problem, Berechnung kürzester Pfade,... Datenstrukturen : Listen, Stapel, Schlangen, Bäume, Hash-Tabellen,... Problemlösetechniken : Divide-and-Conquer, Greedy, vollständige Aufzählung, Backtracking,... Ziele: Finden effizienter Algorithmen für Instanzen von Problemen aus einem gegebenen Bereich Fähigkeit zur Beurteilung von Algorithmen aufgrund präziser Kriterien (Korrektheit, Effizienz)