Grundlagen der Algorithmen und Datenstrukturen Kapitel

Slides:



Advertisements
Ähnliche Präsentationen
Christian Scheideler SS 2009
Advertisements

Eine dynamische Menge, die diese Operationen unterstützt,
Kapitel 3 Arithmetische Schaltkreise
Wiederholung TexPoint fonts used in EMF.
Wiederholung: Ziehen von Elementen
Übungsbetrieb Di neuer Raum HZO 60
Wiederholung Operationen auf Mengen Relationen, Abbildungen/Funktionen
<d,a,s, ,i,s,t, ,e,i,n,e, ,L,i,s,t,e>
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.
Sortieren mit Binären Bäumen
Algorithmentheorie 04 –Hashing
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Prof. Dr. S. Albers Prof. Dr. Th. Ottmann
Halbzeit: Kurze Wiederholung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 09 - Weitere Sortierverfahren Heapsort-Nachtrag Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (11-3 –Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (11-1 –Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27-Selbstanordnende lineare Listen) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (14 Amortisierte worst-case-Analyse Beispiel: Bitwechselkosten eines Dualzählers) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 12 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Union-Find-Strukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
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.
Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF.
Wiederholung Formale Potenzreihen
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 11 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
6 Folgen (Teil II - Datenstrukturen und Algorithmen)
Operationen auf verketteten Listen
Kapitel 2: Datenstrukturen
Diplomarbeit von Daniel Tameling
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Einführung in die Programmierung
Effiziente Algorithmen
1. Die rekursive Datenstruktur Liste 1.1 Warteschlange (Queue)
Diskrete Mathematik II
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
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.
Institut für Theoretische Informatik
Institut für Theoretische Informatik
Institut für Theoretische Informatik
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.
Institut für Theoretische Informatik
Grundlagen der Algorithmen und Datenstrukturen Kapitel
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Christian Scheideler WS 2008
Diskrete Mathematik Angelika Steger Institut für Theoretische Informatik TexPoint fonts used in EMF. Read the TexPoint manual before.
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Stefan Werner (Übungen) sowie viele Tutoren.
Programmiersprachen II Fortsetzung Datenstrukturen Hashing Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Wiederholung Größte gemeinsame Teiler Satz von Bezout:
Wiederholung TexPoint fonts used in EMF.
Kleiner Schreibfehler
 Präsentation transkript:

Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2 Prof. Dr. Christian Scheideler TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAAA

Was passiert mit den Studienbeiträgen? www.in.tum.de/studium/studienbeitraege.html Ihr könnt aktiv bei der Verwendung der Studienbeiträge mitgestalten. Möglichkeiten sich aktiv einzubringen sind beispielsweise die Einreichung von Vorschlägen für Maßnahmen (siehe Website), oder das Engagement in der Fachschaft, welche Eure Interessen vertritt. Eure Mithilfe ist gefragt! Für weitere Fragen, Anregungen oder Kritik wendet Euch bitte an Jochen Reich (Qualitätsmanagement Fakultät für Informatik), Herrn Prof. Dr. Matthes (Studiendekan) oder Eure Fachschaft.

Grundlegende Laufzeitanalyse Eingabe (z.B. unsortierte Liste) Eingabe (z.B. Such-Operationen) Algorithmus (z.B. Bubblesort) Datenstrukturoperationen (z.B. Move-to-Front) Ausgabe (z.B. sortierte Liste) Ausgabe (z.B. Such-Liste) Kapitel 3

Kapitel 3 Thema: Repräsentation von Sequenzen als Felder und verkettete Listen Was ist eine Sequenz? 3.1-3.2: Repräsentation als Feld und amortisierte Analyse 3.3: Repräsentation als verkettete Liste 3.4: Stapel (Stacks) und Schlangen (Queues)

Sequenzen Sequenz: s = <e0,…,en-1> Arten, auf Element zuzugreifen: Feldrepräsentation: absoluter Zugriff über s[i] Listenrepräsentation: relativer Zugriff über Nachfolger und/oder Vorgänger s[0]: e0 s[1] s[2] s[3] s[4] s[5] …. e0 e1 Nachf. Vorg. e2 e3 …. s

Sequenz als Feld Operationen: s[¢]: Index-Operation <e0,…,en>.pushBack(e) = <e0,…,en,e> <e0,…,en>.popBack = <e0,…,en-1> Size(<e0,…,en-1>) = n e0 e1 e2 … en e …. e0 e1 e2 … en-1 ….

Sequenz als Feld Problem: Im vornherein nicht bekannt, wieviele Elemente das Feld enthalten wird Nur Primitiv für Allokation von statischen Feldern gegeben (s := allocate Array[0..w] of Element) Lösung: Datenstruktur für dynamisches Feld

3.1 Dynamisches Feld Erste Idee: Jedesmal, wenn Feld s nicht mehr ausreicht (n>w+1), generiere neues Feld der Größe w+1+c für ein festes c. s[0] s[1] s[2] s[3] …. s[w] Neues allocate und Umkopieren s[0] s[1] s[2] s[3] …. s[w] s[w+1] …. s[w+c]

Dynamisches Feld Zeitaufwand für Erweiterung ist O(w+c): Zeitaufwand für n pushBack Operationen: Aufwand von O(w+c) je c Operationen Gesamtaufwand: O(i=1n/c c¢ i) = O(n2) s[0] s[1] s[2] s[3] …. s[w] Neues allocate und Umkopieren s[0] s[1] s[2] s[3] …. s[w] s[w+1] …. s[w+c]

Dynamisches Feld Bessere Idee: Jedesmal, wenn Feld s nicht mehr ausreicht (n>w), generiere neues Feld der doppelten Größe 2w. Jedesmal, wenn Feld s zu groß ist (n<w/4), generiere neues Feld der halben Größe w/2. s[0] s[1] s[2] s[3] …. s[w-1] s[0] s[1] s[2] s[3] …. s[w-1] s[w] …. s[2w-1]

Dynamisches Feld Implementierung als Klasse UArray mit Operator[i: IN]: Element Function size(): IN Procedure pushBack(e: Element) Procedure popBack() Procedure reallocate(w´: IN)

Dynamisches Feld Variablen in Klasse UArray:  = 2: IR+ Wachstumsfaktor  = 4: IR+ max. Speicheroverhead w=1: IN momentane Feldgröße n=0: IN momentane # Elemente b: Array[0..w-1] of Element b[0] b[1] b[2] b[3] …. b[w-1]

Dynamisches Feld Operator [i:IN]: Element assert 0<=i<n return b[i] Function size(): IN return n

Dynamisches Feld Procedure pushBack(e: Element) if n=w then reallocate(n) b[n]:=e n:=n+1 n=w=4: b 1 2 3 b 1 2 3 b 1 2 3 e

Dynamisches Feld Procedure popBack() assert n>0 n:=n-1 if n<=w and n>0 then reallocate(n) n=5, w=16: b 1 2 3 4 b 1 2 3

Dynamisches Feld } Procedure reallocate(w´: IN) w:=w´ b´:=allocate Array[0..w-1] of Element for i:=0 to n-1 do b´[i]:=b[i] dispose b b:=b´ } Umkopieren

