Algorithmen und Datenstrukturen

Ähnliche Dokumente
Was bisher geschah Modellierung von Daten durch Mengen Beziehungen (Zusammenhänge und Eigenschaften) durch Relationen, Graphen und Funktionen

Übung Algorithmen und Datenstrukturen

Abschnitt 7: Komplexität von imperativen Programmen

Algorithmen und Datenstrukturen Effizienz und Funktionenklassen

Vorlesung Datenstrukturen

Algorithmen und Datenstrukturen (für ET/IT)

Übung zur Vorlesung Berechenbarkeit und Komplexität

Asymptotik und Laufzeitanalyse

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

Programmieren und Problemlösen

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

2. Algorithmen und Algorithmisierung Algorithmen und Algorithmisierung von Aufgaben

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Prof. Dr. Margarita Esponda

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

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

3.3 Laufzeit von Programmen

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

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

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmen und Datenstrukturen I Grundlagen

Übung Algorithmen und Datenstrukturen

2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017

Komplexität von Algorithmen

Achtung: Groß O definiert keine totale Ordnungsrelation auf der Menge aller Funktionen! Beweis: Es gibt positive Funktionen f und g so, dass

A6.1 Logarithmus. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. A6.1 Logarithmus. A6.2 Landau-Notation. A6.

Datenstrukturen & Algorithmen

Kapitel 1 Einleitung. Definition: Algorithmus nach M. Broy: aus: Informatik: Eine grundlegende Einführung, Band 1, Springer-Verlag, Berlin

Algorithmen und Datenstrukturen

1.3 Erinnerung: Mergesort

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

5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Algorithmen und Datenstrukturen 1 Kapitel 5

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

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

2. Algorithmenbegriff

2. Effizienz von Algorithmen

QuickSort ist ein Sortieralgorithmus, der auf der Idee des Teile & Beherrsche beruht, und das gegebene Array an Ort und Stelle (in place) sortiert

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

Einführung in die Programmierung

Einführung in die Programmierung Wintersemester 2016/17

11. Rekursion, Komplexität von Algorithmen

Einführung in die Programmierung

Algorithmenbegriff: Berechenbarkeit. Algorithmenanalyse. (Berechnung der Komplexität)

Informatik I Komplexität von Algorithmen

Grundlagen: Algorithmen und Datenstrukturen

WS 2009/10. Diskrete Strukturen

abgeschlossen unter,,,, R,

Kapitel 1: Einleitung. Gliederung. Zum Begriff Informatik Zum Begriff Algorithmus Zum Begriff Programmieren

Komplexität von Algorithmen:

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen & Komplexität

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

Übungen zu Algorithmentechnik WS 09/10

Grundlagen der Programmierung

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

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

7. Sortieren Lernziele. 7. Sortieren

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

Algorithmen und Datenstrukturen

Informatik I Komplexität von Algorithmen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

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

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

Inhalt. 1. Einführung in die Informatik. 2. Algorithmen Definition, Eigenschaften, Entwurf Darstellung von Algorithmen Beispiele.

Algorithmen und Datenstrukturen 1. EINLEITUNG. Algorithmen und Datenstrukturen - Ma5hias Thimm 1

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

Auswählen nach Rang (Selektion)

Einführung in die Informatik Algorithmen und Datenstrukturen. Thema 17 Sortieren

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

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Einführung in die Informatik I

Suchen und Sortieren

Datenstrukturen, Algorithmen und Programmierung 2

Überblick. 1 Vorbemerkungen. 2 Algorithmen. 3 Eigenschaften von Algorithmen. 4 Historischer Überblick. Einführung

Algorithmen und Datenstrukturen Heapsort

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Algorithmen und Datenstrukturen (für ET/IT)

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

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

Algorithmen und Datenstrukturen

Algorithmik Übung 2 Prof. Dr. Heiner Klocke Winter 11/

Transkript:

Algorithmen und Datenstrukturen Prof. Dr. Sibylle Schwarz Westsächsische Hochschule Zwickau Dr. Friedrichs-Ring 2a, RII 263 http://www.fh-zwickau.de/~sibsc/ sibylle.schwarz@fh-zwickau.de SS 2013 1

Algorithmen Beispiel ggt (einfacher) Euklidischer Algorithmus zur Bestimmung des ggt zweier natürlicher Zahlen Algorithmus : Größter gemeinsamer Teiler Eingabe : a N, b N Ausgabe : ggt(a, b) solange a b : wenn a > b dann a a b sonst b b a Rückgabe a 2

