1 / 36

Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2

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

hashim
Download Presentation

Grundlagen der Algorithmen und Datenstrukturen Kapitel 3.1-3.2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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.

  3. 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

  4. 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)

  5. s[0]: e0 s[1] s[2] s[3] s[4] s[5] …. Nachf. Nachf. Nachf. Nachf. …. e2 e3 s e0 e1 Vorg. Vorg. Vorg. Vorg. 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

  6. 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 ….

  7. 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

  8. 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]

  9. 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]

  10. 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]

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

  12. 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]

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

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

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

  16. 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

  17. 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)

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

  19. 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 0 1 2 3

  20. 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

  21. 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

  22. 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

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

  24. Dynamisches Feld - Analyse Kontenmethode: Spiel mit Zeittokens • GünstigeOperationen 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

  25. 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

  26. 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

  27. 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 giltT(F) <= A(F) := c + i=1n AOpi(si-1)für eine Konstante c unabhängig von F

  28. 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

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

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

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

  32. 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´ definiereAX(s´) := (s´) - (s) + TX(s).Dann sind die Funktionen AX(s) eine Familie amortisierter Zeitschranken. X

  33. 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´

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

  35. 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.

  36. Nächste Woche • Weiter mit Kapitel 3.3: Verkettete Listen

More Related