Effizienz von Algorithmen

Ähnliche Dokumente
2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

6 Quicksort. die mittlere Laufzeit Θ(n log n) beträgt und. die in der asymptotischen Notation verborgenen Konstanten sehr klein sind.

2. Effizienz von Algorithmen

Algorithmen und Datenstrukturen (für ET/IT)

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Prof. Dr. Margarita Esponda

Übung Algorithmen und Datenstrukturen

Programmieren und Problemlösen

Kap. 3: Sortieren. Überblick. Unser Sortierproblem. Motivation. Laufzeitmessung. Warum soll ich hier bleiben? Sortierverfahren sind WICHTIG!!!

Datenstrukturen und Algorithmen

3.2. Korrektheit und Komplexität am Beispiel: Sortieren Sortieren ist eine wichtige Basis-Operation für komplexe Algorithmen

Kapitel 3 Zur Korrektheit und Effizienz von Algorithmen

Kapitel 6 Elementare Sortieralgorithmen

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

3.2. Divide-and-Conquer-Methoden

Algorithmen und Datenstrukturen

Prof. Dr. Margarita Esponda

Grundlagen: Algorithmen und Datenstrukturen

Kapitel 5: Paradigmen des Algorithmenentwurfs. Gliederung

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :

Übung Algorithmen I

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 9, Donnerstag 18.

Rekursionsbäume Aufstellen eines Baumes dessen Knoten die Laufzeit auf jeder Rekursionsstufe darstellen und Aufsummieren

Algorithmen und Datenstrukturen 1. 1 Einleitung

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Komplexität von Algorithmen:

Algorithmen und Datenstrukturen I Grundlagen

Informatik I 1. Kapitel. Einführung in Algorithmen und Datenstrukturen. Einführung in Algorithmen. Einführung in Algorithmen.

Algorithmen und Datenstrukturen I. Grundlagen. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Suchen und Sortieren

Algorithmen und Datenstrukturen (für ET/IT)

Übungsblatt 4. Aufgabe 1. IN8009 Algorithmen und Datenstrukturen Thomas Stibor

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III

Mergesort. Inhaltsverzeichnis. Veranschaulichung der Funktionsweise. aus Wikipedia, der freien Enzyklopädie

Komplexität von Algorithmen

Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren

Interne Sortierverfahren

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren

Informatik I Komplexität von Algorithmen

Elementare Sortierverfahren

WS 2009/10. Diskrete Strukturen

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Rekursion

Kapitel 3: Sortierverfahren Gliederung

Datenstrukturen und Algorithmen

Sortieralgorithmen. Jan Pöschko. 18. Januar Problemstellung Definition Warum Sortieren?... 2

Datenstrukturen & Algorithmen

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Algorithmen und Datenstrukturen

Präsenzübung Datenstrukturen und Algorithmen SS 2014

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)

Algorithmen und Datenstrukturen

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Abschnitt 19: Sortierverfahren

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

Asymptotik und Laufzeitanalyse

Übersicht. Datenstrukturen und Algorithmen. Die Teile-und-Beherrsche-Methode. Übersicht. Vorlesung 3: Rekursionsgleichungen (K4)

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abschnitt 7: Komplexität von imperativen Programmen

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Vorlesung Datenstrukturen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Datenstrukturen & Algorithmen

Komplexität. G. Zachmann Clausthal University, Germany Leistungsverhalten von Algorithmen

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 9. Sortieren

Kostenmodell. Daniel Graf, Tobias Pröger. 22. September 2016 (aktualisierte Fassung 5 vom 9. Oktober 2016)

Übung Algorithmen und Datenstrukturen

JAVA - Suchen - Sortieren

Übersicht. Einfache Verfahren MergeSort Untere Schranke QuickSort Selektieren Schnelleres Sortieren Externes Sortieren. 6 Sortieren.

Übung Algorithmen und Datenstrukturen

Informatik II, SS 2014

Suchen und Sortieren Sortieren. Mergesort

Transkript:

Effizienz von Algorithmen Eine Einführung Michael Klauser LMU 30. Oktober 2012 Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 1 / 39

Ein einführendes Beispiel Wie würdet ihr einen Stapel Karten Sortieren? Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 2 / 39