Algorithmus endlich beschriebene schrittweise ausgeführte Arbeitsvorschrift zur Lösung eines Berechnungsproblemes, d.h. zur Transformation einer Eingabe in eine Ausgabe 3

Beispiele für Algorithmen historisch (Mathematik): Euklidischer Algorithmus Sieb des Erathostenes schriftliche Addition, Multiplikation usw. Gauß-Algorithmus im Alltag: Suchen eines Wörterbucheintrages Bauanleitung Kochrezept Orchester-Partitur in der Informatik: Programm-Quelltext Programm-Ablaufplan, Struktogramm Suchverfahren Sortierverfahren 4

Algorithmen und Datenstrukturen Informatik Wissenschaft von der Darstellung und Verarbeitung symbolischer Information Darstellung der Information als (strukturierte) Daten Verarbeitung der Information durch Algorithmen 5

Abstraktionsstufen Abstrakter DT Mathematik: Funktion (konkreter) DT algebraische Struktur Algorithmus Datenstruktur Implementierung: Funktion, Methode Typ, Klasse 6

Einordnung in die Informatik Teilgebiete der Informatik: theoretisch technisch Formalismen zur Darstellung von Daten und Algorithmen Möglichkeiten und Grenzen der Berechenbarkeit durch Algorithmen Grundlagen für technische und praktische (und angewandte) Informatik maschinelle Darstellung von Information Mittel zur Ausführung von Algorithmen praktisch Modellierung (Datenstrukturen) Entwurf von Algorithmen Programmierung, Softwaretechnik angewandt Modellierung durch geeignete Datenstrukturen Anwendung von Algorithmen (z.b. Suchen, Sortieren,... ) 7

Inhalt der Lehrveranstaltung Algorithmen Spezifikation Laufzeitabschätzungen rekursive Algorithmen Beispiele, z.b. Sortieralgorithmen abstrakte Datentypen mit häufigen Operationen: Mengen Folgen Zuordnungen (Wörterbücher) Relationen Datenstrukturen zu deren Realisierung: lineare Datenstrukturen (Listen, Stack, Queue, Hash-Tabellen) hierarchische Datenstrukturen (Bäume, Heaps) Graphen Algorithmen auf Graphen Pattern-Matching-Algorithmen 8

