Inhalt. 3. Spezielle Algorithmen

Ähnliche Dokumente
Inhalt. 3. Spezielle Algorithmen

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

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

Rekursive Algorithmen

Informatik I. Teil 1 - Wintersemester 2010/11. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik. Inhalt

1. Grundlagen der Informatik

Informatik. Teil 1 - Sommersemester Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

einseitige Selektion zweiseitige Selektion

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

Interne Sortierverfahren

Speicher und Adressraum

Beispiel 1: Fakultät

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

Programmierung mit C Algorithmen

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

Informatik. Teil 1 Wintersemester 2011/2012. Prof. Dr.-Ing. habil. Peter Sobe Fachkultät Informatik / Mathematik

Vorkurs Informatik WiSe 17/18

Übung Algorithmen und Datenstrukturen

2. Algorithmische Methoden 2.1 Rekursion. 18. April 2017

2. Algorithmenbegriff

Informatik II, SS 2016

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

II.3.1 Rekursive Algorithmen - 1 -

Abschnitt: Algorithmendesign und Laufzeitanalyse

Datenstrukturen und Algorithmen

Vorlesung Programmieren

Informatik I: Einführung in die Programmierung

4 Rekursionen. 4.1 Erstes Beispiel

Einstieg in die Informatik mit Java

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

Sortieralgorithmen. Selection Sort

Wiederholung. Divide & Conquer Strategie

Datenstrukturen und Algorithmen

Abschnitt 19: Sortierverfahren

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 9. Sortieren

Technische Universität München SoSe 2018 Fakultät für Informatik, I Mai 2018 Dr. Stefanie Demirci

1. Teilklausur. Name:... Vorname:... Matrikel-Nummer:...

Institut fu r Informatik

Flussdiagramm / Programmablaufplan (PAP)

Heapsort. Dr. Michael Brinkmeier (TU Ilmenau) Algorithmen und Datenstrukturen / 50

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

Informatik II, SS 2018

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

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Heapsort

Grundlagen: Algorithmen und Datenstrukturen

INSERTION-SORT: Ja, Es wird immer das erste, kleinste Element an die neue Liste angehängt.

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

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

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

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

Folge 13 - Quicksort

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

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Klausur - Informatik I SS 05. Note: Bearbeitungszeit 120 Minuten Keine Hilfsmittel

Vorkurs Informatik WiSe 16/17

7. Sortieren Lernziele. 7. Sortieren

Kasparov versus Deep Blue. Till Tantau. Institut für Theoretische Informatik Universität zu Lübeck

Stack. Seniorenseminar Michael Pohlig

Inhalt Kapitel 2: Rekursion

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

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

Informatik II, SS 2018

Übersicht über Informatik und Softwaresystemtechnik WS 99/00, Prof. Dr. Andreas Schwill

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

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

Technische Universität München SoSe 2015 Institut für Informatik I Mai 2015 Dr. Tobias Lasser. Aufgabe 1 Rechnen mit Landau-Symbolen

3.2. Divide-and-Conquer-Methoden

Folgen und Funktionen in der Mathematik

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

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Anweisungen und Kontrollstrukturen

Krawatterätsel - Verbesserung der oberen Schranke

Sortieren & Co. KIT Institut für Theoretische Informatik

Krawattenrätsel - Verbesserung der oberen Schranke

Rekursion. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

SAGE Computeralgebrapraktikum: Elementare Zahlentheorie und Anwendungen. Prof. Dr. Wolfram Koepf Prof. Dr. Werner Seiler WS 2014

Programmieren 1 C Überblick

Rekursion. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Übung Algorithmen und Datenstrukturen

JAVA - Suchen - Sortieren

Heapsort, Quicksort, Mergesort. 8. Sortieren II

C++ - Kontrollstrukturen Teil 2

2. Programmierung in C

Algorithmentheorie Randomisierung

Beim rekursiven Aufruf einer Funktion wird jeweils ein Duplikat der gesamten Funktion im Speicher abgelegt.

Algorithmen und Datenstrukturen

11. Rekursion, Komplexität von Algorithmen

