Algorithmen und Datenstrukturen Kapitel 1 Algorithmen & Algorithmenanalyse

Ähnliche Dokumente
Übung Algorithmen und Datenstrukturen

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

2. Effizienz von Algorithmen

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

V. Claus, Juli 2005 Einführung in die Informatik II 45

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen I Grundlagen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Motivation. Formale Grundlagen der Informatik 1 Kapitel 10. Motivation. Motivation. Bisher haben wir mit TMs. Probleme gelöst/entschieden/berechnet.

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

Komplexität von Algorithmen:

Vorlesung Datenstrukturen

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Ordnen Sie die folgenden Funktionen nach ihrer asymptotischer Komplexität in aufsteigender Reihenfolge: i=1 4i + n = 4 n. i=1 i + 3n = 4 ( n(n+1)

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

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 3, Donnerstag 6.

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Algorithmen und Datenstrukturen

1. Asymptotische Notationen 2. Zahlentheoretische Algorithmen 3. Sortierverfahren 4. String Matching 5. Ausgewählte Datenstrukturen

1. Übung Algorithmen I

Notation für das asymptotische Verhalten von Funktionen

4. Sortieren 4.1 Vorbemerkungen

Datenstrukturen, Algorithmen und Programmierung 2

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

Algorithmen und Datenstrukturen

WS 2009/10. Diskrete Strukturen

2 Wachstumsverhalten von Funktionen

3.3 Laufzeit von Programmen

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

Kapitel 3 Zur Korrektheit und Effizienz von Algorithmen

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

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

Übung Algorithmen und Datenstrukturen

Übung zur Vorlesung Berechenbarkeit und Komplexität

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

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

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)

Datenstrukturen und Algorithmen

Abschnitt: Algorithmendesign und Laufzeitanalyse

Algorithmen und Datenstrukturen 1-1. Seminar -

Kapitel 3: Untere Schranken für algorithmische Probleme Gliederung

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

Algorithmik Kap. 2: Laufzeit von Algorithmen

Informatik I Komplexität von Algorithmen

Algorithmen und Datenstrukturen. Organisatorisches. Christian Komusiewicz Ernst-Abbe-Platz 2, R3315

F3 Berechenbarkeit und Komplexität

Komplexität von Algorithmen OOPM, Ralf Lämmel

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

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Heapsort

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

Aufgabe (Schreibtischtest, Algorithmenanalyse)

Algorithmen und Datenstrukturen (für ET/IT)

es gibt Probleme, die nicht berechenbar sind (z.b. Menge aller Funktionen N N und die Menge aller Sprachen sind überabzählbar)

2 Sortieren durch Vergleichen Eingabefolge a 1, a 2,..., a n 2, 1, 3 Sortieralg. Für festes n ist ein vergleichsbasierter Sortieralg. charakterisiert

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

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

Informatik II. Algorithmen und Datenstrukturen. Vorläufige Version 1 c 2002 Peter Thiemann

Informatik I Komplexität von Algorithmen

Kapitel 8 Fortgeschrittene Sortieralgorithmen

Algorithmen und Datenstrukturen Tutorium Übungsaufgaben

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

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

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

12 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

11. Elementare Datenstrukturen

Algorithmen und Datenstrukturen Kapitel 7 Dynamische Mengen, das Suchproblem &

3. Übungsblatt zu Algorithmen I im SoSe 2017

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

Algorithmen und Datenstrukturen

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

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Tutorium I

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

Datenstrukturen & Algorithmen

Informatik II, SS 2014

7. Übung zu Algorithmen I 1. Juni 2016

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

Komplexität von Algorithmen Musterlösungen zu ausgewählten Übungsaufgaben

P, NP und NP -Vollständigkeit

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

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Komplexität von Algorithmen

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

1 Minimumssuche k = n Maximumssuche n. Median

Transkript:

Algorithmen und Datenstrukturen Kapitel 1 Algorithmen & Frank Heitmann heitmann@informatik.uni-hamburg.de 14. Oktober 2015 Frank Heitmann heitmann@informatik.uni-hamburg.de 1/48

