Algorithms & Data Structures 2

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

Informatik I Komplexität von Algorithmen

Komplexität von Algorithmen

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

2. Algorithmen und Algorithmisierung Algorithmen und Algorithmisierung von Aufgaben

Abschnitt: Algorithmendesign und Laufzeitanalyse

Programmiertechnik II

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

Laufzeit und Komplexität

Algorithmen und Datenstrukturen (für ET/IT)

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

Datenstrukturen und Algorithmen

Uebersicht. Webpage & Ilias. Administratives. Lehrbuch. Vorkenntnisse. Datenstrukturen & Algorithmen

Kombinatorik: Abzählverfahren (Teschl/Teschl 7) Summenregel. Allgemeiner

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Grundlagen der Informatik 2 (GdI2) - Algorithmen und Datenstrukturen -

4 Effizienz und Komplexität 3.1 1

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

16. All Pairs Shortest Path (ASPS)

T (n) = max. g(x)=n t(n) S(n) = max. g(x)=n s(n)

Prof. Dr. Margarita Esponda

Theoretische Informatik 1

Kapitel 8. Rekursionsgleichungen. Landau-Symbole. Lösen von Rekursionsgleichungen Allgemeines Iterationsmethode Spezialfälle Erzeugende Funktionen

Programmieren I. Kapitel 7. Sortieren und Suchen

Komplexita tstheorie eine erste Ubersicht. KTV bedeutet: Details erfahren Sie in der Komplexitätstheorie-Vorlesung.

Numerische Verfahren und Grundlagen der Analysis

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Grundlagen der Informatik Algorithmen und Komplexität

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

Übersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr.

Einführung in die Informatik

Grenzen der Berechenbarkeit

Algorithmik Übung 3 Prof. Dr. Heiner Klocke. Sortierfolge nach Werten: Bube Dame König As nach Farben: Karo ( ) Herz ( ) Piek ( ) Kreuz ( )

abgeschlossen unter,,,, R,

Einstieg in die Informatik mit Java

Sortierverfahren für Felder (Listen)

Grundlagen der Programmierung

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Einführung in die Informatik 1

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Überblick. Lineares Suchen

Kostenmaße. F3 03/04 p.188/395

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Kapitel 4. Grundlagen der Analyse von Algorithmen. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

Grundlegende Sortieralgorithmen

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

JAVA - Suchen - Sortieren

3. Ziel der Vorlesung

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

3. Übung Algorithmen I

2: Zahlentheorie / Restklassen 2.1: Modulare Arithmetik

Abstrakte Algorithmen und Sprachkonzepte

Effizienz in Haskell

Kapitel 3. Speicherhierachie. Beispiel für Cache Effekte. Motivation Externspeicheralgorithmen. Motivation Für Beachtung von Cache Effekten

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Informatik I 4. Kapitel Suchen in sequentiellen Listen

Algorithmentheorie Randomisierung. Robert Elsässer

Die Komplexitätsklassen P und NP

Höhere Algorithmik. Eine Vorlesung von Prof. Dr. Helmut Alt Mitschrift von Pascal-Nicolas Becker

Kapitel 7. Rekursionsgleichungen. Allgemeines Iterationsmethode Klassen von Rekursionsgleichungen Erzeugende Funktionen

Grundlagen der Informatik I (Studiengang Medieninformatik)

Syntax von LOOP-Programmen

Algorithmen und Datenstrukturen Laufzeitabschätzung

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Grundlagen der Programmierung 2. Parallele Verarbeitung

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Schulmethode zur Multiplikation von n-stelligen Binärzahlen a und b: (evtl. fallen Zeilen weg, wenn das zugehörige Bit des Multiplikators 0 ist).

4.Grundsätzliche Programmentwicklungsmethoden

MATHEMATISCHE ANALYSE VON ALGORITHMEN

Sortieralgorithmen. Vorlesung Algorithmen und Datenstrukturen 2. Prof. Dr. W. P. Kowalk Universität Oldenburg

Einführung. Vorlesungen zur Komplexitätstheorie: Reduktion und Vollständigkeit (3) Vorlesungen zur Komplexitätstheorie. K-Vollständigkeit (1/5)

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Einführung in die Informatik I Kapitel II.3: Sortieren

