Algorithmen & Komplexität

Ähnliche Dokumente
Definition Ein gerichteter Graph G = (V, E) ist ein Graph von geordneten Paaren (u, v) mit u V und v V.

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

JAVA - Suchen - Sortieren

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

9. Übung Algorithmen I

1 topologisches Sortieren

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Abschnitt: Algorithmendesign und Laufzeitanalyse

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

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

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

Klausur Algorithmen und Datenstrukturen

3. Musterlösung. Problem 1: Boruvka MST

Vorlesung Datenstrukturen

Algorithmen und Datenstrukturen 2

Datenstrukturen & Algorithmen

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

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

Randomisierte Algorithmen 2. Erste Beispiele

Algorithmen und Datenstrukturen

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

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

13. Binäre Suchbäume

Graphen: Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen 1-1. Seminar -

Breiten- und Tiefensuche in Graphen

Erinnerung VL

8 Diskrete Optimierung

Kapitel 9 Suchalgorithmen

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

11.1 Grundlagen - Denitionen

Programmieren I. Kapitel 7. Sortieren und Suchen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer

Datenstrukturen und Algorithmen

Ein Graph ist ein Paar (V,E), wobei V eine Menge von Knoten und E eine Menge von Kanten (v,w) mit v,w in V ist.

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

11. Übungsblatt zu Algorithmen I im SS 2010

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Algorithmen II Vorlesung am

Datenstrukturen und Algorithmen

Ein Algorithmus heißt rekursiv, wenn er sich selbst aufruft. Meist werden nur einzelne Module eines Gesamtalgorithmus rekursiv verwendet.

Gliederung. Definition Wichtige Aussagen und Sätze Algorithmen zum Finden von Starken Zusammenhangskomponenten

Einführung in die Informatik 2

Algorithmen und Datenstrukturen 2

MafI I: Logik & Diskrete Mathematik (F. Hoffmann)

Programmiertechnik II

DATENSTRUKTUREN UND ALGORITHMEN

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

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

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

Einstieg in die Informatik mit Java

ADS: Algorithmen und Datenstrukturen 2

4 Greedy-Algorithmen (gierige Algorithmen)

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

Asymptotische Laufzeitanalyse: Beispiel

Kapitel 3: Untere Schranken für algorithmische Probleme Gliederung

Grundlagen der Programmierung

Algorithmen und Datenstrukturen (für ET/IT)

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

Randomisierte Algorithmen

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

Datenstrukturen und Algorithmen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Algorithmen und Datenstrukturen Kapitel 7 Dynamische Mengen, das Suchproblem &

Sortierverfahren für Felder (Listen)

Algorithmen und Datenstrukturen (WS 2007/08) 63

Ü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:

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

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

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

Überblick. Lineares Suchen

κ(k) k K S Algorithmus zur Bestimmung eines spannenden Baumes mit minimalen Kosten (Kruskal, 1965).

14. Rot-Schwarz-Bäume

Suchen und Sortieren (Die klassischen Algorithmen)

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

Beispiellösung zur Prüfung Datenstrukturen und Algorithmen D-INFK

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

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

2. Übungsblatt zu Algorithmen II im WS 2016/2017

Klausur Datenstrukturen und Algorithmen SoSe 2012

Informatik I 4. Kapitel Suchen in sequentiellen Listen

Grundlagen der Programmierung 2. Sortierverfahren

Teil XII. Datenstrukturen: Bäume, Stacks und Queues. Scientific Computing in Computer Science, Technische Universität München

Polygontriangulierung

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

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm

Uninformierte Suche in Java Informierte Suchverfahren

Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 3: Minimal aufspannende Bäume und Matroide

Die Komplexitätsklassen P und NP

Branch-and-Bound. Wir betrachten allgemein Probleme, deren Suchraum durch Bäume dargestellt werden kann. Innerhalb des Suchraums suchen wir

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Kapitel 6 Elementare Sortieralgorithmen

Transkript:

Algorithmen & Komplexität Angelika Steger Institut für Theoretische Informatik steger@inf.ethz.ch

Breitensuche, Tiefensuche Wir besprechen nun zwei grundlegende Verfahren, alle Knoten eines Graphen zu durchlaufen Breitensuche ( breadth first search, BFS) Tiefensuche ( depth first search, DFS) wichtige Bausteine von fortgeschrittenen Graphenalgorithmen

BFS

BFS

BFS

BFS

BFS

BFS

BFS

BFS

BFS

BFS

BFS

BFS