Der Sprung ins Wasser... Worum geht es bei Algorithmen und Datenstrukturen? Frank Heitmann heitmann@informatik.uni-hamburg.de 2/48

Und warum brauch ich das?! Was nützt das? Spaß! Grob abschätzen, ob etwas überhaupt möglich ist. Grob abschätzen, wie teuer etwas wird/werden kann. Lösungsvorschläge und deren Kosten verstehen. Lösungen selbst erarbeiten können! Abstrahieren! Frank Heitmann heitmann@informatik.uni-hamburg.de 3/48

Organisatorisches 1 Zur Vorlesung: Immer Mittwochs in Hörsaal A Chemie 0915-1045 Vorlesung mit Lecture2Go-Aufzeichnung 1045-1100 Pause 1100-1145 Wiederholung, Übung, Vertiefung,... Boxen für besonders Wichtiges / für Interessierte Das Buch zur Vorlesung: Cormen et al. Introduction to Algorithms, McGraw-Hill. Oder jedes andere Algorithmen-Buch (+Folien) Frank Heitmann heitmann@informatik.uni-hamburg.de 4/48

Organisatorisches 2 Zu den Übungsgruppen und Übungszetteln: Beginn diesen Mittwoch. Einige Besonderheiten: Gruppe 01 und 04 am ZBH in Raum 16 Gruppe 03 startet erst um 1240 Uhr (bis 1410) Gruppe 04 startet um 1400 Uhr (bis 1530) Neuen Aufgabenzettel alle zwei Wochen i.a. Mo-Mi Bearbeiten in 2er- oder 3er-Gruppen. Abgabe ca. zwei Wochen später am Montag bis 16 Uhr in die Abgabebox im 1. Stock von Haus C (vor C-201). Besprechung in den Übungen in der Woche. Alle Gruppenmitglieder müssen den eigenen Lösungsvorschlag präsentieren können. 50% der Punkte aller Zettel sind nötig. Frank Heitmann heitmann@informatik.uni-hamburg.de 5/48

Motivation Los... Frank Heitmann heitmann@informatik.uni-hamburg.de 6/48

Motivation Begriff: Datentyp & Datenstruktur Definition Ein Datentyp ist eine Menge von Werten (z.b. N) und Operationen darauf (z.b. +). Definition Bei einer Datenstruktur sind die Daten zusätzlich in bestimmter Weise angeordnet und in bestimmter Weise wird Zugriff und Verwaltung ermöglicht. (Beispiele: Array, Liste, Stack, Graph) Bemerkung Abstrakte Definition/Beschreibung/Darstellung erfolgt mittels Abstrakter Datentypen/Datenstrukturen (ADT). Dabei ist die Signatur die algebraische Spezifikation des Datentyps. Die Algebra wird als Datentyp zur Signatur bezeichnet. Frank Heitmann heitmann@informatik.uni-hamburg.de 7/48

Ein Problem... Motivation Folgendes Problem: Gegeben sei eine (lange) Liste mit Namen. Wir wollen herausfinden ob Max Mustermann auf der Liste steht. Wie machen wir das? Wie machen wir das algorithmisch? Und was ist noch mal ein Algorithmus? Frank Heitmann heitmann@informatik.uni-hamburg.de 8/48

Begriff: Algorithmus Motivation Definition Ein Algorithmus ist ein endlich und präsize beschriebenes Verfahren, das Eingabewerte in Ausgabewerte umwandelt. Es ist (i.a.) deterministisch und der Ausgang ist determiniert. Die einzelnen Schritte sind zudem elementar/atomar und effektiv ausführbar. Meist wird noch die Termination sowie die Korrektheit des Verfahrens verlangt (beides muss bewiesen werden!). I.A. soll ein Algorithmus ein Problem lösen. Eine Instanz ist dabei eine mögliche Eingabe (bspw. zwei Zahlen, die addiert werden sollen). Bemerkung Wir benutzen nachfolgend übliche Pseudocode-Bausteine und Konventionen. (for, while, Zuweisung, if-then, case,...) Frank Heitmann heitmann@informatik.uni-hamburg.de 9/48