Dynamisches Feld Lemma 3.1: Betrachte ein anfangs leeres dynamisches Feld s. Jede Folge =<1,…,n> von pushBack und popBack Operationen kann auf s in Zeit O(n) bearbeitet werden. Erste Idee: Laufzeit O(n2) Nur durchschnittlich konstante Laufzeit pro Operation (Fachbegriff für „durchschnittlich“: amortisiert)

Dynamisches Feld - Analyse Feldverdopplung: Feldhalbierung: Von Nächste Verdopplung: >= n pushBack Ops Nächste Halbierung: >= n/2 popBack Ops b 1 2 3 b 1 2 3 b 1 2 3 4 b 1 2 3

Dynamisches Feld - Analyse Von Nächste Verdopplung: >= n pushBack Ops Nächste Halbierung: >= n/2 popBack Ops Idee: verrechne reallocate-Kosten mit pushBack/popBack Kosten (ohne realloc) Kosten für pushBack/popBack: O(1) Kosten für reallocate(n): O(n) b 1 2 3

Dynamisches Feld - Analyse Idee: verrechne reallocate-Kosten mit pushBack/popBack Kosten Kosten für pushBack/popBack: O(1) Kosten für reallocate(n): O(n) Formale Verrechnung: Zeugenzuordnung pushB pushB pushB pushB pushB + realloc Reallokation bei n Elementen: bezeugt durch letzte n/2 pushBack Operationen

Dynamisches Feld - Analyse Formale Verrechnung: Zeugenzuordnung Dann jede push/popBack Op nur 1x Zeuge pushB pushB pushB pushB pushB + realloc Reallokation bei n Elementen: bezeugt durch letzte n/2 pushBack Operationen popB popB popB popB popB + realloc Reallokation bei n Elementen: bezeugt durch letzte n popBack Operationen

Dynamisches Feld - Analyse Idee: verrechne reallocate-Kosten mit pushBack/popBack Kosten Kosten für pushBack/popBack: O(1) Kosten für reallocate(n): O(n) Konkret: (n) Zeugen pro reallocate(n) verteile O(n) Aufwand gleichmäßig auf Zeugen Gesamtaufwand: O(m) bei m Operationen

