Programmiersprachen II Fortsetzung Datenstrukturen Prof. Dr. Reiner Güttler Fachbereich GIS HTW.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

Rekursion: Rekurrenz: Algorithmen rufen sich selbst (rekursiv) auf.
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
Sortieren I - Bubblesort -
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Kapitel 5. Stacks und Queues
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Synonyme: Stapel, Keller, LIFO-Liste usw.
Rekursion Was ist Rekursion? Was sind rekursive Methoden?
Gliederung Motivation / Grundlagen Sortierverfahren
Sortieren mit Binären Bäumen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (04 – Entwurfsverfahren) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Verkettete Liste Visualisierung. New-Operator Mit dem New-Operator kann zur Laufzeit (dynamisch) Speicherplatz reserviert und angelegt werden Vorteil:
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Rekursion Richard Göbel.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 1 SS 2001 Algorithmus von Dijkstra.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmiersprache C 4
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut.
1.6 Die Datenstruktur Stapel Ein Stapel (Stack) ist ein Sonderfall einer Liste. Die Elemente werden nach dem Prinzip LIFO (Last In First Out) angefügt.
2.4 Rekursion Klassifikation und Beispiele
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Algorithmen und Datenstrukturen Übungsmodul 8
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Algorithmen und Datenstrukturen 1 SS 2002
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Suche des kürzesten Weges in einem Netz.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Unterprogramme / Methoden
Programmiersprachen II Fortsetzung Datenstrukturen Hashing Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 3 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 1 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Programmiersprachen II Fortsetzung Datenstrukturen Einfache Bäume Übung 13 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Graph_Algorithmen Einführung Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

Programmiersprachen II Fortsetzung Datenstrukturen Prof. Dr. Reiner Güttler Fachbereich GIS HTW

-2- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen 2.4 Einschub: abstrakte Datentypen ADT‘s abstrakte Datentypen (ADT) Datentypen bisher: primitive Datentypen wie int,... oder selbstgebildete in Form von Klassen. In der objektorientierten Programmierung hat man „unbewusst“ eigentlich die Grundlagen der Idee von „abstrakten Datentypen“ von Anfang an benutzt (aus der Sicht des Lernenden, in Wirklichkeit ist es anders herum, die schon seit den 50er Jahren ständig in der Forschung behandelten ADT’s bilden eine! Grundlage für die OOP).  Abstraktion: beinhaltet im wesentlichen die Abstraktion von der Implementierung und zwar auch für die eigentlichen Daten und nicht nur für die Operationen.

-3- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Beispiele:  Für einen ADT „stack“ kennt der Benutzer nur den „logischen Typ“ der „Nutzdaten“ und die Operationen push() und pop() mit ihrer Wirkung (vorher nachher). Er weiss nicht ob der stack realisiert ist als ein Array (ring buffer), eine verkettete Liste oder was anderes wie z.B. ein Baum jeweils mit der dazu passenden Implementierung der Operationen, die natürlich sehr!! unterschiedlich ist..  Betrachtet man z.B. einen ADT „Liste“, so muss man diesen unterscheiden von den vorhin besprochenen verketteten Listen. Ein ADT Liste (manchmal auch lineare Liste) ist eine ist eine Gruppierung von Elementen mit ein paar Operationen wie insert, delete, find,.... Eine Liste kann wiederum implementiert werden durch eine verkettete Liste, aber auch durch ein Array (wie könnte das gehen?) oder was anderes.

-4- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen  Eine ADT-Spezifikation ist also eine Art „Schnittstelle“ und beinhaltet die public Methoden.  Die Grundidee der ADT’s sollte im Software-Design-Prozess berücksichtigt werden und führt zu den immer wieder zitierten Benefits der OOP. Wenn man Daten strukturiert speichern muss, sollte man also zuerst überlegen, welche Operationen auf den Daten benötigt werden, welcher Strategie sie folgen (z.B. FIFO, LIFO oder Zugriff über einen Index). All dies führt zur Definition eines ADT. Wenn der eigentliche Anwendungscode sich nur auf die ADT-Schnittstelle bezieht, sollte ein kompletter Austausch der ADT-Implementierung möglich sein ohne den Anwendungscode „anzufassen“.  Beachte: In der Realität ist es sinnvoll, nicht zu scharf zu unterscheiden zwischen Datenstrukturen die ADT’s sind und solchen, die es nicht sind. Eine verkettete Liste kann als eigener ADT dienen oder auch als Implementierungstyp für andere ADT’s wie z.B. stacks oder queues.

