LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Christian Scheideler SS 2009
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,
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen
Dr. Brigitte Mathiak Kapitel 10 Physische Datenorganisation.
Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
WS Prof. Dr. Th. Ottmann Algorithmentheorie 09 - Suche in Texten KMP, BM.
Zusammenfassung der Vorwoche
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Kapitel 6: Klassifizierung von Sortiertechniken
Suche in Texten (Stringsuche )
3. Kapitel: Komplexität und Komplexitätsklassen
5. Sortier-Algorithmen Vorbemerkungen:
2. Kapitel: Komplexität und Komplexitätsklassen
Übung 6.6Schranken 1.Angenommen, Ihr Algorithmus habe einen Aufwand von g(n) = 5n 3 + n für alle n a)Geben sie eine obere Schranke O(g(n)) an. b)Beweisen.
Einführung in Berechenbarkeit und Formale Sprachen
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
ARRAY oder FELD oder VEKTOR
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
WS 03/04 Algorithmentheorie 03 - Randomisierung Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. 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 (08 - Einfache Sortierverfahren) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Prof. Dr. S. Albers Prof. Dr. Th. Ottmann
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.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Union-Find-Strukturen
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.
PKJ 2005/1 Stefan Dissmann Zusammenfassung der Vorwoche Variable stehen für (einen) Wert, der sich im Programmablauf ändern kann. Variablen besitzen einen.
DVG Ablaufsteuerung
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
Effiziente Algorithmen
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Polynome und schnelle Fourier-Transformation
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 Fakultät.
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz.
PROCAM Score Alter (Jahre)
Algorithmen und Datenstrukturen SS 2005
Komplexität von Algorithmen
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Analyse der Laufzeit von Algorithmen
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Unterschiedliche Kontrollstrukturen
 Präsentation transkript:

LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik 2 Organisatorisches Praktikum Falls Sie einen eigenen Laptop mit einem C-Compiler besitzen, können Sie diesen gerne zum Praktikum mitbringen

LS 2 / Informatik 3 Organisatorisches Lernräume Montag: Uhr (OH14, Raum 340) Dienstag: Uhr (OH14, Raum 340) Mittwoch: Uhr (OH14, Raum 340) Donnerstag: 9-12 Uhr (GB V, Raum 105)

LS 2 / Informatik 4 1. Teil der Vorlesung – Grundlagen der Algorithmenanalyse Inhalt Wie beschreibt man einen Algorithmus? Wie beweist man die Korrektheit eines Algorithmus? Rechenmodell Laufzeitanalyse

LS 2 / Informatik 5 InsertionSort(Array A) Eingabegröße n 1.for j 2 to length[A] do length[A] = n 2. key A[j] 3. i j-1 verschiebe alle Elemente aus 4. while i>0 and A[i]>key do A[1…j-1], die größer als key 5. A[i+1] A[i] sind eine Stelle nach rechts 6. i i-1 7. A[i+1] key Speichere key in Lücke Fragestellung Wie kann man die Laufzeit eines Algorithmus vorhersagen? Laufzeitanalyse

LS 2 / Informatik 6 Laufzeitanalyse Laufzeit hängt ab von Größe der Eingabe (Parameter n) Art der Eingabe (Insertionsort ist schneller auf sortierten Eingaben) Analyse Parametrisiere Laufzeit als Funktion der Eingabegröße Finde obere Schranken (Garantien) an die Laufzeit

LS 2 / Informatik 7 Laufzeitanalyse Worst-Case Analyse Für jedes n definiere Laufzeit T(n) = Maximum über alle Eingaben der Größe n Garantie für jede Eingabe Standard Average-Case Analyse Für jedes n definiere Laufzeit T(n) = Durchschnitt über alle Eingaben der Größe n Hängt von Definition des Durchschnitts ab (wie sind die Eingaben verteilt)

LS 2 / Informatik 8 Laufzeitanalyse Laufzeit hängt auch ab von Hardware (Prozessor, Cache, Pipelining) Software (Betriebssystem, Programmiersprache, Compiler) Aber Analyse soll unabhängig von Hard- und Software gelten

LS 2 / Informatik 9 Laufzeitanalyse Maschinenmodell Eine Pseudocode-Instruktion braucht einen Zeitschritt Wird eine Instruktion r-mal aufgerufen, werden r Zeitschritte benötigt Formales Modell: Random Access Machines (RAM Modell) Idee Ignoriere rechnerabhängige Konstanten Betrachte Wachstum von T(n) für n Asymptotische Analyse

LS 2 / Informatik 10 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] 3. i j-1 4. while i>0 and A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Laufzeitanalyse

LS 2 / Informatik 11 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 4. while i>0 and A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Laufzeitanalyse

LS 2 / Informatik 12 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key Laufzeitanalyse

LS 2 / Informatik 13 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] 6. i i-1 7. A[i+1] key t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j

LS 2 / Informatik 14 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] t 6. i i-1 7. A[i+1] key t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j j

LS 2 / Informatik 15 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] t 6. i i-1 t 7. A[i+1] key t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j j j

LS 2 / Informatik 16 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] t 6. i i-1 t 7. A[i+1] key n-1 t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j j j

LS 2 / Informatik 17 InsertionSort(Array A) Zeit: 1.for j 2 to length[A] do n 2. key A[j] n-1 3. i j-1 n-1 4. while i>0 and A[i]>key do n-1 + t 5. A[i+1] A[i] t 6. i i-1 t 7. A[i+1] key n-1 t : Anzahl Wiederholungen der while-Schleife bei Laufindex j Laufzeitanalyse j j j 5n-4+3 t j j

LS 2 / Informatik 18 Laufzeitanalyse Worst-Case Analyse t =j-1 für absteigend sortierte Eingabe (schlechtester Fall) j

LS 2 / Informatik 19 Laufzeitanalyse Worst-Case Analyse t =j-1 für absteigend sortierte Eingabe (schlechtester Fall) j

LS 2 / Informatik 20 Laufzeitanalyse Worst-Case Analyse t =j-1 für absteigend sortierte Eingabe (schlechtester Fall) Abstraktion von multiplikativen Konstanten O-Notation (gleich) j

LS 2 / Informatik 21 Laufzeitanalyse Beispiel Problem: Nullvektortest Eingabe: Feld A[1,…,n] (n-dimensionaler Vektor) Ausgabe: true, wenn A[i]=0, für alle 1 i n; false, sonst Nullvektortest(Array A) 1. output true 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output

LS 2 / Informatik 22 Laufzeitanalyse Beispiel Problem: Nullvektortest Eingabe: Feld A[1,…,n] (n-dimensionaler Vektor) Ausgabe: true, wenn A[i]=0, für alle 1 i n; false, sonst Nullvektortest(Array A) 1. output true 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Invariante: Nach dem k-ten Schleifendurchlauf gilt: (a)i=k+1 und (b)output=true, gdw. A[j]=0 für alle 1 j k Invariante: Nach dem k-ten Schleifendurchlauf gilt: (a)i=k+1 und (b)output=true, gdw. A[j]=0 für alle 1 j k

LS 2 / Informatik 23 Nullvektortest(Array A) 1. output true 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse

LS 2 / Informatik 24 Nullvektortest(Array A) 1. output true 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse Laufzeit parametrisiert durch Länge der Eingabe n. Hier ist n = length[A].

LS 2 / Informatik 25 Nullvektortest(Array A) Zeit 1. output true 1 2. i 1 3. while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse

LS 2 / Informatik 26 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse

LS 2 / Informatik 27 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Laufzeit Jede Anweisung braucht einen Zeitschritt Laufzeitanalyse Anzahl Durchläufe abhängig von Eingabe.

LS 2 / Informatik 28 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do 4. if A[i] <> 0 then output false 5. i i+1 6. return output Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse Anzahl Durchläufe abhängig von Eingabe t=3

LS 2 / Informatik 29 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false 5. i i+1 6. return output Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse t=3

LS 2 / Informatik 30 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 6. return output Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse t=3

LS 2 / Informatik 31 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse t=3

LS 2 / Informatik 32 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 Definition t=max{i: A[j]=0 für alle 0 j<i; i n} Laufzeitanalyse t=3

LS 2 / Informatik 33 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Laufzeitanalyse

LS 2 / Informatik 34 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n Laufzeitanalyse

LS 2 / Informatik 35 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n T(n) 3n+4, da t maximal n ist Laufzeitanalyse

LS 2 / Informatik 36 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n T(n) 3n+4, da t maximal n ist T(n) 3n+4, da bei Eingabe eines Nullvektors 3n+4 Schritte benötigt werden Laufzeitanalyse

LS 2 / Informatik 37 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n Also: T(n) = 3n+4 Laufzeitanalyse

