Datenstrukturen und Algorithmen

Ähnliche Dokumente
Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen (für ET/IT)

1 Einführung. 2 Grundlagen von Algorithmen. 3 Grundlagen von Datenstrukturen. 4 Grundlagen der Korrektheit von Algorithmen

4 Rekursionen. 4.1 Erstes Beispiel

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 7. Entrekursivierung

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

Programmieren 1 C Überblick

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

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

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

Einführung in die Informatik I

Vorkurs Informatik WiSe 17/18

Algorithmen und Datenstrukturen 2

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Übung Algorithmen und Datenstrukturen

1. Die rekursive Datenstruktur Liste

Dynamische Programmierung. Problemlösungsstrategie der Informatik

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 9, Donnerstag 18.

Kapitel 7: Rekursion. Inhalt. Rekursion: Technik Rekursion vs. Iteration

Lösungsvorschlag Serie 2 Rekursion

Algorithmen & Programmierung. Rekursive Funktionen (1)

Einschub: Anweisungen und Bedingungen für PAP und Struktogramme (1)

2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017

Rekursive Funktionen und ihre programmtechnische Umsetzung

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Software Entwicklung 1

Mergesort. Inhaltsverzeichnis. Veranschaulichung der Funktionsweise. aus Wikipedia, der freien Enzyklopädie

Informatik I: Einführung in die Programmierung

II.3.1 Rekursive Algorithmen - 1 -

Speicher und Adressraum

Das Divide - and - Conquer Prinzip. Quicksort Formulierung und Analyse des Prinzips Geometrisches Divide and Conquer - Closest-Pair - Segmentschnitt

Algorithmen und Datenstrukturen 2

Einführung in die Programmierung

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

Vorkurs Informatik WiSe 16/17

Kapitel 5: Paradigmen des Algorithmenentwurfs. Gliederung

Inhalt. 3. Spezielle Algorithmen

Rekursive Funktionen (1)

Inhalt. 3. Spezielle Algorithmen

Rekursive Funktionen (1)

Programmierung mit C Algorithmen

Top-down Bottom-up Divide & Conquer Dynamisches Programmieren Caching (Memoization) Branch-and-Bound Greedy

Einführung in die Objektorientierte Programmierung Vorlesung 17: Dynamische Programmierung. Sebastian Küpper

FHZ. K13 Rekursion. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

Rekursive Funktionen

Einführung in die Informatik 2

Vorsemesterkurs Informatik Übungsaufgaben. Tag 4a - Python

Algorithmen und Datenstrukturen Tutorium Übungsaufgaben

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Grundlagen der Programmierung

Konvexe Hülle. Abbildung: [Wikipedia]: Nicht-konvexe Menge (links), konvexe Menge (rechts) KIT Institut für Theoretische Informatik 510

Algorithmen und Datenstrukturen 1 Kapitel 3

Suchen und Sortieren

Gierige Algorithmen. Seminar Hallo Welt! für Fortgeschrittene. Daniel Ziegler Daniel Ziegler Gierige Algorithmen

Algorithmen und Datenstrukturen Tafelübung 4. Jens Wetzl 15. November 2011

Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Rekursion vs. Iteration, Sortieren

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

Abschnitt: Algorithmendesign und Laufzeitanalyse

Divide & Conquer. Problem in Teilprobleme aufteilen Teilprobleme rekursiv lösen Lösung aus Teillösungen zusammensetzen

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr.

Institut fu r Informatik

Rekursion. Sie wissen wie man Programme rekursiv entwickelt. Sie kennen typische Beispiele von rekursiven Algorithmen

Algorithmen und Datenstrukturen 04

Algorithmen und Datenstrukturen (für ET/IT)

Einstieg in die Informatik mit Java

Abschnitt 19: Sortierverfahren

Techniken der Programmentwicklung

Suchen und Sortieren

Dynamische Programmierung

To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1

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

Transkript:

Datenstrukturen und Algorithmen VO 708.031 robert.legenstein@igi.tugraz.at 1

Kapitel 2 Algorithmische robert.legenstein@igi.tugraz.at 2

2. Algorithmische 1) Iterative Algorithmen 2) Rekursive Algorithmen 3) Teile u. Herrsche (engl. Divide & Conquer) Prinzip 4) Greedy ("Gierige") Algorithmen 5) Dynamisches Programmieren Entwurf&Analyse von Alg. (5. Semester) robert.legenstein@igi.tugraz.at 3