... eine Lösung Motivation Algorithmus 1 Lineare Suche 1: for i = 0 to n do 2: if a[i] == max mustermann then 3: return true 4: end if 5: end for 6: return false Ist diese Lösung gut? Geht das besser? Frank Heitmann heitmann@informatik.uni-hamburg.de 10/48

und eine andere Lösung Motivation Algorithmus 2 Binäre Suche 1: while first last idx < 0 do 2: m = first + ((last first)/2) 3: if a[m] < p then 4: first = m + 1 5: else if a[m] > p then 6: last = m 1 7: else 8: idx = m 9: end if 10: end while 11: return idx Ist das besser? Welche Voraussetzungen haben wir hier? Frank Heitmann heitmann@informatik.uni-hamburg.de 11/48

Sortieren Motivation Definition (Das Sortierproblem) Eingabe: Eine Sequenz < a 1, a 2,..., a n > von n Zahlen. Gesucht: Eine Permutation < a 1, a 2,..., a n > der Eingabesequenz mit a 1 a 2... a n. Anmerkung Ob die Reihenfolge zweier Elemente a i, a j (i < j) mit a i = a j beibehalten werden soll oder nicht, ist nicht gesagt. Bleibt sie erhalten, d.h. ist a p = a i, a q = a j und p < q, so nennt man das Verfahren stabil. Ferner heißt ein Sortierverfahren in-place (oder in situ), wenn der zusätzlich benötigte Speicherbedarf unabhängig von der gegebenen Sequenz ist. Frank Heitmann heitmann@informatik.uni-hamburg.de 12/48

Bedeutung des Sortierens Motivation Daten zu Sortieren ist ein fundamentales Problem: Manchmal ist Sortieren das Wesen der Anwendung Sortieren als Vorstufe (z.b. für das Suchen) Sortieren als Unterroutine (z.b. Painter s Algorithm) Viele verschiedene (Algorithmen-)Techniken Beweisbarkeit einer nichttrivialen unteren Schranke Sortiert wird ständig: Musikliste nach Künstlern oder Titeln Ankommende Pakete über die Datenleitung... Frank Heitmann heitmann@informatik.uni-hamburg.de 13/48

Pause to Ponder... Motivation Wem fällt ein Brute-Force-Algorithmus zum Sortieren ein? Frank Heitmann heitmann@informatik.uni-hamburg.de 14/48

Motivation Sortieren mit Maximumbestimmung (MaxSort) Algorithmus 3 Sortieren mit Max 1: for i = n downto 1 do 2: idx = max(a) 3: B[i] = A[idx] 4: A[idx] = 0 5: end for 6: return B Frank Heitmann heitmann@informatik.uni-hamburg.de 15/48

Bestimmung des Maximums Motivation Algorithmus 4 Find Maximum 1: max = 1 2: for i = 2 to n do 3: if a[i] > a[max] then 4: max = i 5: end if 6: end for 7: return max; Frank Heitmann heitmann@informatik.uni-hamburg.de 16/48

InsertionSort: Die Idee Motivation Beim Sortieren durch Einfügen (InsertionSort) wird ähnlich wie beim Spielkarten sortieren vorgegangen: Starte mit der leeren linken Hand Nimm ein Karte und füge sie an der richtigen Position in der linken Hand ein. Dazu Vergleiche diese neue Karte von rechts nach links mit den Karten, die schon auf der linken Hand sind. Sobald eine kleinere Karte erreicht wird, füge ein. Zu jedem Zeitpunkt sind die Karten auf der linken Hand sortiert. Die Karten auf der linken Hand sind jeweils die obersten Karten des Haufens. Frank Heitmann heitmann@informatik.uni-hamburg.de 17/48

InsertionSort: Der Algorithmus Motivation Algorithmus 5 InsertionSort(A[1... n]) 1: for j = 2 to n do 2: key = A[j] 3: i = j 1 4: while i > 0 und A[i] > key do 5: A[i + 1] = A[i] 6: i = i 1 7: end while 8: A[i + 1] = key 9: end for Frank Heitmann heitmann@informatik.uni-hamburg.de 18/48

Zusammenfassung / Diskussion Motivation Wir kennen jetzt Lineares Suchen und binäres Suchen MaxSort und InsertionSort Aber: Ist ein Verfahren besser als ein anderes? Was messen wir? Frank Heitmann heitmann@informatik.uni-hamburg.de 19/48

