1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.

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,
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
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.
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 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
Prof.Dr.S. Albers Prof. Dr. Th. Ottmann
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
Dynamische Programmierung (2) Matrixkettenprodukt
Algorithmentheorie 02 – Polynomprodukt und Fast Fourier Transformation
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.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Halbzeit: Kurze Wiederholung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
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
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (3) Konstruktion optimaler Suchbäume Prof. Dr. Th. Ottmann.
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 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.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27-Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
WS 06/07 Algorithmentheorie 01 - Einleitung Prof. Dr. Th. Ottmann 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 (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
Geometrisches Divide and Conquer
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Thema: Fibonacci-Zahlen
Rekursion Richard Göbel.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Rekursion mit Listen: Quicksort
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
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.
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
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
2.4 Rekursion Klassifikation und Beispiele
Algorithmen und Datenstrukturen Übungsmodul 8
Korrektheit von Programmen – Testen
WS03/041 Dynamische Programmierung (3) Konstruktion optimaler Suchbäume Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
Java Programme nur ein bisschen objektorientiert.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
 Präsentation transkript:

1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann

2 Das Maximum-Subarray Problem (1) 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: Das ist hier maximal Frage: Wie findet man die maximale Teilfolge möglichst effizient?

3 Das Maximum-Subarray Problem (2) Die naive Methode: 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 für jede obere Grenze für jede untere Grenze berechne und bestimme dabei das Maximum aller dieser Werte

4 für jede obere Grenze n(n + 1)/2 für jede untere Grenze o berechne(dies kann inkrementell 1 aus dem vorhergehenden Wert bestimmt werden) und bestimme dabei das Maximum aller dieser Werte Gesamtaufwand in O(n 2 ) Das Maximum-Subarray Problem (3) Die halb-naive Methode:

5 Divide and Conquer Lösung

6 Das Maximum-Subarray Problem (4) 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), (b) max(A)max(B)rmax(A)lmax(B) A C B

7 Das Maximum-Subarray Problem (5) Der Divide-and-Conquer Ansatz: 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; }

8 Das Maximum-Subarray Problem (6) Der Divide-and-Conquer Ansatz: // 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); }

9 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;

10 Das Maximum-Subarray Problem (7) Der Divide-and-Conquer Ansatz: Die Analyse Dieses Rekursionsgleichungssystem hat eine geschlossene Lösung:

11 Das Maximum-Subarray Problem (8) Scan-Line Ansatz

12 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; Die Lösung des Maximum-Subarray Problems erfordert einen Aufwand in (Jedes Element muss mindestens einmal betrachtet werden) Das Maximum-Subarray Problem (8)

13 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

14 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

15 Lösen von Rekursionsgleichungen 3. Mit Hilfe des Rekursionsbaumes: Beispiel: T(n) = b ; falls n < 3 T(n) = 3T(n/3) + bn ; sonst

16 Lösen von Rekursionsgleichungen 4. 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 ).

17 Lösen von Rekursionsgleichungen 5. 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: