Grundlagen der Informatik 2 (GdI2) - Algorithmen und Datenstrukturen - 2) Algorithmenanalyse Prof. Dr. Anja Schanzenberger FH Augsburg, Fakultät für Informatik Kontakt: anja.schanzenberger@hs-augsburg.de http://www.hs-augsburg.de/schanzenberger Sommer Semester 2008 (Stand: 16.03.2008) Studiengang Bachelor Informatik (Ibac2), Hochschule Augsburg, 2008 Die vorliegenden Unterlagen zur Vorlesung GdI Teil 2 dürfen nur verwendet werden für Studienzwecke durch Studierende der FH Augsburg.
Gliederung 1. Komplexitätsbegriff 2. Analyse von Algorithmen am Beispiel 1.1 Sequentielle Suche (unsortiertes Array) 1.2 Sequentielle Suche (sortiertes Array) 1.3 Binäre Suche (sortiertes Array) 3. O-Notation 4. Allgemeine O-Notation 5. Klassen N und NP 2
Lernziel Was sind die wichtigsten Einflussfaktoren für die Komplexität eines Algorithmus? Wie analysiert man einen Algorithmus? Wie kann man die Komplexität, Effizienz und die Laufzeit von Algorithmen abschätzen? Was bedeuten die Klassen P und NP und was ist ein NPvollständiges Problem? 3
1. Komplexitätsbegriff (1) Komplexität ist ein wichtiges Merkmal von Algorithmen Ausführungszeit Speicherplatzverbrauch Ziele von Algorithmen: Effizienz, d.h. geringer Zeit- und Speicherplatzverbrauch Im Folgenden wird hauptsächlich die Zeitkomplexität betrachtet Speicherplatzverbrauch wird später im Zusammenhang mit Datenstrukturen diskutiert 4
1. Komplexitätsbegriff (2) Einflussfaktoren für die Komplexität sind Problemgröße: Struktur, Größe und Anzahl der Eingabedaten Beispiel: Array mit n Elementen Problemgröße n Art und Zusammensetzung der Ablaufstrukturen des Algorithmus Beispiel n-durchläufe: k++ wird n-mal ausgeführt Maschineneigenschaften die zur Ausführung verwendet wird (z. B. Schnelligkeit, Befehlssatz ) Wird in der Algorithmenanalyse meist nicht betrachtet Stattdessen werden die elementaren Rechenschritte gezählt 5
1. Komplexitätsbegriff (3) Der Zeitbedarf T eines konkreten Algorithmus A zur Lösung eines Problems P in Abhängigkeit von der Problemgröße n = Die Anzahl der Elementaroperationen (ELOPs) von A um eine Problemgröße n zu lösen Gegeben sei Algorithmus A mit Eingabe e für Problemgröße n Menge aller möglichen Eingaben zu n: E n Maße für die Zeitkomplexität: T min (A; n) ::= min{ t(a; n, e) e E n } günstigster Fall T avg (A; n) ::= avg{ t(a; n, e) e E n } mittlerer Fall T max (A; n) ::= max{ t(a; n, e) e E n } ungünstigster Fall 6
1. Komplexitätsbegriff (4) 1. Abstraktionsschritt: Beispiel Typ der ELOPs wird nicht weiter unterschieden Nur Beobachtung dominanter Operationen Programm Schrittzahl T(n) ELOP Typ Z: Zuweisung A: Arrayzugriff V: Vergleich 7
1. Komplexitätsbegriff (5) 2. Abstraktionsschritt: Die Menge aller Eingaben E n wird aufgeteilt in Komplexitätsklassen Untersuchung reduzieren von jeder möglichen Eingabe auf die Komplexitätsklassen Beispiel: T(n) = f(n) = 2n+3 3. Abstraktionsschritt: Innerhalb einer Komplexitätsklasse wird unterschieden zwischen Spezialfällen (T min, T max ) und des Durchschnittsverhaltens (T avg ) 8
1. Komplexitätsbegriff (6) 4. Abstraktionsschritt: Weglassen von multiplikativen und additiven Konstanten Nur das Wachstum einer Laufzeitfunktion T(n) soll noch betrachtet werden O-Notation (Genaue Definition folgt in Unterpunkt 5) Beispiel: T(n) = 2n+3 O (n) 9
2. Analyse von Algorithmen am Beispiel (1) 2.1 Sequentielle Suche (unsortiertes Array) Typische Aufgabenstellung: Gegeben ist ein Array mit n Elementen. Suche Element X. Problem: Suchen in einem unsortierten Array Lösung: Sequentielles Suchen a value 12 33 4 7 23 Überprüft wird ob value im übergebenen Array a[links], a[links+1],.,a[rechts] vorhanden ist. Value wird nacheinander mit jedem Arrayelement verglichen. 45 10
2. Analyse von Algorithmen am Beispiel (2) Aufwand 1.Fall: Erfolglose Suche T min = T max = T avg = 2.Fall: Erfolgreiche Suche 1. T min = 2. T max = 3. T avg = Beweis: Laufzeitverbesserung möglich? Ja, z.b. durch Sortierung des Arrays a 12 4 7 23 45 a 12 4 7 23 45 value 33 value 7 11
2. Analyse von Algorithmen am Beispiel (3) 2.2 Sequentielle Suche (sortiertes Array) Problem: Suchen in einem sortierten Array Lösung: Sequentielles Suchen entspricht linearem System Algorithmus wie bei 2.1 a 4 7 12 23 45 value 33 12
2. Analyse von Algorithmen am Beispiel (4) Aufwand 1.Fall: Erfolglose Suche 1. T min = 2. T max = 3. T avg = 2.Fall: Erfolgreiche Suche 1. T min = 2. T max = 3. T avg = a 4 7 12 23 45 a 4 7 12 23 45 value 33 value 12 13
2. Analyse von Algorithmen am Beispiel (5) Fazit Verfahren 2.2 kann bei erfolgloser Suche weniger Aufwand haben als 2.1 Bei erfolgreicher Suche haben beide Verfahren gleichen Aufwand Beide Verfahren sind bei Echtzeitproblemen in der Regel zu langsam Laufzeitverbesserung möglich? 14
2. Analyse von Algorithmen am Beispiel (6) 2.3 Binäre Suche (sortiertes Array) Problem: Suchen in einem sortierten Array Lösung: Wenn das Array sortiert ist, kann die Hälfte der Elemente von der weiteren Betrachtung ausgeschlossen werden, indem das gesuchte Element mit dem Element verglichen wird, dass sich in der Mitte des Arrays befindet. 15
2. Analyse von Algorithmen am Beispiel (7) Beispiel (n=9) a 4 7 12 23 4 7 12 23 23 45 45 45 48 64 65 86 Gesucht: value 23 1.Schritt: vergleiche value und 45 2.Schritt: vergleiche value und 12 3.Schritt: vergleiche value und 23 1.Schritt, 2.Schritt, 3.Schritt 16
2. Analyse von Algorithmen am Beispiel (8) Algorithmus zur binären Suche 17
2. Analyse von Algorithmen am Beispiel (9) Aufwand 1.Fall: Erfolglose Suche T min =T max =T avg = b* log 2 (n) + a 2.Fall: Erfolgreiche Suche 1.T min : 1 Vergleich 2.T max = T avg = b* log 2 (n)+ a Beweis für Tmax: 18
2. Analyse von Algorithmen am Beispiel (10) Empirische Analyse von sequentieller und binärer Suche [Sedgewick, S.76] 19
3. O-Notation (1) Je größer bzw. komplexer ein Algorithmus, desto aufwendiger ist die Bestimmung der Anzahl von ELOPs für jede mögliche Komplexitätsklasse Vorteil der O-Notation: einfacheres Vorgehen! Nur das Wachstum der Laufzeitfunktion T(n) wird bestimmt Betrachtung der Zeitkomplexität als Größenordnung Multiplikative und additive Konstanten werden weggelassen Name: "Groß- O- Notation Historisch Paul Bachmann 1894 (in "Analytische Zahlentheorie ) Edmund Landau (1877-1938) machte davon Gebrauch (O-Notation wird auch Landau'sche Symbolik bezeichnet) 20
3. O-Notation (2) Definition 21
3. O-Notation (3) Achtung Gleichung f=o(g) kann nur von links nach rechts gelesen werden. Die Umkehrung O(g)=f gilt nicht! Beispiele 22
3. O-Notation (4) Schreibt man: g(n)=o(f(n)), so bedeutet dies, dass g(n) - also die eigentliche Laufzeit des Algorithmus'- ab einer gewissen Anzahl von Eingabewerten (n>n 0 ) stets kleiner als c*f(n) ist O(f(n)) gibt die obere Schranke der Laufzeit angibt 23
3. O-Notation (5) Überprüfung von Aussagen Annahme: f,g stetig monoton wachsend und von 0 verschieden Die Definition besagt, dass dann für alle n ab irgendeinem n 0 gilt: f(n)/g(n) <=c =>Vergleichen durch Grenzwertbildung Ergebnisauswertung 24
3. O-Notation (6) Beispiele Ist 30n 2 +100n+1000 in O(n 2 )? Ist n*ln n in O(n 2 )? 25
3. O-Notation (7) Eigenschaften der O-Notation Sie eliminiert Konstanten und wirkt daher vergröbernd Sie bildet obere Schranken Sie erleichtert die worst-case-analyse durch Einschränkung der oberen Laufzeit 26
3. O-Notation (8) Wichtige Rechenregeln Abstraktion von Konstanten da O(f(n))+O(f(n))=c 1 *f(n)+c 2 *f(n)=(c 1 +c 2)* f(n)= c*f(n)= O(f(n)) wobei max{...} das Maximum der übergebenen Parameter zurückgibt. Beweis: O(f(n))+O(g(n)) = c 1 *f(n)+c 2 *g(n) <= 2*max{c 1,c 2 }*(f(n)+g(n)) = c*(f(n)+g(n)) <= c*2*max{f(n),g(n)} = O(max{f(n),g(n)}) 27
3. O-Notation (9) Laufzeitermittlung eines Programms: 1. einfache Anweisung: Wertzuweisungen, Deklarationen, Definitionen, einfache Arithmetik (+,-,*,/), Vergleiche (==,!=,<,>,<=,>=), Sprunganweisungen, Eingabe/Ausgabe, etc. 2. Sequenz: alg 1 ; alg 2 ; alg 3 3. Schleife: 4. If (alg1)-else (alg2) -Anweisung: Falls alg 1 =O(f(n)) und alg 2 =O(g(n)) 5. Rekursion: Rekursionsgleichung lösen 28
3. O-Notation (10) Wichtige Komplexitätsklassen Klasse Typ Auswirkung Anwendung Laufzeit wächst wesentlich schwächer als n. Suchen auf einer Menge Laufzeit wächst proportional zu n Bearbeiten jedes Elementes einer Menge Laufzeit wächst etwas stärker als n Gute Sortierverfahren Laufzeit wächst wesentlich stärker als n Primitive Sortierverfahren Verdoppelung von n bedeutet Verk-fachung der Laufzeit Verdopplung von n bedeutet Quadrierung der Laufzeit Backtracking 29
3. O-Notation (11) Kurvendiskussion 30
3. O-Notation (12) Diskussion der vorgestellten drei Suchverfahren 2.1 Sequentielle Suche (unsortiert) 2.2 Sequentielle Suche (sortiert) 2.3 Binäre Suche (sortiert) 31
4. Allgemeine O-Notation (1) Definitionen f wächst mindestens so schnell wie g, falls g=o(f) f und g wachsen größenordnungsmäßig gleich schnell, falls g=o(f) und g=o(f) f wächst langsamer als g, wenn die Folge (f(n)/g(n)) eine Nullfolge ist f wächst schneller als g, falls g=o(f) 32
4. Allgemeine O-Notation (2) Zusammenfassung f=o(g) f=ω(g) f=θ(g) f=o(g) f=ω(g) Schreibweise f=o(g) anstatt f O (g) Die Beziehungen erlauben den Vergleich von Polynomen, logarithmischen und Exponentialfunktionen 33
5. Klassen P und NP (1) Ein Algorithmus heißt polynomiell, falls seine Laufzeitfunktion ein Polynom ist Definition: Die Klasse P Eine Sprache L heißt polynomiell, falls es eine deterministische Turing- Maschine M mit L=l(M) gibt, sodass gilt T avg = O(n k ) für k>=0 Die Klasse der polynomiellen Sprachen (Probleme) wird mit P bezeichnet Klasse P fasst die Komplexitätsklassen O(n), O(n 2 ), O(n 3 ), zusammen Probleme der Klasse P werden auch effizient lösbar genannt 34
5. Klassen P und NP (2) In der Praxis? Polynomielle Algorithmen mit O(n 2 ) und O(n 3 ) sind in der Praxis evtl. gerade noch anwendbar Exponentielle Algorithmen sind nur für sehr kleine Problemgrößen (z.b. n<20) geeignet, jedoch für größere Probleme ungeeignet 35
5. Klassen P und NP (3) Definition: Die Klasse NP Eine Sprache L heißt nichtdeterministisch polynomiell, falls es eine nichtdeterministische Turing-Maschine M mit L=l(M) gibt, sodass gilt T avg = O(n k ) für k>=0 Die Klasse der nichtdeterministischen polynomiellen Sprachen (Probleme) wird mit NP bezeichnet. P NP Beispiel aus der Praxis: Algorithmen zur optimalen Zuteilung von Betriebmitteln in Betriebssystemen 36
5. Klassen P und NP (4) Definition: NP-vollständig Eine Sprache L ist NP-vollständig, wenn sie einerseits selbst in NP liegt und wenn sich ihre Komplexität von der Komplexität jeder anderen Sprache in NP um nicht mehr als ein Polynom unterscheidet Praxisbezug Der Begriff NP-Vollständig charakterisiert diejenigen Probleme, die sich als die schwierigsten Probleme in der Klasse NP herausstellen Berühmte Beispiele Travelling-Salesman Problem (<- nächste Folie), Hamiltonsches Problem, Rucksackproblem, Färbungsproblem, Erfüllbarkeitsproblem, Cliquenproblem 37
5. Klassen P und NP (5) Beispiel: Travelling-Salesman Problem (TSP) Ein Handlungsreisender soll n Städte nacheinander, aber jede nur einmal besuchen. Am Ende der Reise soll er wieder in seine Ausgangsstadt zurückkehren. Sei p eine vorgegebene Schranke. Gibt es einen Rundweg, dessen Gesamtentfernung kleiner oder gleich p ist? 38
5. Klassen P und NP (6) Eingabe Städte: s 1, s 2,,s n Entfernungstabelle mit d ij = Entfernung der Stadt s i von der Stadt s j Schranke p Annahmen: In s 1 wird die Reise begonnen Fragestellung: Gibt es eine Anordnung s i1,s i2, s in von s 1,,s n mit i 1 =1, für welche die Summe der Entfernungen kleiner oder gleich der vorgegebenen Schranke p ist, d.h.: n 1 k = 1 d i k j k+ 1 + d i n j 1 p 39
Klassen P und NP (7) Lösung durch Ausprobieren? Am Beispiel mit p = 250 Lösung: Rundweg = 247 40
5. Klassen P und NP (8) Lösung des TSP Problems? außerordentlich schwierig In diesem Fall: erschöpfendes Durchsuchen TSP ist ein NP-vollständiges Problem O(2 n ) nach heutigem Wissensstand ist keine Methode bekannt, TSP algorithmisch tatsächlich in vernünftiger Zeit zu lösen Es gibt aber Algorithmen, die versuchen, eine möglichst gute Lösung zu raten beantwortet i. d. R. nicht die ursprüngliche Fragestellung nach bester Lösung in der Praxis ist jedoch eine gute Lösung immer noch besser als keine 41
5. Klassen P und NP (8) Näherungsverfahren für TSP mit O(n 2 *log 2 n) [Pseudocode aus Duden, S. 504] 42