Ein einführendes Beispiel Wie würdet ihr einen Stapel Karten Sortieren? Sortieren-durch-Einfügen Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 3 / 39

Die Idee Eingabe: Eine Folge von n Zahlen a 1, a 2,, a n. Ausgabe: Eine Permutation a 1, a 2,, a n der Eingabefolge, sodass a 1 a 2 a n Prinzip 1 Finde den minimalen Wert in der Liste. 2 Vertausche ihn mit dem Wert an der ersten Position. 3 Wiederhole schritt zwei für den rest der Liste. ( Beginnend mit der Letzten Startposition +1) Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 4 / 39

Ein paar Code Beispiele Haskell ssort :: (Ord a) => [a] -> [a] ssort [ = [ ssort xs = m : ssort (delete m xs) where m = minimum xs]] -- delete löscht das erste Auftreten -- eines Elements in einer Liste Python def selectionsort(seq): for i in range(len(seq) - 1): k = i for j in range(i, len(seq)): if seq[j] < seq[k]: k = j seq[i], seq[k] = seq[k], seq[i] C void selectionsort( int anzahl, int daten[]) { int i, k, t, min; for( i = 0; i < anzahl-1; i++) { min = i; for( k = i+1; k < anzahl; k++) { if( daten[k] < daten[min]) min = k; } t = daten[min]; // Tauschen daten[min] = daten[i]; daten[i] = t; } } Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 5 / 39

Pseudocode Data: Feld A[] for j=2 to len(a) do key = A[j]; i = j + 1; while i > 0 && A[i]>key do A[i+1] = A[i]; i = i -1 end end Algorithm 1: Sortieren durch Einfügen als Pseudocode. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 6 / 39

Definition des Systems Für eine präzise mathematische Effizienzanalyse benötigen wir ein Rechenmodell, das definiert: Welche Datentypen existieren. Wie Daten abgelegt werden. Welche Operationen zulässig sind. Welche Zeit eine bestimmte Operation für einen definierten Datentyp benötigt. Random Access Maschine Formal ist ein Rechenmodell gegeben durch die Random Access Maschine, kurz RAM. Ein RAM ist ein idealer 1-Prozessrechner mit einfachem aber unbegrenzt großem Speicher. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 7 / 39

Basisoperationen und ihre Kosten Definition Als Basisoperationen bezeichnen wir: Kontrolloperationen: Wertübergaben, Verzweigungen, Programmaufrufe Datenverwaltungsoperationen: Laden, Ablegen, Kopieren Arithmetische Operationen: Multiplikation, Addition, Division, +1, -1, Modulo Bitweise Operationen: shift, or, and,not Vereinfachung Wir nehmen an, dass jede Operation bei allen Operanden gleich viel Zeit benötigt bzw. Kostet. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 8 / 39

Effizienz Ein wichtiges Merkmal eines Algorithmus ist seine Effizienz, insbesondere wenn man für ein geg. Problem mehrere Algorithmen zur Auswahl hat. Effizienz ist kein einfaches Kriterium, sonder besteht aus: Speicher-Effizienz: Wie viel Speicher braucht der Algorithmus. Subjective-Effizienz: Wie einfach ist Algorithmus zu erfassen. Laufzeit-Effizienz: Wie schnell ist der Algorithmus. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 9 / 39

Speicher-Effizienz Beschreibt den Speicherbedarf eines Algorithmus. Kann analog zur Laufzeit-Effizienz behandelt werden Speicher bedarf pro Variable wird erhobenen. (Abhängig von der Implementierung) Garbage Collection spielt eine entscheidende Rolle. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 10 / 39

Subjective-Effizienz Wie einfach ist der Algorithmus geistig zu erfassen. Wie natürlich löst er das Problem. Die fehlerfreie Implementierung hängt vom Verständnis des Algorithmus abhängt, ebenso wie der Zeitaufwand für die Implementierung. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 11 / 39

Naiver Grundansatz Implementierung des Algorithmus auf dem System von Interesse. Nicht Objective: Da sowohl die Codierung des Algorithmus als auch das zugrunde liegende System (Compiler, Sprache, Hardware) die Laufzeit enorm beeinflussen können. Hoher Arbeitsaufwand: Mehrfach Implementation notwendig. Wir suchen Eine Möglichkeit, eine Aussage über das Laufzeitverhalten von Algorithmen, ohne deren Implementierung zu machen. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 12 / 39

Ein neuer Ansatz Wir zählen für einen gegebenen Satz von Eingaben alle Anweisungen j mit einer Zeit t j, wobei t j von der Art von j abhängt. Für das Ausführen einer Zeile Pseudocode ist ein konstanter Zeitaufwand notwendig. Verschieden Zeilen können einen unterschiedlichen Zeitaufwand aufweisen. Jede Zeile i benötigt einen konstanten Zeitaufwand den wir Kosten c j nennen. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 13 / 39

Laufzeit von Sortieren durch Einfügen Data: Feld A[] 1 for j=2 to len(a) do /*c 1 n */ 2 key = A[j]; /* c 2 n 1 */ 3 i = j + 1; /* c 3 n 1 */ 4 while i > 0 && A[i]>key do /*c n 4 i=2 t j */ 5 A[i+1] = A[i]; /* c n 5 i=2 (t j 1) */ 6 i = i -1; /* c n 6 i=2 (t j 1) */ 7 end 8 A[i+1] =key ; /* c 7 n 1 */ 9 end Algorithm 2: Effizienz von Sortieren-durch-Einfügen. t j ist die Anzahl der Schleifendurchläufe für ein gegebenes j. Die Laufzeit eines Algorithmus ist die Summe aller Laufzeiten. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 14 / 39

Laufzeit von Sortieren durch Einfügen Laufzeit T (n) T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 n i=2 n n + c 5 (t j 1) + c 6 (t j 1) + c 7 (n 1) (1) i=2 i=2 t j Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 15 / 39

Der best mögliche Fall Im best möglichen Fall ist A[] sortiert. Für jedes j = 2, 3, 4,, n gilt in Zeile vier immer A[i] < key t j = 1 für alle j. T (n) = c 1 n + c 2 (n 1) + c 3 (n 1) + c 4 (n 1) + c 7 (n 1) = (c 1 + c 2 + c 3 + c 4 + c 7 )n (c 2 + c 3 + c 4 + c 7 ) (2) Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 16 / 39

Der schlechtest mögliche Fall Im schlechtest möglichen Fall ist A[] absteigend sortiert. Jedes Element von A[] muss mit jedem bereits sortierten Element verglichen werden. t j = j j n Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 17 / 39

Laufzeit im schlechtest möglichen Fall Mit und n j = j=2 n(n + 1) 2 n (j 1) = j=2 n(n 1) 2 1 (3) schreiben wir ( ) n(n + 1) T (n) = c 1 n + c 2 (n 1) + c 3 (n + 1) + c 4 1 (5) 2 ( ) ( ) n(n 1) n(n 1) +c 5 + c 6 + c 7 (n 1) 2 2 ( ) ( c4 + c 5 + c 7 = n 2 + c 1 + c 2 + c 3 + c ) 4 c 5 c 6 + c 7 ) n (6) 2 2 (c 2 + c 3 + c 4 + c 7 ) (4) Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 18 / 39

Der schlechteste Fall als Regelfall Laufzeit im schlechtest Fall Warum der schlechteste Fall? Dieser Fall definiert eine obere Schranke. T (n) an 2 + bn + c (7) Der schlechteste Fall ist der Regelfall. Der mittlere Fall ist genauso schlecht wie der schlechtest. Im mittleren Fall sind alle Elemente gleichverteilt in A. d.h. die Hälfte der Elemente A[1... j 1] < A[j] T (n) an 2 + bn + c Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 19 / 39

Wachstumsgrad Eine weitere Abstraktion der Laufzeit führt zur sogenannten Wachstumsrate beziehungsweise zum Wachstumsgrad. Wir betrachten nur den führenden Term. an 2 Wir verwerfen a, da diese Größe nur von Konstanten abhängt. n 2 Zur allgemeinen und formalen Darstellung der Wachstumsrate führen wir die Θ-Notation ein. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 20 / 39

Die Θ Notation Sie beschreibt das asymptotische Laufzeitverhalten eines Algorithmus im schlechtesten Fall. Für eine gegeben Funktion g bezeichne wir mit Θ(g) die Menge der Funktionen Θ(g) = {f : c i > 0 n 0 0 < c 1 g(n) f (n) c 2 g(n) n > n 0 } (8) Anmerkung Im Allgemeinen wird mit der Θ Notation sehr schlampig umgegangen d.h. Sie wird z.b. auf R oder nur auf Teilmengen von N angewendet. Des Weiteren verwendet man g = Θ(g) anstelle von g Θ(g) Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 21 / 39

Die O-Notation Definiert nur eine obere asymptotische Schranke. O(g) = {f : c i > 0 n 0 0 f (n) c 2 g(n) n > n 0 } (9) Anmerkung Aus f (n) = Θ(g(n)) folgt f (n) = O(g(n)). Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 22 / 39

Abbildung: Vergleich der Θ- und O-Notation. [Stasys Jukna, Uni-Frankfurt] Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 23 / 39

Beispiel: Für n > n 0 gilt 1 2 n2 3n = Θ(n 2 ) (10) c 1 n 2 1 2 n2 3n c 2 n 2 (11) Für n 1 c 2 1 2 Für n 7c 1 1 14 1 2 n2 3n = Θ(n 2 ) c 1 1 2 3 n c 2 (12) Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 24 / 39

Θ für Sortieren-durch-Einfügen Sortieren-durch-Einfügen T (n) an 2 + bn + c Θ(n 2 ) (13) ( c 1 = a 4 ; c 2 = 7a ) 4 ; n b c 0 = 2 max a, a (14) Im Allgemeinen gilt für ein Polynom d p(n) = a i n i (15) i=0 wenn a i = konstant und a i > 0. p(n) = Θ(n d ) (16) Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 25 / 39

Sortieren-durch-Mischen Das Sortierverfahren Sortieren durch Mischen erzeugt eine sortierte Folge durch Verschmelzen sortierter Teilstücke. Das Verfahren beruht auf dem Divide-and-Conquer-Prinzip und ruft sich rekursiv selbst auf. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 26 / 39

Teilen-und-Beherrsche Ein Teile-und-Beherrsche Algorithmus zerlegt das eigentliche Problem so lange in kleinere und einfachere Teilprobleme, bis diese lösbar sind. Anschließend wird aus diesen Teillösungen eine Lösung für das Gesamtproblem konstruiert. Das Paradigma von Teile-und-Beherrsche umfasst drei grundlegende Schritte auf jeder Rekursionsebene. 1 Teile das Problem in mehrere Teilprobleme auf, die kleinere Instanzen des typgleichen Problems sind. 2 Beherrsche die Teilprobleme rekursiv. (Wenn die Teilprobleme klein genug sind werden Sie direkt gelöst.) 3 Vereinige die Lösung der Teilprobleme zur Lösung des Gesamtproblems. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 27 / 39

Sortieren-durch-Mischen Prinzip 1 Die zu sortierende Folge werden zunächst in zwei Teilfolgen zu je n 2 Elemente aufgeteilt. 2 Die zwei Teilfolgen werden rekursive durch Sortieren-durch-Mischen sortiert. 3 Die sortierten Hälften zu einer insgesamt sortierten Folge verschmolzen (Merge). Die Rekursion bricht ab, wenn die zu sortierende Teilfolge die Länge 1 hat. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 28 / 39

Sortieren-durch-Mischen 38 27 43 3 9 82 10 38 27 43 3 9 82 10 38 27 43 3 9 82 10 38 27 43 3 9 82 10 27 38 3 43 9 82 10 3 27 38 43 9 10 82 3 9 10 27 38 43 82 Abbildung: Sortieren durch Mischen Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 29 / 39

Die Merge-Funktion Die zentrale Operation des Sortieren-durch-Mischen Algorithmus ist das Mischen der sortierten Folgen. Wir Mischen mithilfe der MERGE(A,p,q,r) Funktion. A[] ist ein sortiertes Feld. p, q und r sind Indizes des Feldes A, wobei p q < r gilt. Die Teilfelder A[p... q] und A[q + 1... r] sind bereits Sortiert. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 30 / 39

Pseudocode der Merge Funktion MERGE(A,p,q,r); n 1 = q -p +1; n 2 = r -q; L = Feld[1... n 1 + 1]; R = Feld[1... n 2 + 1] ; for i=1 to n 1 do L[i] = A[p+i-1]; end for j = 1 to n 2 do R[j] = A[q+j] end L[n 1 + 1] = ; L[n 2 + 1] = ; i =1; j =1; for k = p to r do if L[i] R[j] then A[k] = L[i]; i = i+1; else A[k] = R[j]; j=j+1; end end Algorithm 3: Sortieren durch Einfügen als Pseudocode. Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 31 / 39

Funktionsweise der Merge Funktion am Beispiel eines Kartenspiels Wir starten mit zwei Kastenstapeln, die verdeckt auf dem Tisch liegen. Die kleinste Karte liegt obenauf. 1 Wir decken die obersten Karten auf. 2 Wir vergleichen die aufgedeckten Karten. 3 Die kleiner (größere) Karte wird separate abgelegt. 4 Wir decken wider eine neue Karte. 5 Wir wiederholen dies schritte bis es nur noch einen Stapel gibt. Da wir nur immer die obersten Karten vergleichen und somit nur n Grundschritte ausfuhren gilt T MERGE = Θ(n) Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 32 / 39

Die MERGE-SORT Funktion Die MERGE-SORT(Sortieren durch Mischen) Funktion benutzt die MERGE Funktion als Unterroutine. MERGE-SORT(A,p,r); if p < r then q = p+r 2 ; MERGE-SORT(A,p,q) ; MERGE-SORT(A,q+1,r) ; MERGE(A,p,q,r) ; end Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 33 / 39

Analyse von Sortieren-durch-Mischen Bei Algorithmen, die sich selbst aufrufen können wir die Laufzeit als Rekursionsgleichung. Wenn die Größe des Teilproblems hinreichend klein ist, dann benötigt die direkte Lösung eine konstante Zeit. Θ(1) Die Aufteilung des Gesamtproblems führt zu a Teilproblemen der Größe 1 b. Im Fall von Sortieren-durch-Mischen gilt a = b = 2. Das lösen eines Teilproblems der Größe n b dauert T ( n b ). Das lösen von a Teilproblemen benötigt somit at ( n b ). Wir nehmen an das die Aufteilung die Zeit D(n) benötigt und die Zusammenführung die Zeit C(n). Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 34 / 39

Analyse von Sortieren-durch-Mischen T (n) = { Θ(1) fallsn = 1 2T (n/2) + Θ(n) fallsn > 1 (17) Die Rekursionsgleichung ergibt T (n) = Θ(n lg(n) Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 35 / 39

Rekursionsbaum für Sortieren-durch-Mischen Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 36 / 39

Vergleich von verschieden Ordnungen Θ(1): Θ(n): Θ(n ln n) : Θ(n 2 ): Θ(n k ): Θ(k n ): Θ(n!): konstanter Aufwand, unabhängig von n linearer Aufwand (z.b. Einlesen von n Zahlen) Aufwand von Sortieren-durch-Mischen quadratischer Aufwand polynominaler Aufwand( k= konstant) exponentieler Aufwand( k= konstant) Fakultativer Aufwand (z.b. Bestimmung aller Permutationen von n Elementen) Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 37 / 39

Konkreter Vergleich von Laufzeiten verschiedener Ordnungen Annahme: Ein Schritt dauert 1µs. n= 10 20 30 40 50 60 n 10µs 20µs 30µs 40µs 50µs 60µs n 2 100µs 400µs 900µs 1,6ms 2.5ms 3.6ms n 3 1ms 8ms 27 ms 64ms 125ms 216ms 2 n 1ms 1s 18min 13d 36a 36,6ka 3 n 59ms 58min 6,5a 385ka 100Ma 10 6 Ma n! 3.62s 77ka 10Ea 10 16 Ea Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 38 / 39

Quellen Algorithms Robert Sedgewick Algorithms in a Nutshell George T. Heineman Algorithmen Eine Einfuerung H.Cormen Entwurf und Abalyse von Algorithmen M. Nebel Michael Klauser (LMU) Effizienz von Algorithmen 30. Oktober 2012 39 / 39