BUBBLE SORT. Können wir die gefundenen Algorithmen auch auf Listen mit mehr als drei Elementen ausdehnen?

Stabiles Sortieren. Dieses Prinzip lässt sich natürlich auf beliebiege andere Zahlensystem oder auch komplett anders gestaltete Mengen übertragen.

Informatik II Übung 10. Pascal Schärli

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

1. Die rekursive Datenstruktur Liste

Datenstrukturen & Algorithmen

Rekursive Funktionen

Transkript:

Inhalt 0. Rechner und Programmierung für Kommunikationstechniker und Mechatroniker 1. Algorithmen - Wesen, Eigenschaften, Entwurf 2. Darstellung von Algorithmen mit Struktogrammen und Programmablaufplänen 3. Spezielle Algorithmen Peter Sobe 36 3. Spezielle Algorithmen Im folgenden Abschnitt sollen ausgewählte Algorithmen, die spezielle Konstrukte des algorithmischen Paradigmas, wie - Selektion, Mehrfachselektion - Zyklen verschiedener Formen enthalten, entwickelt und besprochen werden. In einem weiteren Abschnitt werden dann Algorithmen mit Prozeduren behandelt und schließlich werden rekursive Algorithmen dargestellt. Peter Sobe 37

Algorithmen mit Selektion Algorithmen, die nur die Konstrukte Sequenz und Selektion (einschließlich Mehrfachselektion) enthalten sind eigentlich sehr einfache Algorithmen, wenn man einmal ausschließt, dass Prozeduren aufgerufen werden. Die meisten anspruchsvollen Algorithmen enthalten Zyklen. Beispiel 1 - Berechnung Flächeninhalt eines Dreiecks Ein Dreieck mit den Seiten a,b,c hat einen Flächeninhalt f= mit s=(a+b+c)/2 s* ( s a)*( s b)*( s c) Vorab ist zu prüfen, ob mit den Seiten wirklich ein Dreieck gebildet werden kann. Ein Dreieck ist nur bildbar, falls a+b>c und a+c>b und b+c>a gilt. Peter Sobe 38 Algorithmen mit Selektion Beispiel 1 - Berechnung Flächeninhalt eines Dreiecks Eingabe: a,b,c (a+b>c)&&(a+c>b)&&(b+c>a) ja s=(a+b+c)/2 f=sqrt(s*(s-a)*(s-b)*(s-c)) Ausgabe: "Fläche= ",f Ausgabe: " Dreieck existiert nicht" nein Peter Sobe 39

Algorithmen mit Selektion Beispiel 2 Prüfen eines Datums Es ist ein Algorithmus aufzustellen, der ein gegebenes Datum, bestehend aus den drei Größen t für Tag, m für Monat und j für Jahr, überprüft, ob es sich um ein gültiges Datum aus dem Zeitraum 1583 bis 2100 handelt! Lösung: Mitschrift, Vorbereitung für Übungsaufgabe (Berechnung der Tageszahl aus dem Datum) Peter Sobe 40 Algorithmen mit Selektion und Zyklen Beispiel 3 Entscheidung über Teiler Geben Sie einen Algorithmus an, der von 2 natürlichen Zahlen x und y ermittelt, ob die eine ein Teiler der anderen ist! Lösung: Mitschrift Peter Sobe 41

Algorithmen mit Selektion und Zyklen Beispiel 4 Minimum einer Zahlenfolge (Basisalgorithmus mit Zählschleife) Es ist ein Algorithmus zur Bestimmung des Minimums einer Zahlenfolge a 1, a 2,... a n aufzustellen. Lösung: Mitschrift Beispiel 5 Sortierung einer Zahlenfolge (Basisalgorithmus mit geschachtelten Zählschleifen) Es ist eine Weiterentwicklung des Algorithmus 4 vorzunehmen, der eine gegebene Zahlenfolge sortiert, indem er das Minimum bestimmt, an die erste Position setzt und dann mit dem Rest (ab Position 2) wieder das Minimum bestimmt, usw. Lösung: Mitschrift Peter Sobe 42 Algorithmen mit Prozeduren Prozeduren dienen der Übersichtlichkeit, indem Teilalgorithmen als Prozeduren verpackt werden und unter einem Namen aufgerufen werden. Prozeduren sind immer dann sinnvoll, wenn gleiche oder nur ganz gering variierende Teile in Algorithmen mehrmals vorkommen. Diese Teile müssen dann nur einmal aufgeschrieben werden und können an verschiedenen Stellen im Algorithmus aufgerufen werden. Beispiel 6 Differenz in Tagen von zwei Tagesangaben als Datum 1 und Datum 2 Für Datum 1 (t1,m1,j1) und Datum 2 (t2,m2,j2) ist jeweils die Tagesnummer zu berechnen (siehe Übungsaufgabe). Mit den zwei Tagesnummern ist die Tagesdifferenz zu bilden. Lösung: Mitschrift Peter Sobe 43