Motivation Wir behandeln nachfolgend Zeit- und Platzkomplexität. Eine (elementare) Anweisung zählt dabei als eine Zeiteinheit. Eine benutzte (elemantare) Variable als eine Platzeinheit. Zeit- und Platzbedarf wird abhängig von der Länge n der Eingabe gezählt. Wir arbeiten hierfür mit Funktionen f : N N bzw. f : N R. Frank Heitmann heitmann@informatik.uni-hamburg.de 20/48

... Algorithmus 6 Lineare Suche 1: for i = 0 to n do 2: if a[i] == max mustermann then 3: return true 4: end if 5: end for 6: return false Wir behandeln nachfolgend Zeit- und Platzkomplexität (im uniformen Maß). Eine (elementare) Anweisung zählt dabei als eine Zeiteinheit. Eine benutzte (elemantare) Variable als eine Platzeinheit. Zeit- und Platzbedarf wird abhängig von der Länge n der Eingabe gezählt. Wir arbeiten hierfür mit Funktionen f : N R. Frank Heitmann heitmann@informatik.uni-hamburg.de 21/48

- Motivation Wir werden nachfolgend konstante Faktoren ignorieren. Diese verschwinden in der (auch Landau-Notation). Konzentration auf das wesentliche. Abstrahiert von verschiedenen Rechnerarchitekturen. Guter Vergleich von Algorithmen möglich (praxisbewährt). Ferner werden wir anfängliche Schwankungen ignorieren können. ABER: 5 n und 5000 n wird als im Prinzip gleich angesehen werden! Frank Heitmann heitmann@informatik.uni-hamburg.de 22/48

Beware... Anmerkung Der Sinn der zur Analyse der Laufzeit und des Speicherbedarfs von Algorithmen wird später klarer. Gleich folgen erstmal Definitionen und Beispiele dazu, bevor die Anwendung auf Algorithmen folgt. Frank Heitmann heitmann@informatik.uni-hamburg.de 23/48

- Definition Definition ( (und Verwandte)) O(g(n)) = {f c R + n 0 N n n 0 : f (n) c g(n) } Ω(g(n)) = {f c R + n 0 N n n 0 : f (n) c g(n) } o(g(n)) = {f c R + n 0 N n n 0 : f (n) c g(n) } ω(g(n)) = {f c R + n 0 N n n 0 : f (n) c g(n) } Θ(g(n)) = {f c 1, c 2 R + n 0 N n n 0 : c 1 g(n) f (n) c 2 g(n) } Bemerkung f ist dabei stets eine Funktion von N nach R, also f : N R. (Daher überall die Betragsstriche!) In der Literatur gibt es hier Varianten. Bei der tatsächlichen machen diese aber kaum einen Unterschied. Frank Heitmann heitmann@informatik.uni-hamburg.de 24/48

Wichtige Funktionen Bemerkung Wichtige Funktionen in der Algorithmik/: Konstante Funktionen Logarithmen (log, ln) Wurzelfunktionen ( n) Polynome (beachte: n = n 1/2 ) Exponentialfunktionen (2 n )... Kombinationen davon In welchem Zusammenhang stehen diese bzgl. der? ( Hausaufgabe!) Frank Heitmann heitmann@informatik.uni-hamburg.de 25/48

