Komplexität von Algorithmen: Ansatz: Beschreiben/erfassen der Komplexität über eine Funktion, zur Abschätzung des Rechenaufwandes abhängig von der Größe der Eingabe n Uns interessiert: (1) Wie sieht eine solche Aufwandsfunktion für Programm P aus (2) Welches Wachstumsverhalten hat diese Aufwandsfunktion insbesondere für große Eingabewerte n Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 1
Wachstumsverhalten Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 2
Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 3
Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 4
Allgemeine Regeln für die Analyse von Algorithmen Laufzeit für jede einzelne Grundoperation/Anweisung: O(1) uniforme Kostenfunktion (logarithmische Kostenfunktion) Laufzeit für eine Folge sequentiell ausgeführter Anweisungen: Summenformel Laufzeit für eine if Abfrage: Zeit für den if-block + Zeit O(1) für Bedingungsauswertung Laufzeit für einen if then elseblock der grössere Zeitbedarf des then- oder des else-blockes Laufzeit von Schleifen (for, while, ) Summe aller Zeiten innerhalb des Schleifenkörpers + Überprüfen der Schleifenbedingung O(1) multipliziert mit der Anzahl der Schleifendurchläufe Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 5
Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 6
Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 7
Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 8
Ө(g) = {f: es existieren positive Konstanten c1,c2 und n0, so dass 0 c1 g(n) f(n) c2 g(n) für alle n n0 } O(g) = {f: es existieren positive Konstanten c und n 0, so dass 0 f(n) c g(n) für alle n n 0 } Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 9
Wichtigste Rechenregeln der O-Notation 1. f (n) = O( f (n)) 2. c O( f (n)) = O( f (n)), c ist eine Konstante 3. O( f (n) ) + O( f (n)) = O( f (n)) 4. O( f (n)) + O( g (n)) = O( max( f (n), g (n))) 5. O(O( f (n))) = O( f (n)) 6. O( f (n)) O( g(n)) = O( f (n) g(n)) 7. O( f (n) g(n)) = f (n) O( g(n)) Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 10
Beispiel 3 sequentiell ausgeführte Programmteile mit Laufzeiten P1: O(n 2 ) P2: O(n 3 ) P3: O(nlog n) Laufzeit der ersten beiden Programme: P1, P2: O(max (n 2, n 3 )) = O(n 3 ) Gesamtlaufzeit: (P1, P2), P3: O(max (n 3, nlog n)) = O(n 3 ) Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 11
Bemerkungen: Mit der O-Notation wird eine obere Schranke für die Laufzeit angegeben. Das heißt, die O-Funktion beschreibt die Laufzeit im schlechtesten Fall (siehe Beispiel 3 auf Folie 21) Mit Hilfe der O-Notation können wir nun eine Aussage treffen, wie effizient ein Algorithmus ist. O(1): Solche Algorithmen liefern unabhängig von der Problemgröße in konstanter Zeit ein Ergebnis. Das ist z.b. der Fall, wenn die Anweisungen des Algorithmus höchstens 1 mal ausgeführt werden Beispiel: Entfernen des ersten Elementes einer Liste. Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 12
O(log n): Die benötigte Zeit ist proportional zum Logarithmus der Problemgröße, d.h. der Algorithmus wird mit wachsendem n langsamer. Bei jeder Verdopplung von n wächst log n um einen gewissen konstanten Wert. Dies tritt z.b bei Algorithmen auf, die ein komplexes Problem in ein kleineres Problem umwandeln und den Aufwand auf einen konstanten Anteil verringern Beispiel: Suche in einer sortierten Liste. O(n): Der Aufwand für einen Algorithmus ist linear in n, ia. entfällt ein kleiner Anteil der Verarbeitung auf jedes Element der Eingabe. Beispiel Suche in einer unsortierten Liste. Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 13
O(nlog n): z.b. Algorithmen, die das zu lösende Problem in Teilprobleme aufteilen, diese unabhängig lösen und die Teillösungen kombinieren. Beispiel: vergleichsbasiertes Sortieren einer Liste. O(n 2 ): Quadratische Laufzeit: typisch für Algorithmen, die alle paarweisen Kombinationen von Datenelementen verarbeiten. Beispiel: Multiplikation einer Matrix mit einem Vektor O(n 3 ): Beispiel: Multiplikation von Matrizen O(2 n ): Beispiel: Bestimmung aller möglichen Teilmengen Bem.: zur log-funktion: Die Basis bewirkt nur eine Änderung um einen konstanten Faktor, d.h. die Basis ist nicht von Bedeutung Vorlesung Algorithmen und Datenstrukturen, WS09/10, C. Eckert 14