Rekursive Algorithmen In der Mathematik sind viele Funktionen rekursiv definiert. Der Begriff der Rekursion beinhaltet, dass zur Definition einer Funktion diese selbst wieder mit benutzt wird, allerdings mit anderen Argumenten. Eine rekursive Definition benötigt stets eine (nichtrekursive) Anfangs- bzw. Abbruchbedingung. Beispiel: Fakultät rekursive Definition : fak(n) = n * fak(n-1) Anfangsbedingung: fak(0) = 1 Peter Sobe 44 Rekursive Algorithmen - Charakteristika Eine solche Definition ist in der Regel kurz und übersichtlich. Man erkennt sofort die Grundstruktur des Algorithmus. Eine solche rekursive Definition lässt sich auch sehr leicht unter Verwendung rekursiver Prozeduren ( Funktionen) implementieren. Allerdings ist der implementierte Algorithmus häufig ineffizient, d.h. mit einem hohen Ressourcenverbrauch (Speicher und Rechenzeit) verbunden. Bestimmte rekursive Algorithmen lassen sich in iterative Algorithmen umschreiben und damit effizienter implementieren. Dies trifft insbesondere auf eine sogenannte endständige Rekursion zu, wie z.b. bei der Fakultät. Peter Sobe 45

Rekursive Algorithmen - Fakultät Das folgende Struktogramm enthält die Umsetzung der rekursiven Definition: fak(n) Eingangsgröße: n Ausgangsgröße: Rückkehrwert if (n==0) return 1 then else return (n*fak(n-1)) Peter Sobe 46 Rekursive Algorithmen Fibonacci-Zahlen Rekursive Definition der Fibonacci-Zahlen: fibo(n) = fibo(n-1) + fibo(n-2) Anfangsbedingung: fibo(0)=0, fibo(1)=1 Das folgende Struktogramm enthält die Umsetzung der rekursiven Definition: fibo(n) Eingangsgröße: n Ausgangsgröße: Rückkehrwert if (n<2) then return n else return (fibo(n-1)+fibo( n-2)) Peter Sobe 47

Rekursive Algorithmen Turm von Hanoi Das Problem beim Turm von Hanoi besteht in der folgenden Aufgabe: 1. Gegeben ist ein Turm auf einem Standplatz A aus n Scheiben, die übereinander liegen, und zwar immer eine kleinere auf einer größeren Scheibe. 2. Der Turm soll auf einen zweiten Platz B umgesetzt werden, wobei aber beim Umsetzen immer nur eine kleinere auf eine größere Scheibe gelegt werden darf. 3. Bei der Umsetzung darf ein dritter Hilfsplatz C mitbenutzt werden. Das C-Programm für dieses Problem wird in der Vorlesung vorgeführt. Es dient als Experimentierprogramm für einen Turm mit einer wählbaren Scheibenanzahl zum Studium der Aufgabenstellung. Peter Sobe 48 Rekursive Algorithmen Turm von Hanoi Analysiert man das Problem beim Turm von Hanoi so erkennt man, dass man beim Umsetzen des Turms von n Scheiben vom Platz A zum Platz B erst einmal den Turm von n-1 Scheiben über der größten Scheibe von A nach dem Hilfsplatz C umsetzen muss, um einen Zug der größten Scheibe vom Platz A zum Platz B vornehmen zu können. Danach muss der Turm von n-1 Scheiben vom Platz C wieder auf den Platz B umgesetzt werden. Peter Sobe 49