Zum Logarithmus Bemerkung Mit log werden wir stets eine Variante des Logarithmus zur Basis 2 meinen, nämlich: { 1, falls n 1 log(n) := log 2 (n) + 1, sonst. Damit ist log(n) die Länge der Binärdarstellung einer natürlichen Zahl n. (Die Anzahl von Speicherstellen/Schritten ist stets eine natürliche Zahl!) Andere Logarithmen werden nur selten benötigt und sind bis auf einen konstanten Faktor ohnehin gleich. Die Rechengesetze wie z.b. log(x y) = log(x) + log(y) und log(x r ) = r log(x) sind oft hilfreich. Frank Heitmann heitmann@informatik.uni-hamburg.de 26/48

- Beispiele I Definition (Θ - Wiederholung) Θ(g(n)) = {f c 1, c 2 R + n 0 N n n 0 : c 1 g(n) f (n) c 2 g(n)} Beispiel Wir wollen 1 2 n2 3n Θ(n 2 ) zeigen. Wir suchen also Konstanten c 1, c 2, n 0, so dass c 1 n 2 1 2 n2 3n c 2 n 2 für alle n n 0 erfüllt ist. Teilen durch n 2 führt zu c 1 1 2 3 n c 2. Dies kann man z.b. mit c 1 = 2 8, c 2 = 1, n 0 = 24 erfüllen. Frank Heitmann heitmann@informatik.uni-hamburg.de 27/48

- Variante Satz 1 f (n) O(g(n)) lim n f (n) g(n) < 2 f (n) o(g(n)) lim n f (n) g(n) = 0 3 f (n) Ω(g(n)) lim n f (n) g(n) > 0 4 f (n) ω(g(n)) lim n f (n) g(n) = Bemerkung Mit obigen Äquivalenzen und mit Kenntnissen der Limesbildung sind einige der unten folgenden Sätze schnell zu zeigen (und evtl. schneller als mit der obigen, ursprünglichen Definition). Frank Heitmann heitmann@informatik.uni-hamburg.de 28/48

- Beispiele II Satz / Definition f (n) O(g(n)) lim n f (n) g(n) < Beispiel Wir wollen 1 2 n2 3n O(n 2 ) zeigen. 1/2n 2 3n 1 lim n n 2 = lim n 2 3 n = 1 2 Ähnlich zeigt man 1 2 n2 3n Ω(n 2 ) woraus das gleiche Ergebnis wie oben folgt, wie wir gleich sehen werden. Frank Heitmann heitmann@informatik.uni-hamburg.de 29/48

Merkhilfe Bemerkung Eine kleine Merkhilfe (nicht mehr!) f O(g) f g f Ω(g) f g f Θ(g) f = g f o(g) f < g f ω(g) f > g Wir sagen, dass f asymptotisch kleiner gleich, größer gleich, gleich, kleiner bzw. größer ist als g, wenn f O(g), f Ω(g), f Θ(g), f o(g) bzw. f ω(g) gilt. Frank Heitmann heitmann@informatik.uni-hamburg.de 30/48

Wichtige Eigenschaften Satz 1 f X (g) und g X (h) impliziert f X (h) (X {O, Ω, Θ, o, ω}) 2 f X (f ) (X {O, Ω, Θ}) 3 f Θ(g) g Θ(f ) Beweis (für 1. und X = O) Sei f O(g) und g O(h), dann gibt es c, n 0, so dass f (n) c g(n) n n 0 und ebenso c, n 0, so dass g(n ) c h(n ) n n 0. Sei nun n 0 = max(n 0, n 0 ). Dann gelten n n 0 beide Ungleichungen und für diese n gilt dann f (n ) c g(n) c c h(n ) also f (n ) c c h(n ) und da c c eine Konstante ist, folgt f O(h). Frank Heitmann heitmann@informatik.uni-hamburg.de 31/48

Weitere wichtige Eigenschaften Satz 1 g O(f ) f Ω(g) 2 g o(f ) f ω(g) 3 g Θ(f ) g O(f ) Ω(f ) 4 o(f ) O(f ) 5 ω(f ) Ω(f ) 6 ω(f ) o(f ) =? 7 Ω(f ) O(f ) =? Beweis (für 4.) f (n) Sei g o(f ), dann gilt lim n g(n) = 0. Um g O(f ) zu zeigen, f (n) muss lim n g(n) = c für eine Konstante c gezeigt werden. Mit c = 0 folgt dies sofort. Frank Heitmann heitmann@informatik.uni-hamburg.de 32/48

Noch mehr wichtige Eigenschaften Satz 1 f, g O(h) f + g O(h) 2 f O(g), c R + c f O(g) 3 f O(h 1 ), g O(h 2 ) f g O(h 1 h 2 ) Beweis (für 3.) Sei f O(h 1 ) und g O(h 2 ), dann gibt es c, n 0, so dass f (n) c h 1 (n) n n 0 und ebenso c, n 0, so dass g(n ) c h 2 (n ) n n 0. Daraus folgt f (n ) g(n ) c c h 1 (n ) h 2 (n ) n max(n 0, n 0 ), also f g O(h 1 h 2 ). Frank Heitmann heitmann@informatik.uni-hamburg.de 33/48

Zur Übung Zur Übung Formaler Nachweis der obigen Eigenschaften (übt das Formale). Sei g eine unserer üblichen Funktionen. Man überlege sich für jedes X {O, Ω, Θ, o, ω} ein f mit f X (g) (baut Intuition auf). Frank Heitmann heitmann@informatik.uni-hamburg.de 34/48

Algorithmus 1: Lineare Suche Algorithmus 7 Algorithmus 1 1: for i = 0 to n do 2: if a[i] == max mustermann then 3: return true 4: end if 5: end for 6: return false Analyse Laufzeit ist linear in der Länge n des Arrays, d.h. in O(n) oder genauer sogar in Θ(n). (Korrektheit ist noch zu zeigen. Dazu später mehr...) Frank Heitmann heitmann@informatik.uni-hamburg.de 35/48

Algorithmus 2: Fakultät Algorithmus 8 fac(n) 1: res = 1 2: for i = 1 to n do 3: res = res i 4: end for 5: return res Analyse Die Laufzeit ist in O(n). Aber Achtung! Dies ist exponentiell in der Größe der Eingabe! Diese ist nämlich nur in O(log n). Frank Heitmann heitmann@informatik.uni-hamburg.de 36/48

Vorgehen Vorgehen, wenn wir einen Algorithmus analysieren: 1 Überlegen bzgl. welcher Kenngröße der Eingabe wir messen wollen. Diese kann sich von der Größe der Eingabe unterscheiden! (Beispiel: Anzahl Knoten eines Graphen). 2 Laufzeit/Speicherbedarf bzgl. dieser Kenngröße ausdrücken. 3 Nochmal überlegen, ob dies die Aussage des Ergebnisses verfälscht (so wie bei der Fakultätsberechnung eben). I.A. sollte sich die eigentliche Eingabegröße leicht durch die Kenngröße ausdrücken lassen und der Unterschied sollte nicht zu groß sein. + Beim Graphen mit n Knoten ist die Adjazenmatrix in O(n 2 ). Ist eine Zahl n die Eingabe, so ist die Eingabegröße in O(log n). Eine Laufzeit von O(n) wäre also exponentiell in der Eingabe! Frank Heitmann heitmann@informatik.uni-hamburg.de 37/48

Algorithmus 3: Bestimmung des Maximums Algorithmus 9 Find Maximum 1: max = 1 2: for i = 2 to n do 3: if a[i] > a[max] then 4: max = i 5: end if 6: end for 7: return max; Analyse Laufzeit ist linear in der Länge n des Arrays, d.h. in O(n) oder genauer sogar in Θ(n). Frank Heitmann heitmann@informatik.uni-hamburg.de 38/48

Algorithmus 4: MaxSort Algorithmus 10 Sortieren mit Max 1: for i = n downto 1 do 2: idx = max(a) 3: B[i] = A[idx] 4: A[idx] = 0 5: end for 6: return B Laufzeit ist in O(n 2 ). Frank Heitmann heitmann@informatik.uni-hamburg.de 39/48

Algorithmus 5: InsertionSort Algorithmus 11 InsertionSort(A[1... n]) 1: for j = 2 to n do 2: key = A[j] 3: i = j 1 4: while i > 0 und A[i] > key do 5: A[i + 1] = A[i] 6: i = i 1 7: end while 8: A[i + 1] = key 9: end for Laufzeit ist ebenfalls in O(n 2 ). Frank Heitmann heitmann@informatik.uni-hamburg.de 40/48

Algorithmus 6: Binäre Suche Algorithmus 12 Binäre Suche 1: while first last idx < 0 do 2: m = first + ((last first)/2) 3: if a[m] < p then 4: first = m + 1 5: else if a[m] > p then 6: last = m 1 7: else 8: idx = m 9: end if 10: end while 11: return idx Laufzeit ist in O(log n). Frank Heitmann heitmann@informatik.uni-hamburg.de 41/48

Algorithmus 7: Brute-Force-Algorithmen Das Mengenpartitionsproblem Gegeben sei eine Menge S N. Gesucht ist eine Menge A S, so dass x A x = x A x gilt. Algorithmus 13 Suchraum durchsuchen 1: for all A S do 2: if x A x = x A x then 3: return true 4: end if 5: end for 6: return false Laufzeit ist in O(2 S ). Frank Heitmann heitmann@informatik.uni-hamburg.de 42/48

Eine kleine Warnung zum Schluss Wichtige Anmerkung Die verschluckt Konstanten. Wenn die zu gross/klein sind, dann kann dies das Ergebnis verfälschen! In dem Fall ist dann eine genauere Analyse (ohne ) nötig. I.A. hat sich die aber bewährt, weil Extreme wie 10 6 n und 10 10 2 n in der Praxis kaum vorkommen. Kurz: O(2 n ) ist nicht zwingend immer schlimmer als O(n) aber auf lange Sicht (d.h. bei wachsenden Eingabelängen) auf jeden Fall und im Allgemeinen (und bei allem, was einem so i.a. in der Praxis begegnet) ist O(2 n ) eben doch schlimmer als O(n). Frank Heitmann heitmann@informatik.uni-hamburg.de 43/48

Sequentielle Algorithmen - Zusammenfassung Ein paar Merkregeln für die bisherigen Laufzeiten: Konstant - Selten. Es wird nicht mal die ganze Eingabe betrachtet! - Aber Grundoperationen kosten nur konstant viel! Logarithmisch - Bei wiederholten Halbierungen oder wenn man mit der Höhe eines Baumes arbeitet. Lineare Laufzeiten, wenn man sich jedes Element der Eingabe einmal (oder: eine konstante Anzahl von Malen) ansieht. Quadratisch - jedes Element mit jedem anderen vergleichen. Höhere Polynome -? Exponentiell - wenn man jede Möglichkeit durchprobiert. Frank Heitmann heitmann@informatik.uni-hamburg.de 44/48

Zusammenfassung Begriffe: Datentyp, Datenstruktur, Algorithmus Zeit- und Platzkomplexität ( gute Algorithmen), wobei wir das uniforme Kostenmaß nutzen (jeder (elementare) Schritt eine Zeiteinheit, jede (elementare) Variable eine Platzeinheit) Zwei Definitionen für die (und Verwandte) Wichtige Eigenschaften der Wichtige Funktionen und ihre Klassifizierung bzgl. der Lineares Suchen und Binäres Suchen MaxSort und InsertionSort Frank Heitmann heitmann@informatik.uni-hamburg.de 45/48

Themen der Vorlesung Thema 2 Wir untersuchen den Zeit- und Platzbedarf von Algorithmen, wobei wir das uniforme Kostenmaß nutzen (jeder (elementare) Schritt eine Zeiteinheit, jede (elementare) Variable eine Platzeinheit). Zeit- und Platzbedarf wird abhängig von der Länge n der Eingabe gezählt. Hierzu nutzen wir Funktionen f : N N, bzw. f : N R. Thema 1 & 3 Weitere (Ober-)Themen der Vorlesung sind bekannte Algorithmen für Probleme lesen, verstehen und anwenden zu können, sowie neue Algorithmen entwerfen, deren Korrektheit beweisen und ihre Laufzeit analysieren zu können. Frank Heitmann heitmann@informatik.uni-hamburg.de 46/48

Ausblick: Eine andere Art von Algorithmen Algorithmus 14 fac(n) 1: if n == 0 then 2: return 1 3: else 4: return n fac(n 1) 5: end if Dies ist ein rekursiver Algorithmus... unsere bisherigen Techniken sind hier bei der Analyse wenig hilfreich. Frank Heitmann heitmann@informatik.uni-hamburg.de 47/48

Ausblick Nächstes Mal: Rekurrenzgleichungen Korrektheit von Algorithmen Dabei: Weiteres zu Suchen und Sortieren Datenstrukturen Frank Heitmann heitmann@informatik.uni-hamburg.de 48/48