Suchen und Sortieren (Die klassischen Algorithmen)

Seminar Kompressionsalgorithmen Huffman-Codierung, arithmetische Codierung

Programmiertechnik II

Nichtdeterministische Platzklassen

Rechnerische Komplexität

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen. Sortieren durch Auswählen, Sortieren durch Mischen und Vergleich der Laufzeit. Abschätzung der Laufzeit eines Algorithmus, O-Notation.

Projekt Systementwicklung

Folge 13 - Quicksort

Mächtigkeit von WHILE-Programmen

Suchen und Sortieren Sortieren. Heaps

Vorlesung 4 BETWEENNESS CENTRALITY

Fragen für die Klausuren

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Effizienz von Algorithmen

Elementare Zahlentheorie. Diskrete Strukturen. Winter Semester 2012 #

1 Zahlentheorie. 1.1 Kongruenzen

Sortieren Jiri Spale, Algorithmen und Datenstrukturen - Sortieren 1

Transkript:

Algorithms & Data Structures 2 Complexity WS2017 B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute for Pervasive Computing, JKU Linz)

KLASSISCHER (DETERMINISTISCHER) ALGORITHMUSBEGRIFF Allgemeingültige, detaillierte, eindeutige und formalisiert ("rein mechanisch") ausführbare Vorschrift zum schrittweisen Lösen einer lösbaren Aufgabenklasse d.h. aller durch konkrete Parameterwerte charakterisierten Aufgaben eines bestimmten Typs, z.b. Lösen der quadratischen Gleichung x² + px + q = 0 (p, q - Parameter) unter Zugrundelegung eines bestimmten Prozessortyps Mensch, v. Neumann-Rechner, RAM, Turingmaschine,...; sequentiell, sequentiell-parallel, parallel mit endlichem Aufwand (Ressourcen, Zeit) niedergeschrieben als endlicher Text in einer vereinbarten Notierungsform Durch Einbringen nichtdeterministischer, stochastischer, evolutionärer, genetischer,... Elemente gelangt man zu Algorithmen, die zum Lösen bestimmter Aufgabenklassen wesentlich leistungsfähiger sind als klassische Algorithmen: stochastische (probabilistische), genetische,... Algorithmen. Algorithms & Datastructures 2 // 2017W // 2

DETERMINISMUS deterministischer Algorithmus zu jedem Zeitpunkt der Verarbeitung besteht höchstens eine Möglichkeit der Fortsetzung Beispiel: Durchwandern eines Irrgartens "immer an der Wand lang" nichtdeterministischer Algorithmus es gibt Zeitpunkte der Verarbeitung, bei denen zwei oder mehr Möglichkeiten der Fortsetzung beliebig ausgewählt werden können Beispiel: zufälliges Suchen im Irrgarten Algorithms & Datastructures 2 // 2017W // 3

FORMALE EIGENSCHAFTEN EINES ALGORITHMUS Korrektheit Gestellte Aufgabe richtig gelöst? (Dijkstra) Robustheit Werden Sonderfälle sicher abgehandelt? Allgemeingültigkeit Arbeitet er für beliebige Eingaben? Verständlichkeit Ist er verständlich aufgeschrieben? Effizienz Laufzeit? Speicherplatzbedarf? Messung (nach Implementation) Analyse für idealisierten Modellrechner / Referenzmaschine Interesse: Wachstum der Effizienz Algorithms & Datastructures 2 // 2017W // 4

KOMPLEXITÄT Speicherplatzkomplexität Wird (primärer, sekundärer) Speicherplatz effizient genutzt? Laufzeitkomplexität Steht die Laufzeit im akzeptablen/vernünftigen/optimalen Verhältnis zur Aufgabe? Worst-case Analyse Best-case Analyse Average-case Analyse (schwierig Verteilungsannahmen!) => Interesse an oberen und unteren Schranken => Interesse an Größenordnung (konstante Faktoren nicht vordergründig) Algorithms & Datastructures 2 // 2017W // 5