1) Iterative Algorithmen Bisher wurden nur iterative Alg. analysiert (z.b. InsertionSort) Abfolge von Anweisungen Verschachtelung durch Schleifen Intuitives Prinzip, leicht zu formulieren, für komplexe Probleme aufwendig Jeder iterative Alg. lässt sich als rekursiver Alg. implementieren (und umgekehrt). Entrekursivierung und Rekursivierung siehe [Algorithmen und Datenstrukturen G. Pomberger und H. Dobler, Pearson Studium] robert.legenstein@igi.tugraz.at 4

Koch-Flocke (source: Wikipedia) 2) Rekursive Algorithmen Rekursion = Selbstbezüglichkeit Definition: Eine Funktion ruft sich selbst mit veränderten Parametern auf. robert.legenstein@igi.tugraz.at 5

2) Rekursive Algorithmen Definition: Eine Funktion ruft sich selbst mit veränderten Parametern auf. Jeder rekursive Alg. muss eine Abbruchbedingung implementieren. Vorteil: Viele (komplexe) Probleme können elegant mit rekursiven Alg. gelöst werden. Laufzeitanalyse einfacher. robert.legenstein@igi.tugraz.at 6

Iterative Alg. u. Rekursionen Vergleich Iterativer Alg. vs. Rekursiver Alg. Beispiel: Fakultät f ( n) n! n ( n 1) ( n 2) 2 1 f ( n) n! f (1) 1 n f ( n 1) FACTORIAL_ITERATIVE(n) 1: f 1 2: FOR i 1 TO n 3: f f*i 4: RETURN f T(n) = O(n) S(n) = O(1) FACTORIAL_RECURSIVE (n) 1: IF n=1 THEN 2: RETURN 1 3: ELSE 4: RETURN (n* FACTORIAL_RECURSIVE (n-1)) T(n) = O(n) S(n) = O(n) (entspricht Rekursionstiefe) robert.legenstein@igi.tugraz.at 7

Iterative Alg. u. Rekursionen Beispiel: Fibonacci-Zahlen FIBONACCI(n) 1: fib 1 2: fib_prev 1 3: FOR i 3 TO n 4: fib_pprev fib_prev 5: fib_prev fib 6: fib fib_prev + fib_pprev 7: RETURN fib T(n) = O(n) S(n) = O(1) f n f n 1 fn 2, n 3; f1 f2 1 1, 1, 2, 3, 5, 8, 13, 21, FIB_R(n) 1: IF n 2 THEN 2: RETURN 1 3: ELSE 4: RETURN FIB_R(n-1)+FIB_R(n-2) T(n) = Θ(c n ) (exponentiell!) S(n) = O(n) (entspricht Rekursionstiefe) Rekursive Varianten sind oft einfacher zu implementieren, besitzen aber oft den größeren Laufzeit- und Speicherbedarf! robert.legenstein@igi.tugraz.at 8

Zusammenfassung: Iterative Algorithmen vs. Rekursionen Vorteile rekursiver gegenüber iterativer Alg. Rekursive Alg. sind oft natürlicher und einfacher zu finden als iterative, insbesondere bei rekursiven Aufgabenstellungen Laufzeit und Korrektheit oft einfacher auszuwerten. (Rek. Zeitgl.) Rekursive Alg. können in der Regel mit weniger Zeilen Code impl. werden -> wartungsfreundlicher Nachteile rekursiver gegenüber iterativer Alg. geringere Effizienz und höherer Speicherbedarf (Stapel) Fausregel: verwende Rekursionen wenn die Problemformulierung rekursive Elemente enthält. Vermeide Rekursionen wenn es offensichtliche iterative Lösungen gibt. robert.legenstein@igi.tugraz.at 11

3) Das Teile u. Herrsche Prinzip Divide & Conquer Teile: das Problem in eine Anzahl von Teilproblemen auf Herrsche: Löse die Teilprobleme durch rekursive Aufrufe. Im Trivialfall wird das Problem direkt gelöst. Verbinde: die Teillösungen zu einer Gesamtlösung des Ausgangsproblems. Voraussetzungen: Problem ist teilbar Lösung aus Teillösungen einfacher konstruierbar Verwendet Rekursionen robert.legenstein@igi.tugraz.at 12

