Abschnitt: Algorithmendesign und Laufzeitanalyse



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

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

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

Programmieren I. Kapitel 7. Sortieren und Suchen

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

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

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

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

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Programmiertechnik II

16. All Pairs Shortest Path (ASPS)

Teile und Herrsche Teil 2

Suchen und Sortieren Sortieren. Heaps

3. Suchen. Das Suchproblem. Suche in Array. Lineare Suche. 1 n. i = n Gegeben Menge von Datensätzen.

Wirtschaftsinformatik I

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

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

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

Numerische Verfahren und Grundlagen der Analysis

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

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

Einführung in die Programmierung für Wirtschaftsinformatik

Übung Algorithmen und Datenstrukturen

Vorkurs Informatik WiSe 15/16

Die Komplexitätsklassen P und NP

Algorithmen & Datenstrukturen 1. Klausur

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

Division Für diesen Abschnitt setzen wir voraus, dass der Koeffizientenring ein Körper ist. Betrachte das Schema

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

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

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Algorithmen II Vorlesung am

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Programmierkurs Java

ALP I. Funktionale Programmierung

Wiederholung. Divide & Conquer Strategie

Algorithmen und Datenstrukturen

Überblick. Lineares Suchen

Aufgabe 8. 1 Arbeitsweise illustrieren. 2 Korrektheitsbeweis führen. 3 Laufzeitanalyse durchführen.

Algorithmen und Datenstrukturen

Sortierverfahren für Felder (Listen)

Algorithmen mit Python

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

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Kapiteltests zum Leitprogramm Binäre Suchbäume

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

Informationsblatt Induktionsbeweis

Erwin Grüner

Grundlagen der Künstlichen Intelligenz

Effizienten MAC-Konstruktion aus der Praxis: NMAC Idee von NMAC:

Codes und Informationsgehalt

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2)

6.2 Scan-Konvertierung (Scan Conversion)

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Suche in Spielbäumen Spielbäume Minimax Algorithmus Alpha-Beta Suche. Suche in Spielbäumen. KI SS2011: Suche in Spielbäumen 1/20

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume

1 topologisches Sortieren

Rente = laufende Zahlungen, die in regelmäßigen Zeitabschnitten (periodisch) wiederkehren Rentenperiode = Zeitabstand zwischen zwei Rentenzahlungen

15 Optimales Kodieren

Literatur. Dominating Set (DS) Dominating Sets in Sensornetzen. Problem Minimum Dominating Set (MDS)

Sicherheit von hybrider Verschlüsselung

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

Tangentengleichung. Wie lautet die Geradengleichung für die Tangente, y T =? Antwort:

Java-Programmierung mit NetBeans

13. Binäre Suchbäume

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

Sortierte Folgen 250

Suchen und Sortieren Sortieren. Mergesort

MATHEMATISCHE ANALYSE VON ALGORITHMEN

DAP2-Klausur

Grundbegriffe der Informatik

1 Vom Problem zum Programm

PROSEMINAR ONLINE ALGORITHMEN

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

13. Lineare DGL höherer Ordnung. Eine DGL heißt von n-ter Ordnung, wenn Ableitungen y, y, y,... bis zur n-ten Ableitung y (n) darin vorkommen.

Sortieren. Eine Testmenge erstellen

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Informatik-Sommercamp Mastermind mit dem Android SDK

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Datenstrukturen und Algorithmen

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Rente = laufende Zahlungen, die in regelmäßigen Zeitabschnitten (periodisch) wiederkehren Rentenperiode = Zeitabstand zwischen zwei Rentenzahlungen

Das Briefträgerproblem

Teil III: Routing - Inhalt I. Literatur. Geometric Routing. Voraussetzungen. Unit Disk Graph (UDG) Geometric Routing 29

Ideen der Informatik Suchen und Sortieren [Ordnung muss sein ] Kurt Mehlhorn Adrian Neumann viele Folien von Kostas Panagiotou

Transkript:

Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher Struktur auf. Sofern die Größe der Subprobleme hinreichend klein ist, verwende trivialen Algorithmus zum Lösen. 2 Conquer: Kombiniere Lösungen der Subprobleme zur Lösung des Ausgangsproblems. Beispiele: Multiplikation von zwei n-bit Zahlen mit Karatsuba-Methode. Divide: Teile in Multiplikation von drei n 2 -Bit Zahlen. Conquer: Kombiniere die n 2 -Bit Ergebnisse zur n-bit Lösung. Multiplikation von zwei Polynomen vom Grad n mittels FFT. Divide: Teile in zwei Polynome a g, a u vom Grad n 2. Conquer: Kombiniere a(x) = a g (x 2 ) + x a u (x 2 ). DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 270 / 320