Dynamisches Feld - Analyse Alternative zur Zeugenmethode: Kontenmethode Kontenmethode: Spiel mit Zeittokens Günstige Operationen zahlen Tokens ein Teure Operationen entnehmen Tokens Tokenkonto darf nie negativ werden!

Dynamisches Feld - Analyse Kontenmethode: Spiel mit Zeittokens Günstige Operationen zahlen Tokens ein ! pro pushBack 2 Tokens ! pro popBack 1 Token Teure Operationen entnehmen Tokens ! pro reallocate(n) –n Tokens Tokenkonto darf nie negativ werden! ! erfüllt über Zeugenargument

Dynamisches Feld - Analyse Tokenlaufzeit: Ausführung von push/popBack kostet 1 Token ! Tokenkosten für pushBack: 1+2 = 3 ! Tokenkosten für popBack: 1+1 = 2 Ausführung von reallocate(n) kostet n Tokens ! Tokenkosten für reallocate(n): n-n=0 Gesamtlaufzeit = O(Summe der Tokenlaufzeiten) pushB pushB pushB pushB reallocate

3.2 Amortisierte Analyse S: Zustandsraum einer Datenstruktur F: beliebige Folge von Operationen Op1, Op2, Op3,…,Opn s0: Anfangszustand der Datenstruktur Zeitaufwand T(F) = i=1n TOpi(si-1) Op1 Op2 Op3 Opn s0 s1 s2 …. sn

Amortisierte Analyse Zeitaufwand T(F) = i=1n TOpi(si-1) Eine Familie von Funktionen AX(s), eine pro Operation X, heißt Familie amortisier-ter Zeitschranken falls für jede Sequenz F von Operationen gilt T(F) <= A(F) := c + i=1n AOpi(si-1) für eine Konstante c unabhängig von F

Amortisierte Analyse Triviale Wahl von AX(s): AX(s) := TX(s) Dynamisches Feld (Zeittoken gen. groß): ApushBack(s):=3, ApopBack(s):=2, Arellocate(s):=0 alternative Wahl von AX(s): über Potential :S! IR>=0 ! vereinfacht Beweisführung

Beispiel: Dynamisches Feld reallocate + pushBack (s)=0 b 1 2 3 (s)=2 b 1 2 3 4 (s)=4 b 1 2 3 4 5 (s)=6 b 1 2 3 4 5 6 (s)=8 b 1 2 3 4 5 6 7 reallocate + pushBack (s)=0 b 1 2 3 4 5 6 7 (s)=2 b 1 2 3 4 5 6 7 8

Beispiel: Dynamisches Feld 1 2 3 (s)=2 b 1 2 (s)=4 popBack + reallocate b 1 (s)=0 b 1 Generelle Formel für (s): (ws: Feldgröße von s, ns: Anzahl Einträge) (s) = 2|ws/2 – ns|

Potential ist nicht gleich Konto! b 1 2 3 popBack (s)=2 b 1 2 pushBack (s)=0 b 1 2 3 Konto(s)=0 b 1 2 3 popBack Konto(s)=1 b 1 2 pushBack b 1 2 3 Konto(s)=3

Warum Potential? Theorem 3.3: Sei S der Zustandsraum einer Datenstruktur, sei s0 der Anfangszustand und sei :S ! IR>=0 eine nichtnegative Funktion. Für eine Operation X und einen Zustand s mit s ! s´ definiere AX(s´) := (s´) - (s) + TX(s). Dann sind die Funktionen AX(s) eine Familie amortisierter Zeitschranken. X

Beispiel: Dynamisches Feld Generelle Formel für (s): (ws: Feldgröße von s, ns: Anzahl Einträge) (s) = 2|ws/2 – ns| Theorem 3.3:  nicht negativ, (s0)=1 ApushB(s) =  + TpushB(s) <= 2+1 = 3 ApopB(s) =  + TpopB(s) <= 2+1 = 3 Arealloc(s) =  + Trealloc(s) <= (0-ns)+ns = 0 wobei  = (s´)-(s) für s ! s´

Beispiel: Dynamisches Feld Beweis für Arealloc(s) <= 0: Fall 1: Fall 2: b 1 2 3 b 1 2 3 (s)=ns (s´)=0 b 1 b 1 (s)=2ns (s´)=0

Amortisierte Analyse Die Potentialmethode universal! Theorem 3.4: Sei BX(s) eine Familie amortisierte Zeitschranken. Dann gibt es eine Potentialfunktion , so dass AX(s) <= BX(s) für alle Zustände s und alle Operationen X gilt, wobei AX(s) definiert ist wie in Theorem 3.3. Problem: finde geeignetes Potential! Wenn erstmal gefunden, dann Rest einfach.

Nächste Woche Weiter mit Kapitel 3.3: Verkettete Listen