LS 2 / Informatik 38 Laufzeitanalyse Diskussion Die konstanten Faktoren sind wenig aussagekräftig, da wir bereits bei den einzelnen Befehlen konstante Faktoren ignorieren Je nach Rechnerarchitektur und genutzten Befehlen könnte also z.B. 3n+4 langsamer sein als 5n+7 Betrachte nun Algorithmus A mit Laufzeit 100n und Algorithmus B mit Laufzeit 5n² Ist n klein, so ist Algorithmus B schneller Ist n groß, so wird das Verhältnis Laufzeit B / Laufzeit A beliebig groß Algorithmus B braucht also einen beliebigen Faktor mehr Laufzeit als A (wenn die Eingabe lang genug ist)

LS 2 / Informatik 39 Laufzeitanalyse Idee (asymptotische Laufzeitanalyse) Ignoriere konstante Faktoren Betrachte das Verhältnis von Laufzeiten für n Klassifiziere Laufzeiten durch Angabe von einfachen Vergleichsfunktionen Beispiel Die Laufzeit von Algorithmus Nullvektortest verhält sich für n (bei Ignorieren von Konstanten) wie f(n) = n.

LS 2 / Informatik 40 Laufzeitanalyse O-Notation O(f(n)) = {g(n) : c>0, n >0, so dass für alle nn gilt g(n) c f(n)} (wobei f(n), g(n)>0) Interpretation g(n) O(f(n)) bedeutet, dass g(n) für n höchstens genauso stark wächst wie f(n) Beim Wachstum ignorieren wir Konstanten 0 0

LS 2 / Informatik 41 Laufzeitanalyse Beispiele 10n O(n) 10n O(n²) n² O(1000n) O(1000n) = O(n) Hierarchie O(log n) O(log²n) O(log n) O(n ) O( n) O(n) O(n) O(n²) O(n ) O(2 ) (für c>=2 und 0< 1/2) c c n

LS 2 / Informatik 42 Laufzeitanalyse -Notation (f(n)) = {g(n) : c>0, n >0, so dass für alle nn gilt g(n) c f(n)} (wobei f(n), g(n)>0) Interpretation g(n) (f(n)) bedeutet, dass g(n) für n mindestens so stark wächst wie f(n) Beim Wachstum ignorieren wir Konstanten 00

LS 2 / Informatik 43 Laufzeitanalyse Beispiele 10n (n) 1000n (n²) n² (n) (1000n) = (n) f(n) = g(n) g(n) = O f(n)

LS 2 / Informatik 44 Laufzeitanalyse -Notation g(n) (f(n)) g(n)=O(f(n)) und g(n)= (f(n)) Beispiele 1000n (n) 10n²+1000n (n²) n (n) 1-sin n

LS 2 / Informatik 45 Laufzeitanalyse o-Notation o(f(n)) {g(n): c>0 n >0, so dass für alle nn gilt c g(n)<f(n)} (f(n), g(n) >0) -Notation f(n) (g(n)) g(n) o(f(n)) 0 0

LS 2 / Informatik 46 Laufzeitanalyse Beispiele n o(n²) n o(n) Eine weitere Interpretation Grob gesprochen sind O,,,o, die asymptotischen Versionen von,,=, (in dieser Reihenfolge) Schreibweise Wir schreiben häufig f(n)=O(g(n)) anstelle von f(n) O(g(n))

LS 2 / Informatik 47 Nullvektortest(Array A) Zeit 1. output true 1 2. i while output=true and i n do t+1 4. if A[i] <> 0 then output false t 5. i i+1 t 6. return output 1 3t+4 Worst-Case Laufzeit T(n) = maximale Laufzeit von Nullvektortest bei Eingabe der Länge n Also: T(n) = 3n+4 = (n) Laufzeitanalyse

LS 2 / Informatik 48 Laufzeitanalyse Worst-Case Analyse (Insertion Sort) t =j-1 für absteigend sortierte Eingabe (schlechtester Fall) j

LS 2 / Informatik 49 Zusammenfassung Rechenmodell Abstrahiert von maschinennahen Einflüssen wie Cache, Pipelining, Prozessor, etc. Jede Pseudocodeoperation braucht einen Zeitschritt Laufzeitanalyse Normalerweise Worst-Case, manchmal Average-Case (sehr selten auch Best-Case) Asymptotische Analyse für n Ignorieren von Konstanten O-Notation