CASES Ausgangspunkt: Sei P das betrachtete Problem x... Eingabe, x =n Länge von x T P (x)... Laufzeit von P auf x T P (n)... Laufzeit von P bei Problemgröße n best case: oft leicht zu bestimmen, nicht repräsentativ worst case: konservativ, meist leicht zu bestimmen T P (n) = sup{ T P (x) x = n und x ist Eingabe für P } amortisierter worst case: durchschnittlicher Aufwand für eine schlechtest mögliche Folge von Operationen. average case: oft nicht leicht zu handhaben, aber praxisrelevant. Definition einer Wahrscheinlichkeitsverteilung q n für mögliche x T P,qn (n) = x = n und x ist Eingabe für P T P,qn (x) q n (x) Mittelwert worüber? Inputs gleich verteilt? Algorithms & Datastructures 2 // 2017W // 6

FUNKTIONENKLASSEN Groß-O-Notation O-, - und - Notation obere, untere bzw. genaue Schranken Idee beim Aufwand kommt es auf Summanden und konstante Faktoren letztlich nicht an Gründe Interesse am asymptotischen Verhalten für große Eingaben genaue Analyse oft technisch sehr aufwendig / unmöglich lineare Beschleunigungen sind leicht möglich (Tausch von Hard- und Software) Ziel Einteilung der Komplexitätsmessungen nach Funktionenklassen, z.b. O(f) Menge von Funktionen, die in der Größenordnung von f sind Algorithms & Datastructures 2 // 2017W // 7

ERMITTLUNG DES LEISTUNGSVERHALTENS Messung einer konkreten Implementierung auf realer Zielmaschine: Laufzeitmessung für repräsentative Eingaben Berechnung/Analyse des Laufzeit- Speicherplatzverbrauches für idealisierte Zielmaschine: Turingmaschine (TM) Random Access Maschine (RAM) Ermittlung/Analyse teurer Elementaroperationen: Anzahl der Vergleiche / Vertauschungen beim Sortieren Anzahl der Multiplikationen / Divisionen beim numerischen Rechnen Algorithms & Datastructures 2 // 2017W // 8

MESSUNG Experimentelle Bestimmung der Laufzeit Mögliche Ergebnisse: Programm, das den Algorithmus implementiert exekutiere das Programm mit unterschiedlichen Eingabedaten (n) verwende eine Methode zur Messung der Laufzeit t(ms) 40 35 30 25 20 15 10 5 0 n 0 20 40 60 80 100 120 140 160 Algorithms & Datastructures 2 // 2017W // 9

MESSUNG Vergleich von Geschwindigkeit eines Algorithmus erfordert Mittelwertbildung Arithmetisches Mittel Geometrisches Mittel Harmonisches Mittel K AM = x i / K i=1 K GM = P x 1/K i i=1 K HM = K / ( ( 1 / x i ) ) i=1 Algorithms & Datastructures 2 // 2017W // 10

BEISPIEL :: VERGLEICHSMESSUNG VON SORTIERALGORITHMEN Man betrachte 2 Sortieralgorithmen (A und B), implementiert für Maschine Y Frage: Welcher Algorithmus ist schneller? Definition: Sortiergeschwindigkeit = Problemgröße / gemessene Laufzeit Ergebnisse für Problemgröße n = 300 bei unterschiedlicher Struktur der Eingabedaten (Test 1 und Test 2) Geschwindigkeit Algorithmus A Geschwindigkeit Algorithmus B Test 1 5 (Laufzeit 60) 6 (Laufzeit 50) Test 2 150 (Laufzeit 2) 60 (Laufzeit 5) Algorithmus B bei Test 1 schneller, Algorithmus A bei Test 2 schneller Frage: Welcher Algorithmus ist im Mittel schneller? Algorithms & Datastructures 2 // 2017W // 11

BEISPIEL :: VERGLEICH VON SORTIERALGORITHMEN Geschwindigkeit Algorithmus A Geschwindigkeit Algorithmus B Test 1 5 (Laufzeit 60) 6 (Laufzeit 50) Test 2 150 (Laufzeit 2) 60 (Laufzeit 5) Arithmetisches Mittel: Geschwindigkeit Algorithmus A = (150+5)/2 = 77.5 A schneller Geschwindigkeit Algorithmus B = (60+6)/2 = 33 Geometrisches Mittel: Geschwindigkeit Algorithmus A = (150 * 5) = 27.38 A schneller Geschwindigkeit Algorithmus B = (60 * 6) = 18.97 Harmonisches Mittel: Geschwindigkeit Algorithmus A = 2/(1/5 + 1/150) = 9.6 Geschwindigkeit Algorithmus B = 2/(1/6 + 1/60) = 10.909 B schneller (Überlege zur Probe: Algorithmus A: 600 Elemente in 62 sec, Algorithmus B: 600 Elemente in 55 sec!) Algorithms & Datastructures 2 // 2017W // 12