Literatur Cormen, Leiserson, Rivest, Stein: Algorithmen - Eine Einführung (Oldenbourg, 2007) Güting, Dieker: Datenstrukturen und Algorithmen (Teubner, 2004) Solymosi, Grude: Grundkurs Algorithmen und Datenstrukturen : eine Einführung in die praktische Informatik mit Java (Vieweg, 2000) Preiss: Data Structures and Algorithms with Object-Oriented Design Patterns in Java (Online-Version unter http://www.brpreiss.com/books/opus5/) 9

Organisation http://www.fh-zwickau.de/~sibsc/lehre/ss13/ad Montag 11:20-12:50 in R304 Vorlesung Donnerstag Z1 15:05-16:35 in R308 Hausaufgaben schriftliche Aufgaben (Prüfungsvorbereitung) Vorbereitung des Praktikums (Entwurf) Autotool-Aufgaben Übung für alle gemeinsam (Hörsaalübung) Donnerstag Z1 9:35-11:05 in PBS 203 Fragen zum Vorlesungsstoff Besprechung der schriftlichen Übungsaufgaben Praktika 2 Gruppen (Eintragen im Autotool): Montag 9:35-11:05 in Pool 242 (14-tägig) (einige) Autotool-Aufgaben Programmieraufgaben (Implementierung) Prüfung: Klausur ca. 60 min (Hälfte von 120 min für Modul PTI621) 10

Algorithmen in der Informatik Algorithmus: in Schritte geordnete Arbeitsvorschrift endliche Beschreibung eines schrittweise ausgeführten Verfahrens in einer formalen Beschreibungssprache. zur Ausführung eines Algorithmus ist nötig: Akteur / Maschine, welche den Beschreibungsformalismus interpretieren kann 11

Algorithmen Eigenschaften notwendige Eigenschaften: endliche Beschreibung schrittweise Ausführung oft wird außerdem gefordert (meist sinnvoll für auf Computer ausgeführten Algorithmen): deterministischer Ablauf : bei wiederholter Ausführung mit denselben Eingaben wird immer derselbe Ablauf ausgeführt terminierend (Endlichkeit der Ausführung): Berechnungsvorschrift terminiert gdw. jede Ausführung bei jeder erlaubten Eingabe nach endlich vielen Schritten endet determiniertes Ergebnis : bei wiederholter Ausführung mit denselben Eingaben wird immer dieselbe Ausgabe erzeugt allgemeingültig : löst eine ganze Klasse von Aufgaben 12

Beispiele Algorithmus : A1 Eingabe : y Z Ausgabe : y x Wähle beliebige Zahl x Z y x + 4 Algorithmus : A2 Eingabe : x Z Ausgabe : y y 1 solange x 0 : y yx x x 1 Algorithmus : A3 Eingabe : n N Ausgabe : n solange n > 1 : wenn n 2 0 dann n n/2 sonst n 3n + 1 Welche dieser Algorithmen sind deterministisch, terminierend, haben determiniertes Ergebnis? 13

Algorithmen zur Lösung eines Berechnungsproblemes Berechnungsproblem: Transformation von Eingaben in Ausgaben Anforderungen an Algorithmen zur Lösung eines speziellen Berechnungsproblemes: Korrektheit Algorithmus löst alle Instanzen des gegebenen Problems (fehlerfrei): bestimmt für jede Eingabe korrekte Ausgabe. Berechenbarkeit Zu jeder Eingabe ist eine eindeutige Ausgabe definiert und wird vom Algorithmus erzeugt. Nicht alle formulierbaren Algorithmen sind berechenbar. (hängt vom Problem und der Beschreibungssprache ab). mehr dazu in LV Theoretische Informatik Effizienz möglicht geringer Ressourcen-Verbrauch (Speicherplatz, Laufzeit) 14

Algorithmen-Entwicklung 1. informale Aufgabenstellung 2. formale Spezifikation: Was (welches Berechnungsproblem) soll gelöst werden? exakte (formale) Beschreibung des Problemes: Eingabe des Algorithmus Ausgabe des Algorithmus Zusammenhang zwischen Ein- und Ausgabe 3. Entwurf des Algorithmus: Wie soll es gelöst werden? formale Darstellung der Arbeitsschritte zu jedem Schritt: Was wird getan? (Aktionen, Anweisungen) Womit wird es getan? (Daten) Wie geht es weiter? (nächster Schritt) 4. Verifikation: Nachweis der Korrektheit des Algorithmenentwurfes 5. Realisierung (Implementierung) 15

Algorithmen Spezifikation Problemanalyse: Was soll gelöst werden? Ausgangspunkt: Ergebnis: umgangssprachlich formulierte und oft ungenaue Aufgabenbeschreibung exakte und vollständige Definition des Problemes Spezifikation eines Berechnungsproblemes: korrekte formale Beschreibung des Zusammenhanges zwischen Eingaben und Ausgaben Spezifikation eines Berechnungsproblemes enthält Vorbedingung: Forderung an die Eingaben Nachbedingung: Forderung an die Ausgaben Instanz eines Berechnungsproblemes: spezielle Eingabe 16

Beispiel: Spezifikation des Sortier-Problems informale Aufgabenstellung: Entwurf eines Verfahrens, welches jede Folge (x 1,..., x n ) natürlicher Zahlen sortiert formale Spezifikation dieses Sortier-Problemes: Vorbedingung: Eingabe (x 1, x 2,..., x n ) mit i {1,..., n} : x i N Nachbedingung: Ausgabe (y 1, y 2,..., y n ) ist 1. y 1 y 2 y n+1 (aufsteigend geordnet) und 2. eine Permutation (Umordnung) der Eingabe (x 1, x 2,..., x n ) Instanz dieses Sortier-Problemes: (34, 6, 72, 3, 4, 15) 17

Algorithmen Korrektheit... there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult. Tony Hoare, 1980 ACM Turing Award Lecture Ist der entworfene Algorithmus korrekt? Erfüllt der entworfene Algorithmus die Spezifikation? Verifikation: Nachweis, dass Entwurf die Spezifikation erfüllt sicherer (aber mitunter aufwendiger) als Testen Es gibt Verfahren / Systeme, die Verifikation automatisch ausführen oder unterstützen. mehr dazu im Master-Studium: LV Spezifikations- und Verifikationsmethoden 18

Effizienz von Algorithmen Aufwandsanalyse von Algorithmen abhängig von der Größe der Instanz unabhängig von konkreter Hardware im günstigsten Fall (best case) ungünstigsten Fall (worst case) Mittel (average case) Abschätzungen von Resourcenbedarf bei Ausführung des Algorithmus Zeitaufwand: Anzahl elementarer Rechenschritte auf einem idealisierten Rechnermodell (RAM) Speicherplatzbedarf 19

Algorithmenentwurf Algorithmus = in Schritte geordnete Arbeitsvorschrift endliche Beschreibung eines schrittweise von einem Aktuer ausgeführten Verfahrens in einer formalen Beschreibungssprache. Ziele beim Entwurf von Algorithmen: Korrektheit geringer Ressourcenverbrauch Laufzeit Speicherplatz sinnvoll strukturierte einfache formale Beschreibung (z.b. kurzer, lesbarer Programmcode) 20

Beispiel Summe der ersten n natürlichen Zahlen informale Aufgabenstellung: Addiere alle natürlichen Zahlen von 1 bis n. Spezifikation: Vorbedingung: Eingabe n N Nachbedingung: Ausgabe s = n i=1 i Algorithmus : A1 Eingabe : n N Ausgabe : s s 0 für jedes i 1,..., n : s s + i Algorithmus : A2 Eingabe : n N Ausgabe : s s n(n + 1)/2 21

(Idealisiertes) Rechnermodell Random-Access-Maschine (RAM) unendlich viele Speicherzellen für je eine natürliche Zahl (Alternative: Real-RAM für reelle Zahlen) Befehle: Laden Speichern Operationen (logisch, arithmetisch, Vergleiche) Unterprogrammaufrufe Ausführung jedes Befehles (elementare Anweisung, Schritt) dauert (kostet) genau eine Einheit sequentielle Ausführung aller Befehle 22

Laufzeitanalyse Laufzeit eines Algorithmus auf der Eingabe x: Anzahl der zur Ausführung des Algorithmus bei Eingabe x benötigten Einheiten (Schritte) Laufzeit T eines Algorithmus ist eine Funktion der Größe der Eingabe x Definition der Größe hängt vom Berechnungsproblem ab, z.b. Länge einer zu sortierenden Liste, Länge der Binärdarstellung zweier zu addierender Zahlen worst-case Maximum der Laufzeiten des Algorithmus über alle Eingaben obere Schranke für die Laufzeit best-case Minimum der Laufzeiten des Algorithmus über alle Eingaben untere Schranke für die Laufzeit average-case Durchschnitt der Laufzeiten des Algorithmus über alle Eingaben 23

Beispiel: Durchsuchen einer Folge Spezifikation des Suchproblemes: V: Eingaben x = (x 1,..., x n ), y N: Ausgabe: Algorithmus : Suche 1 Eingabe : (x 1,..., x n ), y Ausgabe : gefunden gefunden Nein i 1 solange i n : wenn x i = y dann gefunden Ja i i + 1 Laufzeit (Tafel) Ja, falls ein i {1,..., n} mit x i = y existiert, sonst Nein 24

Mathematische Grundlagen: Wachstumsklassen präzise Laufzeitfunktion meist nicht relevant, nur die Größenordnung des Wachstums Ziel: Abschätzung der Größenordnung der Wachstumsfunktion durch Vergleich mit einfachen Funktionen Abschätzungen des asymptotischen Wachstums gelten nur für hinreichend große Werte 25

Wachstumsklassen Funktionenklassen zu einer gegebenen Funktion g : N R 0 O(g) = {f : N R 0 n 0 N c > 0 n n 0 : f (n) cg(n)} f wächst höchstens so schnell wie g (asymptotische obere Wachstumsschranke) o(g) = {f : N R 0 n 0 N c > 0 n n 0 : f (n) < cg(n)} f wächst langsamer als g Ω(g) = {f : N R 0 n 0 N c > 0 n n 0 : 0 cg(n) f (n)} f wächst mindestens so schnell wie g (asymptotische untere Wachstumsschranke) ω(g) = {f : N R 0 n 0 N c > 0 n n 0 : 0 cg(n) < f (n)} f wächst schneller als g Θ(g) = O(g) Ω(g) (asymptotisch gleiches Wachstum) Gilt genau dann, wenn f O(g) und g O(f ) 26

Asymptotische obere Schranke O(g) = {f : N R 0 n 0 N c > 0 n n 0 : f (n) cg(n)} Beispiele: 3/2n 2 + 3/2n + 2 O(n 2 ) n O(n 3 ) 2 n O(n 3 ) geeignete Abschätzung für worst-case-analyse 27

Vereinfachungen in O-Notation O(cf ) = O(f ), konstante Faktoren irrelevant O(f + g) = max(o(f ), O(g)), Summanden mit kleinerem Wachstum irrelevant, z.b. Polynome kleineren Grades O(log a n) = O(log b n) 28

Berechnung durch Grenzwerte 1000n 5 5463524n 4 + 13n 3 + n 2 O(n 5 ) wegen 1000n 5 5463524n 4 + 13n 3 + n 2 lim n n 5 1000n 5 = lim n n 5 = 1000 < Beispiele: O(n/2) = O(134n) = O(n + 5000) = O(n 5000) = O(17n 5000) = O(n/5000) = O(n) O(log n) O(n) O(n 2 ) O(2 n ) 29

Beispiele n + 1000 O(n) 1000n O(n) 1000n O(n 2 ) 1000n O( n) 1000n 5 + 3524n 2 O(n 5 ) 1000n 5 + 3524n 2 O(n 6 ) n/1000 + 3524 O(n) log a n O(log b n) 30

Wichtige Funktionenklassen O(1) konstantes Wachstum O(n) lineares Wachstum O(n 2 ) quadratisches Wachstum O(n 3 ) kubisches Wachstum O(n k ) polynomielles Wachstum O(log n) logarithmisches Wachstum O(n log n) O(log log n) doppelt logarithmisches Wachstum O(2 n ) exponentielles Wachstum 31

Laufzeitabschätzungen für Ablaufstrukturen elementare Operationen A (Zuweisung, Berechnung eines arithmetischen Ausdruckes, Vergleich) T (A) = 1 O(1) sequentielle Verknüpfung (Nacheinanderausführung) Algorithmus A = A_1; A_2 Laufzeit T (A) = T (A 1 ) + T (A 2 ) Verzweigung (Alternative) Algorithmus A = if C then A_1 else A_2 Laufzeit T (A) = max(t (A 1 ), T (A 2 )) O(T (A 1 ) + T (A 2 )) Wiederholung (Schleife) Algorithmus A = for i = 1 to n A_i Laufzeit T (A) = T (A 1 ) + T (A 2 ) +... + T (A n ) oft für jeden Durchlauf gleiche Laufzeit, dann T (A) = nt (A 1 ) 32

Beispiel: Suche 2 Spezifikation des Suchproblemes: V: Eingaben x = (x 1,..., x n ), y N: Ausgabe: Algorithmus : Suche 2 Eingabe : (x 1,..., x n ), y Ausgabe : gefunden Ja, falls ein i {1,..., n} mit x i = y existiert, sonst Nein gefunden Nein i 1 solange gefunden = Nein und i n : wenn x i = y dann gefunden Ja i i + 1 33

Laufzeiten Suche 1 best falls y = x 1 : T (n) O(n) worst falls y nicht in x vorkommt: T (n) O(n) average T (n) O(n) Suche 2 best falls y = x 1 : T (n) O(1) worst falls y nicht in x vorkommt: T (n) O(n) average T (n) O(n) 34

Beispiel Minimum-Suche Spezifikation: Eingabe x = (x 1,..., x n ) Ausgabe y mit 1. y {x 1,..., x n } und 2. z {x 1,..., x n } : y z Algorithmus : Minimum-Suche Eingabe : (x 1,..., x n ) Ausgabe : y y x 1 für jedes i 2,..., n : wenn y > x i dann y x i Laufzeit: O(n) 35

Beispiele Laufzeiten Für alle Algorithmen: Algorithmus : A Eingabe : n Ausgabe : s Algorithmus : B k 52; s 5 für jedes i 1,..., n : für jedes j 1,..., k : s n + ij k 52; s 5 für jedes i 1,..., n : für jedes j 1,..., n : s n + ij Algorithmus : C k 52; s 5 für jedes i 1,..., n : für jedes j 1,..., i : s i + j T (A) 0(n) T (B) 0(n 2 ) T (C) 0(n 2 ) 36

Rekursive Algorithmen Basisfall (Induktionsanfang): direkte Lösung Rekursionsschritt (Induktionsschritt): Funktionswert wird aus den Funktionswerten derselben Funktion mit anderen (einfacheren) Argumenten berechnet Beispiele: Fakultät { 1 falls n = 0 n! = n(n 1)! sonst Fibonacci-Funktion 0 falls n = 0 f (n) = 1 falls n = 1 f (n 1) + f (n 2) sonst Ackermann-Funktion y + 1 falls x = 0 a(x, y) = a(x 1, 1) falls y = 0 und x > 0 a(x 1, a(x, y 1)) sonst 37

Laufzeit-Berechnung für n! Spezifikation: V: x N N: y = x! Algorithmus : fac Eingabe : x Ausgabe : y wenn x = 0 dann y 1 sonst y x fac(x 1) Rekurrenz T (0) = 1 T (n) = T (n 1) + 1 T (n) = T (n 1) + 1 = (T (n 2) + 1) + 1 = T (n 2) + 2 = T (n 3) + 3... = T (n n) + n = T (0) + n = 1 + n Laufzeit O(n) 38

Divide-and-Conquer-Verfahren (teile und herrsche) Idee: rekursive Zerlegung des Problemes in Teilprobleme bis zum Basisfall Grundprinzip: Teilung des Problems P in n Teilprobleme P i Lösung aller Teilprobleme P i (Rekursion) Kombination der Lösungen der Teilprobleme P i zu einer Lösung des Problems P (Baumstruktur) 39

Beispiel: Suche in geordneten Folgen Spezifikation des Suchproblemes in geordneten Folgen: V: Eingaben totale Ordnung (M, ), x = (x 1,..., x n ) M aufsteigend geordneten (d.h. x 1 x 2 x n ) y M N: Ausgabe: Ja, falls ein i {1,..., n} mit x i = y existiert, sonst Nein 40

Algorithmus: Suche in geordneten Folgen Algorithmus : Suche3 Eingabe : (x 1,..., x n ), y und l, r {1,..., n} (Bereichsgrenzen) Ausgabe : gefunden wenn l > r dann gefunden Nein sonst m (l + r)/2 wenn x m = y dann gefunden Ja sonst wenn x m < y dann Suche3(x, y, m + 1, r) sonst Suche3(x, y, l, m 1) 41

Laufzeit: Suche in sortierten Folgen T (0) = T (1) = a T (n) = T ( n/2 ) + b mit Konstanten a, b für n = 2 k, also k = log n: T (n) = T (n/2 1 ) + b = T (n/2 2 ) + b + b = T (n/2 3 ) + 3b... = T (n/2 k ) + kb = T (n/n) + kb = a + kb = a + b log n Laufzeit: O(log n) 42

Häufig vorkommende Rekurrenzen T (n) = T (n 1) + 1... = T (0) + n O(n) T (n) = T (n 1) + n... = T (0) + n 2 O(n 2 ) T (n) = T (n/2) + 1... = T (0) + log n O(log n) T (n) = T (n/2) + n... = T (0) + n log n O(n log n) T (n) = 2T (n/2) + 1... = 2 log n T (0) + 2 log n log n O(n log n) T (n) = 2T (n 1) + 1 O(2 n ) Allgemeines Verfahren zum Lösen von Rekurrenzen: Master-Theorem 43

Klassisches Beispiel: Türme von Hanoi Positionen A, B.C n Scheiben {1,..., n} der Größen 1,..., n Bedingung: Scheibe i darf nur dann auf Scheibe j liegen, wenn i < j zulässige Bewegungen (zusammen ein Zug): Nimm die obere Scheibe i von Position x {A, B, C} und Lege diese Scheibe i auf Position y {A, B, C}, sofern damit auf Position y die Bedingung nicht verletzt wird Startsituation: Auf Position A ein Turm aus n (zulässig) gestapelten Scheiben, Positionen B, C leer Zielsituation: Auf Position B ein Turm aus n (zulässig) gestapelten Scheiben, Positionen A, C leer gesucht: Folge von Schritten vom Start- zum Zielzustand 44

Türme von Hanoi: rekursiver Algorithmus Verschiebe einen Hanoi-Turm der Höhe n von Position A zu Position B, falls nötig, unter Verwendung der Position C: Spezifikation: V: (x : n, y : 0, z : 0), l = () N: (x : 0, y : n, z : 0), l enthält die Folge aller Züge (Start- und Zielposition der bewegten Scheibe) Algorithmus Hanoi(x, y, z): Basisfall: n = 0 (keine Bewegung) Rekursionsschritt: 1. die oberen n 1 Scheiben von Position x zu Position z verschieben, falls nötig, unter Verwendung der Position y (rekursiv), 2. Verschiebe die größte Scheibe von Position x zu Position y, Zug (x y) an l anhängen 3. die n 1 Scheiben von Position z zu Position y verschieben, falls nötig, unter Verwendung der Position x (rekursiv). 45