Datenstruktur Queue Queue (dt. Warteschlange) FIFO ( first in first out ) Queue Q 5 7 1 9 Q.Dequeue() Q.Insert(v)..

Breitensuche Input: Graph G=(V,E), Startknoten s V Output: Felder d[v], pred[v] für v V Setze d[v] =, pred[v] = nil v V ( unbesucht ) d[s] = 0 Q.Insert(s) while not Q.IsEmpty() v Q.Dequeue() for all u (v) if d[u]= then d[u] = d[v]+1 pred[u] = v Q.Insert(u) end if end for

Breitensuche - Beispiel Init Startknoten: s=1 d[1] = d[2] = d[3] = d[4] = d[5] = d[6] = d[1] = d[2] = d[3] = d[4] = d[5] = d[6] = 1 2 3 4 5 6 d[1] = d[2] = d[3] = d[4] = d[5] = d[6] = Q=(1) d[1] = d[2] = d[3] = d[4] = d[5] = d[6] = Q=(2,4) d[1] = d[2] = d[3] = d[4] = d[5] = d[6] = Q=(4,3,5) Q=(3,5) Q=(5,6)

Breitensuche Satz: G=(V,E), gegeben als Adjazenzlisten, Startknoten s. Dann gilt: Die Breitensuche hat eine Laufzeit von O( V + E ). d[v] ist die Länge eines kürzesten s-v-pfades bzw. d[v]=, wenn kein solcher existiert. Falls G zusammenhängend, bilden die Kanten { {v,pred[v]} v V\s } einen Spannbaum T von G, mit der Eigenschaft, dass für alle v V der eindeutige s-v-pfad in T ein kürzester s-v-pfad in G ist.

Breitensuche und Zusammenhang Am Ende der BFS: {v V d[v] < } bilden Zusammenhangskomponente. Weitere Komponenten: Iterativ mit neuen Startknoten. Laufzeit: O( V + E )

Tiefensuche Beispiel

DFS

DFS

DFS

DFS

DFS

DFS

DFS

DFS

DFS

DFS

DFS

DFS

Datenstruktur Stack (Keller) LIFO - Queue ( last in first out ) Operationen: Push(v) und Pop() für DFS 5 4 3 2 1 Stack Last in, first out F.L. Bauer, K. Samelson: Verfahren zur automatischen Verarbeitung von kodierten Daten und Rechenmaschine zur Ausübung des Verfahrens, Deutsches Patentamt, Auslegeschrift 1094019, B441221X/42m, 1957. IEEE Computer Pioneer Award (1988) Für die Erfindung des Kellerprinzips

Tiefensuche Input: Graph G=(V,E), Startknoten s V Output: Feld pred[v] für v V Setze pred[v] = nil für alle v V ( unbesucht ) v = s repeat if ( u (v) mit pred[u]=nil) then Stack.Push(v) pred[u]=v v = u else if not Stack.IsEmpty() v = Stack.Pop() else v = nil end if until v = nil

Tiefensuche Satz: G=(V,E), gegeben als Adjazenzlisten, Startknoten s. Dann gilt: Die Tiefensuche hat eine Laufzeit von O( V + E ). Falls G zusammenhängend, bilden die Kanten { {v,pred[v]} v V\s } einen Spannbaum von G. Bemerkung: Diverse Modifikationen von DFS zur Lösung anderer Graphenprobleme.

Kapitel 2 Weitere Beispiele Effizienter Algorithmen

Sequentielle Suche Gegeben: Array a[1..n] Suche in a nach Element x Ohne weitere Zusatzinformationen: Sequentielle Suche a[1] a[2] a[3] Laufzeit: n Schritte im worst-case a[n-1] a[n]

Binäre Suche Angenommen: Array a ist sortiert a[1] a[2] a[n/2] Vergleiche x mit a[n/2] x a[n/2] x liegt in a[1..n/2] a[n-1] a[n] x a[n/2] x liegt in a[n/2..n]

Binäre Suche Rekursive Programmierung: function binarysearch (a,x,l,r) if (r = l) if (x = a[l]) return l else return not found mid = floor((l+r)/2) if (x a[mid]) binarysearch(a, x, l, mid) else binarysearch(a, x, mid+1, r)

Satz: Für die maximale Anzahl Vergleiche für die binäre Suche in a[1..n] gilt B n = B + 1 für n 2, und B 1 =1 n/2 Die Lösung dieser Rekursion lautet B n = log 2 n + 1 Beweis: Laufzeit Binäre Suche Beide Hälften von a[1..n] sind höchstens n/2 gross Es gilt die Monotonie: B m B n m n Induktiv gilt B 2 k = k + 1 = log 2 (2 k ) +1, und zusammen mit der Monotonie folgt die Behauptung.