-5- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen 2.5 Einschub: Rekursion Bekannt aus Mathematik: Induktion als Beweismethode. Grundidee: Unterteilung in zwei Schritte  Beweis für einen einfachen Fall, den Induktionsanfang  Beweis für einen „komplizierten“ Fall unter Zuhilfenahme der Voraussetzung, dass die Behauptung für „weniger komplizierte“ Fälle richtig ist. Übertragung der Grundidee auf Algorithmen als „Sonderform“ der Strategie „Teile-und Herrsche („Aufteilung in „einfachere“ Teilprobleme, Zusammenbauen der Gesamtlösung aus den Lösungen der Teilprobleme): wird häufig intuitiv gemacht, z.B. beim Spielen

-6- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen 2.5 Einschub: Rekursion Bekannt aus Mathematik: Induktion als Beweismethode. Grundidee der Induktion: Unterteilung in zwei Schritte  Beweis für einen einfachen Fall, den Induktionsanfang  Beweis für einen „komplizierten“ Fall unter Zuhilfenahme der Voraussetzung, dass die Behauptung für „weniger komplizierte“ Fälle richtig ist. Rekursion: Übertragung der Grundidee auf Algorithmen als „Sonderform“ der Strategie „Teile-und Herrsche („Aufteilung in „einfachere“ Teilprobleme, Zusammenbauen der Gesamtlösung aus den Lösungen der Teilprobleme): wird häufig intuitiv gemacht, z.B. beim Spielen

-7- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Grundidee der Rekursion: die Teilprobleme selbst werden wieder nach der gleichen Strategie gelöst. Damit dies funktionieren kann, muss dieses „Aufteilen“ irgendwann stoppen und für die dort vorliegenden „sehr kleinen“ Teilprobleme eine Lösung gefunden werden können ohne wieder die gleiche Strategie anzuwenden. Also:  ein rekursiver Algorithmus ruft sich selbst wieder auf  allerdings für eine „kleinere“ Version des Problems  Es gibt Problemversionen, die klein genug sind, um ohne erneuten Aufruf direkt gelöst werden zu können.

-8- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Beispiele: 1. Berechnung der „triangular numbers“:  es handelt sich um die Folge 1,3,6,10,15,21,...  Das n-te Element erhält man, indem man n zum vorherigen Element addiert. Etwas formaler: int triangular(int n) { return(n + triangular(n-1));// Achtung, noch nicht komplett }

-9- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Die Idee ist wie “das übergeben des schwarzen Peters”:  wenn ich die 9-te triangular-Zahl finden soll, so weiss ich, das ist 9 plus die 8-te triangular-Zahl.  Also frage ich jemanden nach der 8. und warte auf dessen Antwort.  Der macht das genauso usw.  Irgendjemand in der Kette muss allerdings in der Lage sein, eine Antwort zu finden ohne jemanden zu fragen. In unserem Fall muss also jemand wissen, dass die 1. Zahl 1 ist und das reicht.

-10- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Also: int triangular(int n) { if (n==1) return 1; else return(n + triangular(n-1)); }

-11- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen 2. Einfügen in eine sortierte Liste: Offensichtlich ist die Methode insertFirst(NewNode, k) mit  newNode ist Pointer auf das einzufügende Listenelement  k ist First-Pointer der Liste, in die eingefügt werden soll (natürlich mit gleichem Knotentyp)  Jeder Knoten Node hat ein Datenelement Node.data, nach dem sortiert ist sehr einfach.

-12- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Also folgende Grundidee für die Funktion insert: insert (NewNode, k)// k ist First-Pointer einer Liste oder next- Pointer eines vorher besuchten Listenknotens, s.u. { if (NewNode.data < k.data)//richtige Einfügeposition gefunden insertFirst(NewNode,k); else insert(NewNode, k.Next); } Erster Aufruf: sei first First-Pointer der betreffenden Liste: insert (NewNode, first);

-13- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Eines der bekanntesten „Theoriebeispiele“ aus der Literatur: Türme von Hanoi Beispiel im Applet in Vorlesung Lösungsidee mit Rekursion:  Funktion „Umsetzen“ mit 4 Parametern  Anzahl der umzusetzenden Scheiben  „von“-Stab  „nach“-Stab  „Hilfs“-Stab

-14- Prof. Dr. R. Güttler Programmiersprachen 2 Kapitel 2: Folge Datenstrukturen Umsetzen (N,A,B,C):  Umsetzen (N-1,A,C,B)  Setze einen Stein von A nach B (das ist ja jetzt der unterste!)  Umsetzen (N-1,C,B,A) Aufrufbaum?