BEISPIEL :: VERGLEICH VON SORTIERALGORITHMEN Geschwindigkeit Algorithmus A Geschwindigkeit Algorithmus B Test 1 5 (Laufzeit 60) 6 (Laufzeit 50) Test 2 150 (Laufzeit 2) 60 (Laufzeit 5) Arithmetisches Mittel (der Geschwindigkeit): Geschwindigkeit Algorithmus A = (150+5)/2 = 77.5 A schneller Geschwindigkeit Algorithmus B = (60+6)/2 = 33 Geometrisches Mittel (der Geschwindigkeit): Geschwindigkeit Algorithmus A = (150 * 5) = 27.38 A schneller Geschwindigkeit Algorithmus B = (60 * 6) = 18.97 Harmonisches Mittel (der Geschwindigkeit): Geschwindigkeit Algorithmus A = 2/(1/5 + 1/150) = 9.6 Geschwindigkeit Algorithmus B = 2/(1/6 + 1/60) = 10.909 B schneller (Überlege zur Probe: Algorithmus A: 600 Elemente in 62 sec, Algorithmus B: 600 Elemente in 55 sec!) Algorithms & Datastructures 2 // 2017W // 13

BEISPIEL :: VERGLEICH VON SORTIERALGORITHMEN Geschwindigkeit Algorithmus A Geschwindigkeit Algorithmus B Test 1 5 (Laufzeit 60) 6 (Laufzeit 50) Test 2 150 (Laufzeit 2) 60 (Laufzeit 5) Arithmetisches Mittel (der Laufzeit): Geschwindigkeit Algorithmus A = (60+2)/2 = 31 Geschwindigkeit Algorithmus B = (50+5)/2 = 27.5 B schneller Geometrisches Mittel (der Laufzeit): Geschwindigkeit Algorithmus A = (60 2) = 10.95 A schneller Geschwindigkeit Algorithmus B = (50 5) = 15.81 Harmonisches Mittel (der Laufzeit): Geschwindigkeit Algorithmus A = 2/(1/60 + 1/2) = 9.23 Geschwindigkeit Algorithmus B = 2/(1/50 + 1/5) = 9.09 B schneller (Überlege zur Probe: Algorithmus A: 600 Elemente in 62 sec, Algorithmus B: 600 Elemente in 55 sec!) Verwende bei Raten (z.b. Geschwindigkeit, Operationen/Sekunde, km/h,...) immer Harmonisches Mittel!! Algorithms & Datastructures 2 // 2017W // 14

KRITIK AN EXPERIMENTELLER MESSUNG zusätzlicher Aufwand durch Implementierung und Test des Programmes Experimente sind hinsichtlich der durchführbaren Kombinationen der Eingabegrößen beschränkt, die gewählten Kombinationen sind u.u. nicht typisch für das Verhalten des Algorithmus für den Vergleich von Algorithmen muss eine identische HW/SW Plattform verwendet werden Anforderungen an eine allgemeine Methode zur Laufzeitanalyse soll auf abstrakter Beschreibung des Algorithmus aufbauen (statt auf einer konkreten Implementierung) soll alle möglichen Eingabekombinationen berücksichtigen soll eine HW/SW-unabhängige Bewertung eines Algorithmus erlauben bezogen auf einen Idealisierten Modellrechner Algorithms & Datastructures 2 // 2017W // 15

IDEALISIERTER MODELLRECHNER: RAM MODELL Algorithms & Datastructures 2 // 2017W // 16