Anzahl Vergleiche bei Binärer Suche Für asymptotische Analyse: Laufzeit von Binärer Suche ist O(log n)

2.2 Sortieralgorithmen Gegeben: Zahlen a 1,,a n ; Aufgabe: Sortiere sie! Bemerkungen: Wir schätzen statt der Laufzeit meist die Anzahl der benötigten Vergleiche zwischen Elementen der Eingabe ab. Wichtig: Wir zählen hier wirklich nur die Anzahl Vergleiche zwischen Elementen der Eingabe (so genannte Schlüsselvergleiche) und nicht Vergleiche der Form i n, die bspw. benötigt werden, um festzustellen, ob eine Laufvariable die vorgegebene Grösse eines Feldes überschreitet.

MergeSort - Beispiel 2 7 14 15 18 21 24 32 7 14 18 21 2 15 24 32 14 21 7 18 2 32 15 24

MergeSort - Analyse C n := Anzahl (Schlüssel-)Vergleiche, die MergeSort höchstens durchführt, wenn ein Feld der Grösse n sortiert wird n = 2 k : C 1 = 0 C 2 k = 2 C 2 k-1 + 2 2 k-1 1

MergeSort Analyse (2) n = 2 k : C 1 = 0 C 2 k = 2 C 2 k-1 + 2 2 k-1 1 2 C 2 k-1 + 2 k 2 (2 C 2 k-2 + 2 k-1 ) + 2 k. 2 k C 1 + k 2 k = k 2 k n beliebig: C n C 2 log 2 n log 2 n 2 log 2n 2n (log 2 n +1)

MergeSort Analyse (3) Satz: Um ein Feld der Grösse n zu sortieren genügen 2n (log 2 n +1) Vergleiche bzw. Laufzeit O(n log 2 n) = O(n log(n)). Bemerkung: Genauere Analyse zeigt, dass sogar C n n log 2 n +2 n gilt.

QuickSort - Beispiel 4 5 2 3 19 1 7 2 3 1 7 19 5 Zahlen kleiner als 4 Zahlen grösser als 4 Wähle erstes Element und teile übrige Elemente in kleiner und grösser auf Wende analoges Verfahren auf die beiden Teile an

QuickSort Wir testen unseren Algorithmus an einer realen Aufgabe. Dazu bitten wir einen Mathematiker uns 500.000 Zahlen in einer beliebigen, von ihm/ihr gewählten Reihenfolge zu liefern. M. liefert uns die Zahlen 1, 2, 3, 4, 5,, 499.999, 500.000 QuickSort rechnet und rechnet und rechnet und rechnet und rechnet und rechnet und stürzt ab.

Was ist passiert? Idee des QuickSort-Algorithmus: Die zu sortierenden Elemente werden in jedem Schritt in zwei etwa gleich große Mengen aufgeteilt: für Testeingabe gilt aber 4 1 21 5 2 2 3 3 7 1 6 3 4 4 5 19 5 47 1 6 7 19 3 25

QuickSort - Analyse C n := Anzahl (Schlüssel-)Vergleiche, die QuickSort höchstens durchführt, wenn ein Feld der Grösse n sortiert wird C n = max 0 k<n ( n-1 + C k + C n-k-1 ) Und somit: C n n-1 + C n-1 (n-1) + (n-2) + C n-2 (n-1) + (n-2) + + 1 + C 1 = ½ n(n-1)

QuickSort Analyse (2) Satz: Um ein Feld der Grösse n zu sortieren benötigt QuickSort im schlimmsten Fall ½ n(n-1) Vergleiche bzw. Laufzeit Θ(n 2 ). Bemerkung: Trotzdem gilt QuickSort als ein (in der Praxis und leicht abgewandelt) als sehr effizientes Sortierverfahren. Mathematisch exakt kann man dies begründen indem man die erwartete Laufzeit betrachtet, wobei der Erwartungswert über alle n! Reihenfolgen der Zahlen 1,,n gebildet wird. Man erhält: erwartete Laufzeit = O(n log n)

Sortieren Untere Schranken Satz: Jeder Algorithmus, der n Elemente mit Hilfe von if -Abfragen sortiert, benötigt mindestens Θ(n log n) Vergleiche. Beweisidee: Gegenspieler-Beweis