grundlagen der algorithmen und datenstrukturen kapitel 3.1-3.2
DESCRIPTION
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.: A A A A. Was passiert mit den Studienbeiträgen?. www.in.tum.de/studium/studienbeitraege.html - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/1.jpg)
Grundlagen der Algorithmen und Datenstrukturen
Kapitel 3.1-3.2
Prof. Dr. Christian Scheideler
![Page 2: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/2.jpg)
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 dieEinreichung von Vorschlägen für Maßnahmen (siehe Website), oderdas Engagement in der Fachschaft, welche Eure Interessen vertritt.Eure Mithilfe ist gefragt!
Für weitere Fragen, Anregungen oder Kritik wendet Euch bitte anJochen Reich (Qualitätsmanagement Fakultät für Informatik), HerrnProf. Dr. Matthes (Studiendekan) oder Eure Fachschaft.
![Page 3: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/3.jpg)
Grundlegende Laufzeitanalyse
Eingabe(z.B. unsortierte Liste)
Algorithmus
(z.B. Bubblesort)
Ausgabe(z.B. sortierte Liste)
Eingabe(z.B. Such-Operationen)
Datenstrukturoperationen
(z.B. Move-to-Front)
Ausgabe(z.B. Such-Liste)
Kapitel 3
![Page 4: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/4.jpg)
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)
![Page 5: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/5.jpg)
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
Nachf.
Vorg.e3
Nachf.
Vorg.
Nachf.
Vorg.
….s
![Page 6: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/6.jpg)
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 ….
![Page 7: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/7.jpg)
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
![Page 8: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/8.jpg)
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]….
s[0] s[1] s[2] s[3] s[w]…. s[w+1] s[w+c]….
Neues allocate und Umkopieren
![Page 9: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/9.jpg)
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=1
n/c c¢ i) = O(n2)
s[0] s[1] s[2] s[3] s[w]….
s[0] s[1] s[2] s[3] s[w]…. s[w+1] s[w+c]….
Neues allocate und Umkopieren
![Page 10: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/10.jpg)
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]…. s[w-1] s[2w-1]….
![Page 11: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/11.jpg)
Dynamisches Feld
Implementierung als Klasse UArray mit
• Operator[i: IN]: Element
• Function size(): IN
• Procedure pushBack(e: Element)
• Procedure popBack()
• Procedure reallocate(w´: IN)
![Page 12: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/12.jpg)
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]….
![Page 13: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/13.jpg)
Dynamisches Feld
Operator [i:IN]: Element
assert 0<=i<n
return b[i]
Function size(): IN
return n
![Page 14: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/14.jpg)
Dynamisches Feld
Procedure pushBack(e: Element)
if n=w then
reallocate(n)
b[n]:=e
n:=n+1
0 1 2 3b
0 1 2 3b
0 1 2 eb 3
n=w=4:
![Page 15: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/15.jpg)
Dynamisches Feld
Procedure popBack()
assert n>0
n:=n-1
if n<=w and n>0 then
reallocate(n)
0 1 2 4b
0 1 2b 3
3
n=5, w=16:
![Page 16: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/16.jpg)
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}
![Page 17: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/17.jpg)
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)
![Page 18: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/18.jpg)
Dynamisches Feld - Analyse
• Feldverdopplung:
• Feldhalbierung:
• Von – Nächste Verdopplung: >= n pushBack Ops– Nächste Halbierung: >= n/2 popBack Ops
0 1 2 3b 0 1 2 3b
0 1 2 4b 3
0 1 2 3b
![Page 19: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/19.jpg)
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)
0 1 2 3b
![Page 20: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/20.jpg)
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
![Page 21: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/21.jpg)
Dynamisches Feld - Analyse
• Formale Verrechnung: Zeugenzuordnung
• Dann jede push/popBack Op nur 1x Zeuge
pushB pushB pushB pushB pushB + realloc
popB popB popB popB popB + realloc
Reallokation bei n Elementen: bezeugt durch letzte n/2 pushBack Operationen
Reallokation bei n Elementen: bezeugt durch letzte n popBack Operationen
![Page 22: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/22.jpg)
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
![Page 23: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/23.jpg)
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!
![Page 24: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/24.jpg)
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
![Page 25: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/25.jpg)
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
![Page 26: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/26.jpg)
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)
s0Op1 s1
Op2 s2Op3 sn
Opn….
![Page 27: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/27.jpg)
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
![Page 28: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/28.jpg)
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
![Page 29: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/29.jpg)
Beispiel: Dynamisches Feld
0 1 2 3b
0 1 2 3b
0 1 2 3b
4
4 5
0 1 2 3b 4 5 6
0 1 2 3b 4 5 6 7
0 1 2 4b 3 5 6 7
s)=0
s)=2
s)=4
s)=6
s)=8
s)=0
reallocate+
pushBack
0 1 2 4b 3 5 6 7 8 s)=2
reallocate+
pushBack
![Page 30: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/30.jpg)
Beispiel: Dynamisches Feld
0 1 2 3b s)=0
0 1 2b s)=2
0 1b s)=4
0 1b
popBack+
reallocate s)=0
Generelle Formel für (s): (ws: Feldgröße von s, ns: Anzahl Einträge)
s) = 2|ws/2 – ns|
![Page 31: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/31.jpg)
Potential ist nicht gleich Konto!
0 1 2 3b s)=0
0 1 2b s)=2
0 1 2 3b s)=0pushBack
popBack
0 1 2 3b Konto(s)=0
0 1 2b
0 1 2 3bpushBack
popBackKonto(s)=1
Konto(s)=3
![Page 32: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/32.jpg)
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
![Page 33: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/33.jpg)
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´
![Page 34: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/34.jpg)
Beispiel: Dynamisches Feld
Beweis für Arealloc(s) <= 0:
• Fall 1:
• Fall 2:
0 1b 0 1 2 3b2 3
s)=ns s´)=0
0 1b 0 1b
s)=2ns s´)=0
![Page 35: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/35.jpg)
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.
![Page 36: Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2](https://reader036.vdocument.in/reader036/viewer/2022062322/568144d3550346895db19b67/html5/thumbnails/36.jpg)
Nächste Woche
• Weiter mit Kapitel 3.3: Verkettete Listen