IDEALISIERTER MODELLRECHNER :: RAM MODELL Annahmen: Register, halten unbeschränkt große (evtl. reelle) Zahlen abzählbar unendliche Menge einzeln addressierbarer Speicherzellen direkt oder indirekt addressierbar Befehlssatz ähnlich Assembler (Laden, Speichern, arithmetische Verknüpfung von Registerinhalten, bedingte/unbedingte Sprünge), Speicherplatz Zahl der benötigten RAM-Zellen Laufzeit Zahl der ausgeführten RAM-Befehle Problem: uneingeschränkte Größe der Datenelemente: Einheitskostenmaß: jedes Datenelement belegt nur beschränkten Speicher Größe des Inputs bestimmt durch Anzahl benötigter Datenelemente z.b. Größe eines Sortierproblems gemessen in der Anzahl zu sortierender Zahlen Logarithmisches Kostenmaß: einzelnes DE kann beliebig groß sein Größe des Inputs bestimmt durch Summe der Größe der Elemente Für n > 0 ist die Anzahl der benötigten Darstellungs-Bits log 2 (n+1) Algorithms & Datastructures 2 // 2017W // 17

IDEALISIERTER MODELLRECHNER :: PRAM MODELL (PARALLELE BERECHNUNG) Algorithms & Datastructures 2 // 2017W // 18

LAUFZEITANALYSE :: LANDAU SCHE O-NOTATION f = O(g) (in Worten: f wächst nicht schneller als g), wenn f = (g) (in Worten: f wächst mindestens so schnell wie g), wenn c +, n o 0, n n 0 : f(n) c g(n) c +, n o 0, n n 0 : f(n) c g(n) f = (g) (in Worten: f und g sind von der gleichen Wachstumsordnung), wenn f = o(g) (in Worten: f wächst langsamer als g), wenn f = w(g) (in Worten: f wächst schneller als g), wenn In Ottmann/Widmayer O(g) = { f a > 0, b > 0, n f(n) a g(n) + b } und (g) = { g c > 0, viele n: f(n) c g(n) } f = O(g) und g = O(f) f(n) / g(n) eine Nullfolge ist g = o(f) Algorithms & Datastructures 2 // 2017W // 19

LAUFZEITANALYSE :: LANDAU SCHE O-NOTATION Beispiel 3n 4 + 5n 3 + 7 log n O(n 4 ), denn 3n 4 + 5n 3 + 7 log n < 3n 4 + 5n 4 + 7n 4 = 15 n 4 für n >= 1. Wähle also c = 15, n 0 = 1. c +, n o 0, n n 0 : f(n) c g(n) In O(n 4 ) steht n 4 für die Funktion, die n auf n 4 abbildet. Häufig schreibt man auch h = O(n 4 ) statt h O(n 4 ) Üblicherweise verwendete Funktionen zum Messen des Wachstums: 1) logarithmische: log n 2) linear: n 3) n log n: n log n 4) quadratisch, kubisch, n 2, n 3,... 5) exponentiell: 2 n, 3 n,... Unterschied zwischen (4) und (5): handhabbar (tractable) - nicht handhabbar Algorithms & Datastructures 2 // 2017W // 20