Ein Beispiel zum Teile u. Herrsche Prinzip Suchen in vorsortierten linearen Feldern: Input: Feld A[1..n] mit A[1] A[2] A[n] Output: Index t für das gesuchte Element x Falls x A, wird als Ergebnis -1 ausgegeben Formulierung: Hat das Feld nur ein Element, so vergleiche dieses und gib das Ergebnis zurück. Besteht die Liste aus mehr als einem Element, so teile die Liste in der Mitte und vergleiche das größte Element der ersten Liste mit dem gesuchten Element. Wiederhole diesen Vorgang mit jener Liste in der sich das Element befinden könnte. robert.legenstein@igi.tugraz.at 13

Ein Beispiel zum Teile u. Herrsche Prinzip Suchen in vorsortierten linearen Feldern: aus AuD VO der Techn. Uni. München, C. Eckert & Th. Stibor robert.legenstein@igi.tugraz.at 14

Ein Beispiel zum Teile u. Herrsche Prinzip (Binärsuche) Teile das Feld in zwei gleich große Hälften und vergleiche mit dem mittleren Element; falls ident gefunden, sonst suche entweder in der linken (kleiner) oder rechten Hälfte (größer) weiter BINSEARCH(von,bis,x) 1: IF von bis THEN 2: m [ (von+bis)/2 ] 3: IF x=a[m] THEN 4: RETURN m 5: ELSE 6: IF x<a[m] THEN 7: RETURN BINSEARCH(von,m-1,x) 8: ELSE 9: RETURN BINSEARCH(m+1,bis,x) 10: ELSE RETURN -1 robert.legenstein@igi.tugraz.at 15

4) Greedy Algorithmen ( Gierige Algorithmen) Wähle schrittweise jenen Folgezustand der kurzfristig den größten Gewinn bzw. das beste Ergebnis liefert. Schnelle Impl., Gute Laufzeit, lösen viele Probleme, aber meist nicht optimal (lokales Optimum) Voraussetzungen: Zustände lassen sich bewerten (Maß für den Gewinn) Zustände lassen sich einfach überführen (durch Aktionen) Kontinuierliche Verbesserung einfach berechenbar robert.legenstein@igi.tugraz.at 16

Ein Beispiel zu Greedy Algorithmen robert.legenstein@igi.tugraz.at 17 aus AuD VO der HS. RheinMain, Prof. Dr. Peter Barth

Ein Beispiel zu Greedy Algorithmen robert.legenstein@igi.tugraz.at 18 aus AuD VO der HS. RheinMain, Prof. Dr. Peter Barth

5) Dynamische Programmierung Richard Bellman (1940er Jahre) Wie im Teile u. Herrsche Prinzip baut die Gesamtlösung auf Teillösungen eines Problems auf. im Gegensatz zu Teile u. Herrsche Alg. müssen die Teilprobleme nicht unabhängig voneinander sein Wiederverwenden der Teilergebnisse (Memorization) Voraussetzungen (wie bei "gierigen" Alg.): Zustände lassen sich bewerten (Maß für den Gewinn) Zustände lassen sich einfach überführen Kontinuierliche Verbesserung einfach berechenbar robert.legenstein@igi.tugraz.at 19

Ein Beispiel zu Dynamischer Programmierung Längster Pfad in einem Grid (Manhattan Tourist Problem) Zahlen=# der Sehenswürdigkeiten nur Bewegungen nach Osten oder Süden sind erlaubt. Eric B. Laber Hua Zhou, North Carolina State Uni. robert.legenstein@igi.tugraz.at 20

Ein Beispiel zu Dynamischer Programmierung Wiederverwenden der Teilergebnisse (Memorization) robert.legenstein@igi.tugraz.at Eric B. Laber Hua Zhou, North Carolina State 21 Uni.

Ein Beispiel zu Dynamischer Programmierung Wiederverwenden der Teilergebnisse (Memorization) =S 0,1 + 2 =max( S 1,0 + 3, S 0,1 + 0 ) robert.legenstein@igi.tugraz.at Eric B. Laber Hua Zhou, North Carolina State 22 Uni.

Ein Beispiel zu Dynamischer Programmierung Wiederverwenden der Teilergebnisse (Memorization) robert.legenstein@igi.tugraz.at Eric B. Laber Hua Zhou, North Carolina State 23 Uni.

Ein Beispiel zu Dynamischer Programmierung Wiederverwenden der Teilergebnisse (Memorization) robert.legenstein@igi.tugraz.at Eric B. Laber Hua Zhou, North Carolina State 24 Uni.