Rekursive Algorithmen Turm von Hanoi Platz A Platz B Platz C Ausgangssituation Turm soll nach Platz B umgesetzt werden Peter Sobe 50 Rekursive Algorithmen Turm von Hanoi Platz A Platz B Platz C Turm mit n-1 Scheiben über der größten Scheibe muss auf Hilfsplatz C umgesetzt werden. Peter Sobe 51

Rekursive Algorithmen Turm von Hanoi Platz A Platz B Platz C Größte Scheibe kann jetzt durch einen Zug vom Platz A zum Platz B befördert werden. Peter Sobe 52 Rekursive Algorithmen Turm von Hanoi Platz A Platz B Platz C Turm mit n-1 Scheiben kann jetzt vom Hilfsplatz C zum Platz B umgesetzt werden. P. Sobe 53

Rekursive Algorithmen Turm von Hanoi Algorithmus rekursiv: Umsetz(n,A,B) = Umsetz(n-1,A,C), Zug (n,a,b), Umsetz(n-1,C,B) Die Rolle des Hilfsplatzes C wechselt von Ebene zu Ebene. Hilfsplatz ist immer der Platz, der in der Umsetzung nicht genannt ist. Bei Umsetz(...,A,C) ist es in der nächsten Ebene der Platz B usw.. Bezeichnet man den Platz A mit der Ziffer 0, den Platz B mit der Ziffer 1, und den Platz C mit der Ziffer 2, so kann der freie Platz immer mit 3-A-B bezeichnet werden. Peter Sobe 54 Rekursive Algorithmen Turm von Hanoi Struktogramm rekursiv: umsetz (n, a, b) ja / n = 0? k = 3 - a - b umsetz (n-1, a, k) zug (n, a, b) umsetz (n-1, k, b) nein zug( n, a, b) Ausgabe: "snr=",n,"von ",p[a],"->",p[b] Peter Sobe 55

Rekursive Algorithmen Prinzip Teile und Herrsche Das Prinzip Teile und Herrsche (engl. divide and conquer bzw. lat. divide et impera) ist für die Verwendung rekursiver Algorithmen zugeschnitten. Man versucht den Grundbereich an Eingangsdaten für den Algorithmus in meist zwei Teile (die nicht unbedingt gleich groß sein müssen) aufzuteilen. Danach wird der eigentliche Algorithmus auf die erzeugten Teile nacheinander angewandt (Herrsche). Der Algorithmus teilt nun wieder die Teile in weitere Teile und bearbeitet diese weiter, was weitere rekursive Aufrufe zur Folge hat. Der rekursive Algorithmus, muss also die Teilung selbst mit enthalten. Peter Sobe 56 Rekursive Algorithmen Quicksort (1) Das Prinzip Teile und Herrsche wird für einen schnellen Sortieralgorithmus (Quicksort) angewandt. Die Aufteilung des Grundbereichs wird in einen linken und in einen rechten Teil durch eine Funktion(Prozedur) grupp vorgenommen. grupp (a[], l, r) while ( l < r) a[l+1] < a[l] ja tausch( a[l+1], a[l] ) tausch( a[l+1], a[r] ) l = l + 1 r = r - 1 return l nein Peter Sobe 57