(LAUFZEIT-) KOMPLEXITÄTSKLASSEN Drei zentrale Zeitkomplexitätsklassen werden unterschieden: Algorithmus A heißt: linear-zeitbeschränkt f A O ( n ) polynomial-zeitbeschränkt exponentiell-zeitbeschränkt k N, so daß f A O ( n k ). k N, so daß f A O ( k n ). Komplexitätsklassen P und NP P: Die Menge aller Sprachen (Probleme), die ein deterministischer Automat in Polynomialzeit (O(P(n)) akzeptiert NP: Die Menge aller Sprachen (Probleme), die ein nicht-deterministischer Automat in Polynomialzeit akzeptiert Algorithms & Datastructures 2 // 2017W // 21

BERECHNUNG DER (WORST-CASE) ZEITKOMPLEXITÄT Elementare Operationen (Zuweisung, Ein-/ Ausgabe): O ( l ) Summenregel: T 1 ( n ) und T 2 ( n ) seien die Laufzeiten zweier Programmfragmente P1 und P2 ; es gelte: T 1 ( n ) O (f ( n ) ) und T 2 ( n ) O ( g ( n ) ). Für die Hintereinanderausführung von P 1 und P 2 ist dann T 1 ( n ) + T 2 ( n ) O ( max ( f ( n ), g ( n ) ) ) Produktregel: z. B. für geschachtelte Schleifenausführung von P 1 und P 2 T 1 ( n ) * T 2 ( n ) O ( f ( n ) * g ( n ) ) Algorithms & Datastructures 2 // 2017W // 22

BERECHNUNG DER (WORST-CASE) ZEITKOMPLEXITÄT Fallunterscheidung: Kosten der Bedingungsanweisung ( O ( l ) ) + Kosten der längsten Alternative Schleife: Produkt aus Anzahl der Schleifendurchläufe mit Kosten der teuersten Schleifenausführung Rekursive Prozeduraufrufe: Produkt aus Anzahl der rekursiven Aufrufe mit Kosten der teuersten Prozedurausführung Algorithms & Datastructures 2 // 2017W // 23

BEISPIEL SORTIEREN Definition Sortieren Eingabe: Ausgabe: Reihe von Zahlen a 1, a 2,..., a n Permutation der Eingabe-Zahlenreihe a 1,...,a n, sodass gilt: a 1... a n Mögliche Lösungsalgorithmen: Insertion Sort Merge Sort Algorithms & Datastructures 2 // 2017W // 24

ALGORITHMUS :: INSERTION SORT Prinzip: für i=2,...,n, generiere sort. Liste a 1,..., a i durch Einfügen von a i in sortierte Liste a 1,..., a i-1 Eingabe: 12 6 15 12 6 9 7 13 14 20 6 12 15 Pseudocode Algorithm InsertionSort: 6 12 15 9 Input: Array A[1...n] Output: sortiertes Array A 6 9 12 15 7 for i 2 to n do 6 7 9 12 15 13 while A[i] < A[i-1] swap A[i] with A[i-1] 6 7 9 12 13 15 14 decrement i 6 7 9 12 13 14 15 20 Algorithms & Datastructures 2 // 2017W // 25

LAUFZEITANALYSE :: INSERTION SORT Laufzeit ist lineare Funktion der Anzahl der Vergleichsoperationen worst case Eingabedaten sind in umgekehrter Reihenfolge sortiert n-1 Anzahl der Vergleichsoperationen i = n (n-1) / 2 Komplexität (n 2 ) i=1 best case Eingabedaten sind bereits sortiert n-1 Anzahl der Vergleichsoperationen 1 = n-1 Komplexität (n) i=1 average case n-1 Erwartete Anzahl von V.op. (i+1)/2 = n (n+1) / 4 Komplexität (n 2 ) i=1 Algorithms & Datastructures 2 // 2017W // 26

ALGORITHMUS :: MERGE SORT Prinzip: Divide and Conquer Divide: Teile Array in 2 Hälften Conquer: sortiere jede Hälfte Combine: vereinige sortierte Listen in einzige sortierte Liste Pseudocode Algorithm MergeSort (A,p,q), sort A[p...q] n q - p + 1, m p + n/2 if n=1 return MergeSort(A,p,m-1) MergeSort(A,m,q) i p, j m, t 1 while (i m-1) and (j q) if j=q+1 or (i m-1 and j q and A[i] < A[j] ) B[t] A[i], i i+1, t t+1 else B[t] A[j], j j+1, t t+1 for t 1 to n A[p + t - 1] B[t] Algorithms & Datastructures 2 // 2017W // 27

ALGORITHMUS :: MERGE SORT Eingabe: 12 6 15 9 7 13 14 20 Rekursive Struktur: 12 6 15 9 7 13 14 20 6 12 9 15 7 13 14 20 6 9 12 15 7 13 14 20 6 6 7 6 7 9 6 7 9 12 9 12 15 9 12 15 12 15 15 7 13 14 20 13 14 20 13 14 20 13 14 20 6 7 9 12 13 6 7 9 12 13 14 6 7 9 12 13 14 15 15 15 14 20 20 20 Algorithms & Datastructures 2 // 2017W // 28

LAUFZEITANALYSE :: MERGE SORT Laufzeit ist lineare Funktion der Anzahl der Zuweisungsoperationen der Arrays A und B Im Merge-Teil sind das 2n Operationen Daher gilt für die Laufzeit T(n) = (n) + T( n/2 ) + T( n/2 ) Durch Anwendung der Master-Methode erhält man T(n) = ( n ln n ) Algorithms & Datastructures 2 // 2017W // 29

LAUFZEITANALYSE :: REKURRENZBEZIEHUNGEN Funktion f(n) ist definiert durch Basisfall, z.b.: f(1) = 2 Rekursiver Fall, z.b.: f(n) = f(n-1) + N Standardmethode zur Lösung von Rekurrenzen: Entfaltung wiederholte Substitutionen der rekursiven Regel, bis Basisfall erreicht ist f(n) f(n) = f(n-1) + N = f(n-2) + (N-1) + N = f(n-3) + (N-2) + (N-1) + N... = f(n-i) + (N-i+1) +... + (N-1) + N Basisfall erreicht bei i = N-1: f(n) = 2 + 3 +... + (N-2) + (N-1) + N = N ( N+1)/2 + 1 = O(N 2 ) Algorithms & Datastructures 2 // 2017W // 30

LAUFZEITANALYSE :: TÜRME VON HANOI Ziel: Schichte alle Scheiben von Stange A auf Stange C Regel: in einem Schritt darf nur eine Scheibe bewegt werden es darf nie eine größere Scheibe auf einer kleineren zu liegen kommen Rekursive Lösung: Schichte N-1 Scheiben von A auf B um Bewege größte Scheibe von A nach C Schichte N-1 Scheiben von B auf C um Gesamtzahl der Züge : T(N) = T(N-1) + 1 + T(N-1) Algorithms & Datastructures 2 // 2017W // 31

LAUFZEITANALYSE :: TÜRMEN VON HANOI Rekurrenzbeziehung T(N) = 2 T(N-1) + 1 T(1) = 1 Lösung durch Entfaltung T(N) = 2 ( 2 T(N-2) + 1) + 1 = = 4 T(N-2) + 2 + 1 = = 4 ( 2 T(N-3) + 1) + 2 + 1 = = 8 T(N-3) + 4 + 2 + 1 =... = 2 i T(N-i) + 2 i-1 + 2 i-2 +... 2 1 + 2 0 Expansion bricht bei i = N-1 ab T(N) = 2 N-1 + 2 N-2 + 2 N-3 +... + 2 1 + 2 0 Geometrische Summe, daher T(N) = 2 N - 1 = O(2 N ) Algorithms & Datastructures 2 // 2017W // 32

LAUFZEITANALYSE :: REKURRENZ T(N) = 2 T(N/2) + N für N 2 T(1) = 1 T(N) = 2 ( 2T(N/4) + N/2 ) + N = 4 T(N/4) + 2N = 4 ( 2 T(N/8) + N/4 ) +2N = 8 T(N/8) + 3N... = 2 i T(N/2 i ) + in T(1) = 1 Expansion bricht bei i = ld N ab, sodass T(N) = N + N ld N Algorithms & Datastructures 2 // 2017W // 33

LÖSEN DER REKURRENZ DURCH RATEN UND BEWEISEN Beispiel T(N) = 2 T(N/2) + N für N 2 T(1) = 1 Annahme ( wild guess ) T(N) = N + N ld N Beweis durch Induktion Basis: T(1) = 1 + 1 ld 1 = 1 Induktionsschritt: T(N) = 2 T(N/2) + N = 2 ( N/2 + N/2 ld (N/2)) + N = N + N ( ld N - 1 ) + N = N + N ld N Algorithms & Datastructures 2 // 2017W // 34

WEITERES BEISPIEL T(N) = 2 T( N ) + 1 = 2 T(N1/2) + 1 T(2) = 0 T(N) = 2 T(N1/2) + 1 = 2 ( 2 T(N1/4) + 1) + 1 = 4 T(N1/4) + 1 + 2 = 8 T(N1/8) + 1 + 2 + 4... 2 i T(N1/2 i ) + 2 0 + 2 1 +... + 2 i-1 Expansion bricht bei N1/2i = 2 ab, also bei i = loglog N, daher T(N) = 2 0 + 2 1 +... + 2 loglogn-1 = logn Algorithms & Datastructures 2 // 2017W // 35

LAUFZEITANALYSE :: LÖSEN DER REKURRENZ DURCH INDUKTION Zu zeigen Eigenschaft P gilt für alle ganzzahligen Werte n n 0 Basis: Zeige, daß P für n 0 gilt Induktionsschritt: Zeige wenn P gilt für alle k mit n 0 k n-1 dann gilt P auch für n Beispiel n-1 S(n) = i = n (n-1)/2 für n 2 i=1 Basis: S(2) = 2 (2-1)/2 = 1 Induktionsschritt: Annahme: S(k) = k(k+1)/2 für 2 k n-1 n-1 n-2 S(N) = i = i + n-1 = S(n-1) + n-1 i=1 i=1 = (n-1)(n-1-1)/2 + n-1 = (n 2-3n+2n+2-2)/2 = n (n-1)/2 Algorithms & Datastructures 2 // 2017W // 36

LAUFZEITANALYSE :: MASTER THEOREM Kochrezept für Rekurrenzgleichungen der Form: T(n) = a T(n/b) + f(n) mit a 1, b>1 und f(n) asymptotisch positiv und n/b entweder n/b oder n/b Falls f(n) = O ( n log b a-e ) für eine Konstante e > 0, dann T(n) = ( n log b a ) Falls k 0 sodaß f(n) = ( n log b a log k n), dann T(n) = ( n log b a log k+1 n) Falls e > 0 und c<1 sodaß f(n) = ( n log b a+e ) und a f(n/b) c f(n) für n hinreichend groß, dann T(n) = ( f(n) ) Algorithms & Datastructures 2 // 2017W // 37

BEISPIEL :: MASTER THEOREM Beispiel T(N) = 2 T(N/2) + N für N 2 T(1) = 1 Lösung a = 2 b = 2 f(n) = N N log b a = N log 2 2 = N 1 = N f(n) vergleichen mit N log b a ergibt Fall 2: f(n) = Θ(N log b a ) = Θ(N) => N und N sind von der gleichen Rangordnung T(N) = Θ(N log b a log N) = Θ(N log N) Algorithms & Datastructures 2 // 2017W // 38

ANHANG :: ANALYSE VON ALGORITHMEN Mathematische Grundlagen Logarithmen log b (xy) = log b x + log b y log b (x/y) = log b x log b y log b x a = alog b x log b a = log a x / log a b Exponenten a (b+c) = a b a c a (b-c) = a b /a c a bc = (a b ) c b = a log a b b c = a c*log a b Floor, Ceiling x = grösste ganze Zahl x x = kleinste ganze Zahl x Algorithms & Datastructures 2 // 2017W // 42

ANHANG :: ANALYSE VON ALGORITHMEN Mathematische Grundlagen Summen t f(i) = f(s) + f(s+1) + f(s+2) +... + f(t) i=s wobei f eine Funktion ist, s der Startindex, und t der Endindex Geometrische Reihe f(i) = a i n a i = 1 + a + a 2 +... + a n = i=0 1 - a n+1 1 - a geometrische Reihe zeigt exponentielles Wachstum Algorithms & Datastructures 2 // 2017W // 43

ANHANG :: BEISPIEL ZUR ASYMPTOTISCHEN ANALYSE Algorithmus zur Bestimmung von Prefix-Mittelwerten Algorithm prefixaverages1(x): Input: Array X, enthält n Zahlen. Output: Array A, enthält n Elemente und in Element A[i] den Mittelwert der Elemente X[0],...,X[i]. for i 0 to n-1 do a 0 for j 0 to i do a a + X[j] A[i] a/(i+1) return array A Analyse... Algorithms & Datastructures 2 // 2017W // 44

ANHANG :: BEISPIEL ZUR ASYMPTOTISCHEN ANALYSE verbesserter Algorithmus Algorithm prefixaverages2(x): Input: Array X, enthält n Zahlen. Output: Array A, enthält n Elemente und in Element A[i] den Mittelwert der Elemente X[0],...,X[i] s 0 for i 0 to n-1 do s s + X[j] A[i] s/(i+1) return array A Analyse... Algorithms & Datastructures 2 // 2017W // 45

Algorithms & Data Structures 2 Complexity WS2017 B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute for Pervasive Computing, JKU Linz)