Idee der Binären Suche Problem Suche eines Elements Gegeben: Sortiertes Array a[1... { n] mit a[1] <... < a[n], Element x j falls x = a[j] für ein j [n] Gesucht: Index i Z n+1 mit i = 0 sonst. Lösung mittels Divide and Conquer Wir treffen die vereinfachende Annahme n = 2 k. Divide: Teile a[1... n] in Teilarrays a[1... n 2 ] und a[ n 2 + 1... n]. Conquer: Falls x a[ n 2 ], ist x im linken Teilarray. Falls x > a[ n 2 ], ist x im rechten Teilarray. Das Problem wird rekursiv im korrekten Teilarray gelöst. Kombination erfordert die korrekte Verwaltung der Indizes. DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 271 / 320

Binäre Suche Algorithmus BINÄRE-SUCHE EINGABE: Array a aufsteigend sortiert, x, Intervallgrenzen l, r 1 If (l = r) then 2 else 1 If (x = a[r]) return r; 2 else return 0; 1 m l + r l 2 ; 2 If x a[m] then BINÄRE-SUCHE(a, x, l, m); 3 else BINÄRE-SUCHE(a, x, m + 1, r); { j falls x = a[j] für ein j [n] AUSGABE: Index i Z n+1 mit i = 0 sonst. Initialer Aufruf ist BINÄRE-SUCHE(a, x, 1, n). Korrektheit folgt aus der Überlegung auf der vorigen Folie. DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 272 / 320

Laufzeit Binäre Suche Satz Laufzeit BINÄRE-SUCHE BINÄRE-SUCHE benötigt für Arrays der Länge n = 2 k genau k + 1 = log 2 n + 1 Elementvergleiche. Beweis: per Induktion über k IV für k = 0, d.h. n = 1: Benötigen einen Vergleich in Schritt 1.1. IS k 1 k: Wir benötigen einen Vergleich x a[m]. Rekursion liefert Teilarray der Größe n 2 = 2k 1. Nach IA benötigen wir für das Teilarray (k 1) + 1 Vergleiche. Damit erhalten wir insgesamt k + 1 Elementvergleiche. Anmerkung für beliebiges n Wir erhalten log n durch Auffüllen von a auf die nächste 2er-Potenz. DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 273 / 320

Sortieren von n Elementen Problem Sortieren von n Elementen Gegeben: Array a[1... n] Gesucht: a[1... n] mit a[1] a[2]... a[n] Idee: Sortiere a[i] in a[1... i 1] ein für i = 2,..., n. Algorithmus INSERTION-SORT EINGABE: a[1... n] 1 For i 2 to n do 1 merk a[i]; j i 1; 2 While (j > 0 and merk< a[j]) do a[j + 1] a[j]; j j 1; 3 a[j + 1] merk; AUSGABE: a[1... n] aufsteigend sortiert DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 274 / 320

Korrektheit und Laufzeit INSERTION-SORT Korrektheit: Nach der i-ten Iteration ist a[1... i] sortiert. D.h. für i = n ist das Array a[1... n] aufsteigend sortiert. Laufzeit: In der i-ten Iteration werden i 1 Vergleiche benötigt. Damit ist die Gesamtzahl der Vergleiche höchstens n i=2 i 1 = n 1 i=1 i = (n 1)n 2 = O(n 2 ). Man beachte: Im best-case, d.h. für aufsteigend sortierte Arrays, werden nur n 1 = O(n) Vergleiche benötigt. DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 275 / 320

Divide and Conquer Version von Insertion-Sort Wir formulieren Insertion-Sort mittels Divide and Conquer. Divide: Splitte a[1... n] in a[1... n 1] und a[n]. Conquer: Sortiere a[1... n 1] rekursiv. Abbruch für a[1]. Kombination: Sortiere a[i] in sortiertem a[1... i 1] ein. Sei T (i) die Anzahl der Vergleiche, um a[i] einzusortieren. Dann gilt T (i) i 1 mit naivem Verfahren. Damit erhalten wir wie zuvor T (n) T (n 1) + n 1... T (1) + n 1 i=1 i = (n 1)n 2. Frage: Was passiert, wenn man statt des naiven Verfahrens BINÄRE-SUCHE verwendet? Dann kann mit nur O(log i) Vergleichen der korrekte Index j zum Einsortieren für a[i] gefunden werden. Allerdings benötigt das Verschieben des Arrays Zeit O(i j). DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 276 / 320

Das Mergesort Verfahren Idee des Mergesort Verfahrens Mergesort verwendet eine Divide and Conquer Strategie. Wir treffen die vereinfachende Annahme n = 2 k. Divide: Teile a in zwei Teilarrays gleicher Größe. Conquer: Sortiere die Teilarrays rekursiv. Ein Abbruch der Rekursion erfolgt für Arraylänge 1. Kombination: Verschmelze, d.h. merge, zwei sortierte Teilarrays der Länge n 2 zu einem sortierten Array der Länge n. DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 277 / 320

Verschmelzen von zwei Teilarrays Algorithmus MERGE EINGABE: a[l... m], a[m + 1... r] jeweils aufsteigend sortiert 1 p 1 l; p 2 m + 1; i 1; 2 While (p 1 m and p 2 r) 1 If (a[p 1 ] < a[p 2 )) then b[i] a[p 1 ]; p 1 p 1 + 1; 2 else b[i] a[p 2 ]; p 2 p 2 + 1; 3 i i + 1; 3 If (p 1 m) then kopiere a[p 1... m] nach b[i... r l + 1]. 4 else kopiere a[p 2... r] nach b[i... r l + 1]. 5 Kopiere b[1... r l + 1] nach a[l... r]. AUSGABE: a[l... r] aufsteigend sortiert DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 278 / 320

Korrektheit und Laufzeit von MERGE Korrektheit: Array b enthalte i Elemente. Dann gilt b[i] a[j] für j = p 1,..., m und j = p 2,..., r. D.h. b[1... i] ist aufsteigend sortiert und enthält die i kleinsten Elemente beider Teilarrays. Damit ist b[1... r l + 1] = a[l... r] aufsteigend sortiert. Laufzeit: Wir benötigen höchstens r l Vergleiche. D.h. die Anzahl der Vergleiche ist linear in der Intervallänge von a. DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 279 / 320

Mergesort Algorithmus MERGESORT EINGABE: a[1... n], l, r 1 If (l < r) 1 m l + r l 2 ; 2 MERGESORT(a, l, m); 3 MERGESORT(a, m + 1, r); 4 MERGE(a[l... m], a[m + 1... r]); AUSGABE: a[1... n] aufsteigend sortiert Korrektheit: Folgt aus Korrektheit von MERGE. Laufzeit: Sei T (n) die Anzahl der Vergleiche. Dann gilt T (n) = 2 T ( n 2 ) + O(n) mit T (1) = O(1). Lösung der Rekursion liefert T (n) = O(n log n). Man beachte, dass MERGESORT im best-case ebenfalls O(n log n) Vergleiche benötigt. DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 280 / 320

Das Quicksort-Verfahren Idee des Quicksort-Verfahrens Divide: Wähle sogenanntes Pivotelement p = a[i] für ein i [n]. Partitioniere das Array a[n] in zwei nicht-leere Teilarrays a[1... j], a[j + 1... n] mit Elementen kleiner bzw. größer als p. D.h. a[k] p für k = 1,..., j und a[k] p für k = j + 1,..., n. Conquer: Sortiere beide Teilarrays rekursiv. Kombination: a[n] = a[1... j]a[j + 1... n] ist bereits sortiert. Algorithmus QUICKSORT EINGABE: a[1... n], l, r 1 If (l < r) 1 j PARTITION(a, l, r); 2 QUICKSORT(a, l, j); 3 QUICKSORT(a, j + 1, r); AUSGABE: a[1... n] aufsteigend sortiert DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 281 / 320

Die Partitionierung eines Arrays Algorithmus PARTITION EINGABE: a[l... r] 1 p a[l]; i l 1; j r + 1; 2 While (TRUE) 1 Repeat (i i + 1) until a[i] p; 2 Repeat (j j 1) until a[j] p; 3 If (i < j) vertausche a[i] a[j]; 4 else return j; AUSGABE: j mit a[l],..., a[j] p und p a[j + 1],..., a[r]. Korrektheit: a[l... i 1] enthält stets nur Elemente p. Teilarray a[j + 1... r] enthält stets nur Elemente p. Ein Abbruch der While-Schleife erfolgt für i j. Laufzeit: Wir benötigen maximal r l + 1 Vergleiche. D.h. die Anzahl der Vergleiche ist linear in der Intervallänge von a. DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 282 / 320

Eigenschaften von Quicksort Laufzeit: Im worst-case: T (n) = T (1) + T (n 1) + O(n) = O(n 2 ). Im best-case: T (n) = 2 T ( n 2 ) + O(n) = O(n log n). Im average-case: Man kann zeigen, dass T (n) = O(n log n) bei zufälliger Wahl des Pivotelements gilt. Vorteile: Die Konstanten in der O-Notation sind klein. QUICKSORT sortiert in place, d.h. QUICKSORT benötigt keinen zusätzlichen Speicherplatz. MERGESORT: Verwendung von zusätzlichem Array zum Mergen. QUICKSORT ist in der Praxis oft der schnellste Algorithmus. DiMa I - Vorlesung 23-13.01.2009 Divide and Conquer, Binäre Suche, Mergesort, Quicksort 283 / 320