Rekursive Algorithmen Quicksort (2) Der Quicksort-Algorithmus benutzt nun diesen Teile-Algorithmus als wesentlichen Bestandteil und hat als Herrsche-Teil den rekursiven Aufruf von sich selbst. quicksort (a[], links, rechts) Teile in links und rechts ja pos = grupp (a, links, rechts) quicksort (a, links, pos-1) quicksort (a, pos+1, rechts) rechts > links nein Peter Sobe 58 Rekursive Algorithmen Quicksort (3) Beispiel: Sortiere die Zahlenfolge 8,5,6,3,4,1, deren Elemente in a[0] bis a[5] gespeichert sind. Quicksort(a,0,5) pos=grupp(a,0,5) 8 5 6 3 4 1, l=0, r=5: Bedingung a[l+1]<a[l] zutreffend, tausche a[0], a[1], setze l=l+1=1 5 8 6 3 4 1, l=1, r=5: Bedingung a[l+1]<a[l] zutreffend, tausche a[1], a[2], setze l=l+1=2 5 6 8 3 4 1, l=2, r=5: Bedingung a[l+1]<a[l] zutreffend, tausche a[2], a[3], setze l=l+1=3 5 6 3 8 4 1, l=3, r=5: Bedingung a[l+1]<a[l] zutreffend, tausche a[3], a[4], setze l=l+1=4 5 6 3 4 8 1, l=4, r=5: Bedingung a[l+1]<a[l] zutreffend, tausche a[4], a[5], setze l=l+1=5 5 6 3 4 1 8, l=r=5: Bedingung l<r nicht mehr zutreffend, Zyklus beenden, pos = 5 Rekursiver Aufruf: Quicksort(a,0,4), Quicksort(a,6,5) Peter Sobe 59

Rekursive Algorithmen Quicksort (4) Fortsetzung: Quicksort(a,0,4) pos=grupp(a,0,4) 5 6 3 4 1 8, l=0, r=4: Bedingung a[l+1]<a[l] nicht zutreffend, tausche a[1], a[4], setze r=r-1=3 5 1 3 4 6 8, l=0, r=3: Bedingung a[l+1]<a[l] zutreffend, tausche a[0], a[1], setze l=l+1=1 1 5 3 4 6 8, l=1, r=3: Bedingung a[l+1]<a[l] zutreffend, tausche a[1], a[2], setze l=l+1=2 1 3 5 4 6 8, l=2, r=3: Bedingung a[l+1]<a[l] zutreffend, tausche a[2], a[3], setze l=l+1=3 1 3 4 5 6 8, l=r=3: Bedingung l<r nicht mehr zutreffend, Zyklus beenden, pos = 3 Rekursiver Aufruf: Quicksort(a,0,2), Quicksort(a,4,4) Peter Sobe 60 Rekursive Algorithmen Quicksort (5) Fortsetzung: Quicksort(a,0,2) pos=grupp(a,0,2) 1 3 4 5 6 8, l=0, r=2: Bedingung a[l+1]<a[l] nicht zutreffend, tausche a[1], a[2], setze r=r-1=1 1 4 3 5 6 8, l=0, r=1: Bedingung a[l+1]<a[l] zutreffend, tausche a[1], a[1], setze l=l+1 1 4 3 5 6 8, l=r=1: Bedingung l<r nicht mehr zutreffend, Zyklus beenden, pos = 0 Rekursiver Aufruf: Quicksort(a,0,-1), Quicksort(a,1,2) Quicksort(a,1,2) pos=grupp(a,1,2) 1 4 3 5 6 8, l=1, r=2: Bedingung a[l+1]<a[l] zutreffend, tausche a[1], a[2], setze l=l+1=2 1 3 4 5 6 8, l=r=2: Bedingung l<r nicht mehr zutreffend, Zyklus beenden, pos = 2 Rekursiver Aufruf: Quicksort(a,1,1), Quicksort(a,3,2) Ende Peter Sobe 61

Sortieren durch Iteration (1) Quicksort (als rekursiver Algorithmus) ist ein sehr schneller Sortieralgorithmus, aber ist nicht einfach zu durchschauen. Im folgenden soll ein sehr einfacher intuitiver Sortieralgorithmus angegeben werden. Bubble Sort Eingabe: feld a mit Elementen a[1] bis a[n], Feldlänge n Ausgabe: feld a mit sortierten Elementen Idee: (1) Durchlaufe Feld mit aufsteigendem Index und vertausche benachbarte Felder, falls Sie nicht der geforderten Sortierreihenfolge entsprechen. Wiederhole (1) solange, bis keine Vertauschungen mehr nötig sind Peter Sobe 62 Sortieren durch Iteration (2) Bubble Sort PAP Start tausch=false i = 1 i<n? ja a[i]>a[i+1]? nein nein ja tmp = a[i] a[i] = a[i+1] tausch ==true? nein ja a[i+1] = tmp tausch = true Stop i = i+1 Peter Sobe 63