Algorithmen und Datenstrukturen 3. Vorlesung
|
|
- Mareke Blau
- vor 5 Jahren
- Abrufe
Transkript
1 Algorithmen und Datenstrukturen 3. Vorlesung Martin Dietzfelbinger 1. April 008 FG KTuEA, TU Ilmenau AuD
2 Einfache Datentypen und Datenstrukturen Stacks (Keller, Stapel, LIFO-Speicher) Queues (Warteschlangen, FIFO-Speicher) Mengen Wörterbücher Folgen FG KTuEA, TU Ilmenau AuD
3 Stack (Stapel, Keller, LIFO-Speicher ) Last-In-First-Out FG KTuEA, TU Ilmenau AuD
4 Stack (Stapel, Keller, LIFO-Speicher ) empty Last-In-First-Out FG KTuEA, TU Ilmenau AuD
5 Stack (Stapel, Keller, LIFO-Speicher ) empty push() Last-In-First-Out FG KTuEA, TU Ilmenau AuD
6 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() Last-In-First-Out FG KTuEA, TU Ilmenau AuD
7 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() push(7) 7 Last-In-First-Out FG KTuEA, TU Ilmenau AuD
8 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() push(7) 7 pop 7 Last-In-First-Out FG KTuEA, TU Ilmenau AuD
9 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() push(7) 7 1 push(1) pop 7 Last-In-First-Out FG KTuEA, TU Ilmenau AuD
10 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() push(7) 7 1 top 1 push(1) pop 1 7 Last-In-First-Out FG KTuEA, TU Ilmenau AuD
11 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() push(7) 7 isempty? 1 top 1 1 push(1) 7 pop false 1 Last-In-First-Out FG KTuEA, TU Ilmenau AuD
12 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() push(7) 7 isempty? 1 top 1 1 push(1) 7 pop false 1 pop 1 Last-In-First-Out FG KTuEA, TU Ilmenau AuD
13 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() push(7) 7 isempty? 1 top 1 1 push(1) 7 pop false 1 pop pop 1 Last-In-First-Out FG KTuEA, TU Ilmenau AuD
14 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() push(7) 7 isempty? 1 top 1 1 push(1) 7 pop false 1 pop pop pop 1 Last-In-First-Out FG KTuEA, TU Ilmenau AuD
15 Stack (Stapel, Keller, LIFO-Speicher ) empty push() push() push(7) 7 isempty? 1 top 1 1 push(1) 7 pop false 1 pop pop pop isempty? 1 true Last-In-First-Out FG KTuEA, TU Ilmenau AuD
16 Was sollen die Operationen bewirken? Informal: Als Stackeinträge zugelassen sind Elemente einer Menge D (Parameter). empty(()): erzeuge leeren Stack (Konstruktor). push(s, x): lege neues Element x D auf den Stack s. pop(s): entferne oberstes Element von Stack s und gib es aus (falls nicht vorhanden: Fehler) top(s): gib oberstes Element von Stack s aus (falls nicht vorhanden: Fehler) isempty(s): Ausgabe true falls Stack s leer, false sonst. Brauchen: Präzise Beschreibung FG KTuEA, TU Ilmenau AuD
17 Spezifikation des Datentyps Stack über D 1. Signatur: Sorten: Operationen: Elements Stacks Boolean empty: Stacks push: Stacks Elements Stacks pop: Stacks Stacks Elements top: Stacks Elements isempty: Stacks Boolean Namen von Objekttypen, Namen von Operationen mit Angabe der Typen von Argument(en) und Resultat(en). Rein syntaktische Vorschriften! Verhalten (noch) ungeklärt! FG KTuEA, TU Ilmenau AuD
18 Spezifikation des Datentyps Stack über D. Mathematisches Modell Sorten: Elements: (nichtleere) Menge D (Parameter) Stacks: D < = Seq(D) wo Seq(D) = {(a 1,..., a n ) n N, a 1,..., a n D} Boolean: {true, false} bzw. {1, 0} Objekttypen werden durch Mengen modelliert. Die leere Folge () stellt den leeren Stack dar. FG KTuEA, TU Ilmenau AuD
19 Spezifikation des Datentyps Stack über D. Mathematisches Modell (Forts.) Operationen: empty() = () push((a 1,..., a n ), x) := (x, a 1,..., a n ) pop((a 1,..., a n )) := top((a 1,..., a n )) := { ((a,..., a n ), a 1 ), falls n 1 undefiniert, falls n = 0 { a1, falls n 1 undefiniert, falls n = 0 isempty((a 1,..., a n )) := { false, falls n 1 true, falls n = 0 Operationen werden durch Funktionen modelliert. FG KTuEA, TU Ilmenau AuD
20 Spezifikation des Datentyps Stack über D Alternative: Axiome (siehe z.b. Saake/Sattler, AuD, Kap. 11) Signatur: wie oben. Axiome: s: Stacks, x : Elements pop(push(s, x)) = (s, x) top(push(s, x)) = x isempty(empty()) = true isempty(push(s, x)) = false Vorteil: Zugänglich für automatisches Beweisen von Eigenschaften der Datenstruktur. Nachteil: Finden eines geeigneten Axiomensystems evtl. nicht einfach. FG KTuEA, TU Ilmenau AuD
21 Implementierung von Stacks Grundsätzlich, in objektorientierter Sprache: als Klasse. Kapselung Information Hiding Signatur = Interface (Java) bzw. h-datei (C++) Parameter: Typ elements. Instanzen sind die Elemente der Menge D. (Mindestens) Zwei Möglichkeiten für innere Realisierung: verkettete Liste Array FG KTuEA, TU Ilmenau AuD
22 Listenimplementierung von Stacks (siehe z.b. Saake/Sattler, AuD, Kap. 13.) s: 1 a a a n (Das Symbol s.empty: Erzeuge leere Liste. s: steht für den Nullzeiger) s.push(x): Setze neuen Listenknoten mit Eintrag x an den Anfang der Liste. s: x a 1 a a n FG KTuEA, TU Ilmenau AuD
23 Listenimplementierung von Stacks s.pop: Entferne ersten Listenknoten (falls vorhanden) und gib Inhalt zurück. s: a a n a 1 s.top: Gib Inhalt des ersten Listenknotens aus (falls vorhanden) s: 1 a a a n FG KTuEA, TU Ilmenau AuD
24 Listenimplementierung von Stacks s.isempty: Falls Liste leer: Ausgabe true, sonst false s: a s: 1 Einzige Fehlermöglichkeit: Speicherüberlauf bei s.push(x). FG KTuEA, TU Ilmenau AuD
25 Korrektheit der Listenimplementierung Wir betrachten eine Folge Op 0 = empty, Op 1,..., Op N von Stackoperationen, wobei empty nur ganz am Anfang vorkommen darf. Diese Folge erzeugt im mathematischen Modell eine Folge (s 0, s 1, s,..., s N ) von Stacks (Tupeln) (man wende die Operationen in der offensichtlichen Weise an) und eine Folge (z 0, z 1, z,..., z N ) von Ausgaben. FG KTuEA, TU Ilmenau AuD
26 Korrektheit der Listenimplementierung Dabei liefern Op 0 = empty() und Op i = push(x) die Ausgabe. Die Operationen Op i = top und Op i = pop liefern normalerweise die erste Komponente von s i 1 als Ausgabe. Fehlerfall: Wenn j minimal ist, so dass Op j = top oder Op j = pop ist, wobei s j 1 = (), dann ist s j = = s N = und z j = = z N =. Die Operation Op i = isempty liefert true, wenn s i 1 = () gilt, und false, wenn s i 1 (). FG KTuEA, TU Ilmenau AuD
27 Korrektheit der Listenimplementierung Beispiel: OP i s i z i empty () push() () push() (, ) push(7) (7,, ) pop (, ) 7 push(1) (1,, ) top (1,, ) 1 isempty (1,, ) false pop (, ) 1 pop () pop () isempty () true pop push(3)... FG KTuEA, TU Ilmenau AuD
28 Korrektheit der Listenimplementierung Behauptung: Die Listenimplementierung erzeugt genau dieselbe Ausgabefolge wie das mathematische Modell, solange weder im mathematischen Modell ein Fehler (top oder pop auf leerem Stack) auftritt noch bei (push(x)) in der Implementierung ein Laufzeitfehler Speicherüberlauf eintritt. Beweis: Man zeigt per Induktion über i, dass nach Ausführen der Operation Op i folgende Behauptung (IB i ) gilt: Die Einträge in der Liste sind genau die Einträge in s i die Liste ist eine präzise Darstellung von s i. Daraus folgt unmittelbar, dass die Ausgabe bei der Implementierung mit der im mathematischen Modell übereinstimmt. FG KTuEA, TU Ilmenau AuD
29 Zeitaufwand bei Listenimplementierung Behauptung: Bei der Listenimplementierung hat jede einzelne Operation Kosten O(1). Das ist klar. Kosteneinheit für push(x) allerdings: Allokation eines Listenknotens Systemaufruf ( malloc in C) um einiges teurer als Arrayzugriff. FG KTuEA, TU Ilmenau AuD
30 Arrayimplementierung von Stacks (Vgl. Saake/Sattler, AuD, Kap. 13.1) Das Stackobjekt heißt s; es hat als Komponenten einen Zeiger/eine Referenz auf ein Array A und eine Integervariable p ( Pegel ). s: p: n 1 n m A: a n a a 1 * * * * steht für einen beliebigen Eintrag. s.empty: ( Option: m als Parameter ) Erzeuge Array A[1..m] of elements und Variable p: int ; p 0; FG KTuEA, TU Ilmenau AuD
31 Arrayimplementierung von Stacks s.push(x): if p = A.length then Fehler (z.b. OverflowException) else p p+1; A[p] x; s.pop: if p = 0 then Fehler (z.b. StackemptyException) else p p-1; return A[p+1]; s.top: if p = 0 then Fehler (z.b. StackemptyException) else return A[p]; s.isempty: if p = 0 then return true else return false ; FG KTuEA, TU Ilmenau AuD
32 Korrektheit der Arrayimplementierung Wie vorher: Gegeben ist eine Folge Op 0 = empty, Op 1,..., Op N von Stackoperationen, wobei empty nur ganz am Anfang vorkommen darf, die im mathematischen Modell eine Folge (s 0, s 1, s,..., s N ) von Stacks (Tupeln) und eine Folge von Ausgaben erzeugt. (z 0, z 1, z,..., z N ) FG KTuEA, TU Ilmenau AuD
33 Korrektheit der Arrayimplementierung Behauptung: Die Arrayimplementierung erzeugt genau dieselbe Ausgabefolge wie das mathematische Modell, solange weder im mathematischen Modell ein Fehler (top oder pop auf leerem Stack) auftritt noch die Höhe des Stacks s i die Arraygröße m überschreitet. Beweis: Man beweist durch Induktion über i = 0, 1,..., N, dass nach Ausführen der Operation Op i folgende Invariante gilt (falls keiner der genannten Fehler aufgetreten ist): p enthält die Länge n i von s i und s i = (A[n i ],..., A[1]) D. h.: Der Teil A[1..n i ] des Arrays stellt genau s i dar (in umgekehrter Reihenfolge). FG KTuEA, TU Ilmenau AuD
34 Korrektheit der Arrayimplementierung Beachte: Der Teil A[n i + 1..m] des Arrays kann völlig beliebige Einträge enthalten. D.h.: Ein Stack s im Sinn des mahematischen Modells kann durch verschieden beschriftete Arrays A[1..m] dargestellt werden. I.A.: i = 0. Anfänglich hat p den Inhalt n 0 = 0. (A[n i ],..., A[1]) ist die leere Folge (), also gleich s 0. I.V.: i > 0, und die Behauptung gilt für i 1. FG KTuEA, TU Ilmenau AuD
35 Korrektheit der Arrayimplementierung I.S.: Es gibt verschiedene Fälle. Fall 0a: s i 1 =, d. h., vorher ist im mathematischen Modell ein Fehler eingetreten. Dann ist nichts zu zeigen. Fall 0b: In Schritten 1,..., i 1 ist in der Implementierung ein Fehler aufgetreten. Dann ist ebenfalls nichts zu zeigen. Ab hier ist also s i 1 = (a 1,..., a ni 1 ), p hat den Inhalt n i 1 und s i 1 = (A[n i 1 ],..., A[1]). FG KTuEA, TU Ilmenau AuD
36 Korrektheit der Arrayimplementierung Man muss nun unterscheiden, was für eine Operation Op i ist. Fall 1: Op i = s.push(x). Dann ist s i = (x, a 1,..., a ni 1 ). Wenn n i 1 < m ist, wird von der Prozedur s.push(x) das Objekt x an die Stelle A[n i 1 + 1] gesetzt und p auf den Wert n i = n i erhöht, woraus die Induktionsbehauptung folgt. Wenn n i 1 = m ist, tritt in der Implementierung ein Fehler ein, und die Behauptung ist trivialerweise erfüllt. Die anderen Fälle, entsprechend den anderen Operationen, behandelt man analog. (Übung.) FG KTuEA, TU Ilmenau AuD
37 Zeitaufwand der Arrayimplementierung Behauptung: Bei der Arrayimplementierung hat jede einzelne Operation Kosten O(1). Das sieht man durch Betrachtung der einzelnen Operationen. Bei der Initialisierung empty() darf das Array nur allokiert, nicht initialisiert werden. Man beobachte, dass hierdurch die Korrektheit nicht beeinträchtigt wird. FG KTuEA, TU Ilmenau AuD
38 Arrayimplementierung ohne Platzprobleme? Verdoppelungsstrategie In push(x): Bei Überlaufen des Arrays A nicht einen Laufzeitfehler (oder eine exception) generieren, Vorher: s: p: A: m 1 an a a 1 n=m Nachher: s: p: m +1 A: 1 m an a a 1 m x * * FG KTuEA, TU Ilmenau AuD
39 Arrayimplementierung ohne Platzprobleme? Verdoppelungsstrategie In push(x): Bei Überlaufen des Arrays A nicht einen Laufzeitfehler (oder eine exception) generieren, sondern ein neues, doppelt so großes Array AA allokieren. Einträge aus A nach AA kopieren. AA in A umbenennen/referenz umsetzen. (altes Array freigeben). Kosten: Θ(m), wo m = aktuelle Zahl der Einträge. FG KTuEA, TU Ilmenau AuD
40 Kostenanalyse bei Verdoppelungsstrategie: Operationenfolge Op 0 = empty, Op 1,..., Op N Arraygröße am Anfang: m 0. Jede Operation hat Kosten O(1), außer wenn die Arraygröße von m 0 i 1 auf m 0 i wächst. Hier entstehen Kosten Θ(m 0 i 1 ). FG KTuEA, TU Ilmenau AuD
41 k := Anzahl der push-operationen in Op 1,..., Op N Zahl der Einträge immer k, also bei Verdopplung m 0 i 1 m 0 i : m 0 i 1 < k. Sei L maximal mit m 0 L 1 < k. Gesamtkosten für die Verdopplungen also: O(m 0 i 1 ) 1 i L = O ( m 0 ( L 1 ) ) = O ( m 0 L) = O(k). Gesamtkosten: N Θ(1) + O(k) = Θ(N). FG KTuEA, TU Ilmenau AuD
42 Satz Wenn ein Stack mit Arrays und der Verdoppelungsstrategie implementiert wird, betragen die Gesamtkosten für N Operationen O(N). Bemerkung: Bei der Verdoppelungsstrategie gilt weiter: Der gesamte Platzbedarf ist O(k), wenn k die maximale je erreichte Stackhöhe ist. Selbst wenn der Speicher nie bereinigt wird (kleinere, jetzt unbenutzte Arrays nicht freigegeben werden), tritt ein Speicherüberlauf erst ein, wenn die Zahl der Stackeinträge zu einem bestimmten Zeitpunkt mehr Speicher beansprucht als 1 des gesamten zur Verfügung stehenden Speichers. (Beweis: Übung.) FG KTuEA, TU Ilmenau AuD
43 Vergleich Listen-/Arrayimplementierung Arrayimplementierung: amortisiert (im Durch- O(1) Kosten pro Operation, schnitt über alle Operationen), Sequentieller, indexbasierter Zugriff im Speicher (cachefreundlich), Höchstens 50% des allokierten Speicherplatzes ungenutzt. Listenimplementierung: O(1) Kosten pro Operation im schlechtesten Fall (Allokierungskosten), Zusätzlicher Platz für Zeiger benötigt. FG KTuEA, TU Ilmenau AuD
44 Queues Warteschlangen FIFO-Listen First-In-First-Out Idee (siehe AuP-Vorlesung): vorne "head" hinten "tail" isempty: false first: 3 enqueue(5): dequeue: FG KTuEA, TU Ilmenau AuD
45 Spezifikation des Datentyps Queue über D 1. Signatur: Sorten: Operationen: Elements Queues Boolean empty: Queues enqueue: Queues Elements Queues dequeue: Queues Queues Elements first: Queues Elements isempty: Queues Boolean Beachte: Die Signatur ist identisch zur Signatur von Stacks bis auf Umbenennungen. Rein syntaktische Vorschriften! Verhalten (noch) ungeklärt! FG KTuEA, TU Ilmenau AuD
46 Spezifikation des Datentyps Queue über D. Mathematisches Modell Sorten: Elements: (nichtleere) Menge D (Parameter) Queues: Seq(D) Boolean: {true, false} Die leere Folge () stellt die leere Warteschlange dar. FG KTuEA, TU Ilmenau AuD
47 Spezifikation des Datentyps Queue über D. Mathematisches Modell (Forts.) Operationen: empty() = () enqueue((a 1,..., a n ), x) := (a 1,..., a n, x) dequeue((a 1,..., a n )) := { ((a,..., a n ), a 1 ), falls n 1 undefiniert, falls n = 0 first((a 1,..., a n )) := { a1, falls n 1 undefiniert, falls n = 0 isempty((a 1,..., a n )) := { false, falls n 1 true, falls n = 0 FG KTuEA, TU Ilmenau AuD
48 Listenimplementierung von Queues Implementierung mittels einfach verketteter Listen: Übung. Skizze: vorne hinten head: tail: FG KTuEA, TU Ilmenau AuD
49 Arrayimplementierung von Queues vorne "head" hinten "tail" * * * m m 1 0 * * * * 1 * * * 3 * * head: tail: h t t * * * * h FG KTuEA, TU Ilmenau AuD
50 Arrayimplementierung von Queues Implementierung mittels Arrays, zirkulär benutzt: In Array A[0..m 1] sind durch den Inhalt h von head und den Inhalt t von tail zwei Positionen markiert. Die Idee ist, dass die Arrayeinträge A[h],A[h + 1],...,A[t 1] die Einträge (a 1,..., a n ) der Warteschlange bilden, von vorne nach hinten. Dabei werden die Indizes modulo m gerechnet; auf m 1 folgt also 0. Die Zelle A[t] ist immer leer. Um x einzufügen, wird (solange Platz ist), x an die Stelle A[tail] geschrieben und dann tail um 1 erhöht. FG KTuEA, TU Ilmenau AuD
51 Arrayimplementierung von Queues (Forts.) Die maximale Zahl der Einträge im Array (die Kapazität) ist m 1, da die Zelle mit Index t immer leer ist. Um in einer nichtleeren Warteschlange dequeue auszuführen, wird z = A[head] gemerkt, head wird um 1 weitergezählt (modulo m), und z wird zurückgegeben. Wenn bei einem dequeue die Warteschlange komplett geleert wird, steht in head und tail derselbe Wert. Wir benutzen die Bedingung head = tail als Test dafür, ob die Warteschlange leer ist. Um die Warteschlange (bei empty()) als leer zu initialisieren, setzen wir head und tail auf denselben Wert, z.b. 0. FG KTuEA, TU Ilmenau AuD
52 Arrayimplementierung von Queues (Forts.) Wenn beim Einfügen die Variable tail denselben Wert erhalten würde wie head, würde nachher A[tail] einen Queue- Eintrag enthalten. Diese Situation muss also einen Überlauf auslösen. Implementierung der Operationen auf einer Queue q: q.empty(): ( Konstruktor; Option: m als Argument ) Erzeuge Array A[0..m 1] of elements und Variable head, tail: int ; head 0; tail 0; q.isempty: if head = tail then return true else return false ; FG KTuEA, TU Ilmenau AuD
53 q.first: if head = tail then Fehler (z.b. QEmptyException) else return A[head] ; q.dequeue: if head = tail then Fehler (z.b. QEmptyException) else z A[head]; head (head + 1) mod m; return z q.enqueue(x): tt (tail + 1) mod m; if tt = head then Fehler (z.b. QOverflowException) else A[tail] x ; tail tt ; FG KTuEA, TU Ilmenau AuD
54 Alternative zu Overflow-Exception: Erzeugen eines neuen Arrays AA[0..m 1] (mit Kapazität m 1); Umkopieren der Einträge A[head], A[(head + 1) mod m],..., A[(tail 1) mod m] in AA[0], AA[1],..., AA[m ]; head 0; tail m 1; A[tail] x ; tail++ ; Umbenennen von AA in A. FG KTuEA, TU Ilmenau AuD
55 Satz Die angegebene Arrayimplementierung einer Queue über D ist korrekt, ohne Verdoppelungsstrategie, solange kein Fehler im Modell und kein Überlauf im Array eintritt; mit Verdoppelungsstrategie, solange kein Fehler im Modell und kein Speicherüberlauf auftritt. Beweis: Wir betrachten eine Folge Op 0 = empty, Op 1,..., Op N von Queueoperationen, wobei empty nur ganz am Anfang vorkommen darf. FG KTuEA, TU Ilmenau AuD
56 Man zeigt dann durch Induktion über i = 0,..., N, dass unter der Annahme, dass im mathematischen Modell kein Fehler auftritt, folgende Behauptung (IB) i gilt: Wenn nach Operationen Op 0, Op 1,..., Op i der Inhalt der Queue q i = (a 1,..., a ni ) ist, dann stehen nach Ausführung der Operationen in der Implementierung die Elemente a 1,..., a ni in den Positionen A[h],A[h + 1],...,A[t 1], (Indizes modulo m gerechnet), wobei h der Inhalt von head und t der Inhalt von tail ist. Insbesondere ist die Warteschlange leer genau dann wenn h = t ist. FG KTuEA, TU Ilmenau AuD
57 Satz Wenn eine Queue mit Arrays und der Verdoppelungsstrategie implementiert wird, sind die Gesamtkosten für N Operationen O(N). Beweis: Genauso wie bei Stacks. Bemerkung: Bei der Verdoppelungsstrategie gilt weiter: Der gesamte Platzbedarf ist O(k), wenn k die maximale je erreichte Länge der Queue ist. FG KTuEA, TU Ilmenau AuD
58 Einfachste Datenstrukturen für (endliche) Mengen Modelliere: Endliche Mengen über D. Intuitive Aufgabe: Speichere eine veränderliche Menge S D, S endlich, mit Operationen: Initialisierung: S ; ( anfangs ist S leer ) Suche: x S?; ( teste ob x in S ist ) Hinzufügen: S S {x}; ( füge x zu S hinzu ) Löschen: S S {x}. ( entferne x aus S ) FG KTuEA, TU Ilmenau AuD
59 1. Signatur: Datentyp Dynamische Menge Sorten: Operationen: Elements Sets Boolean empty: Sets insert: Sets Elements Sets delete: Sets Elements Sets member: Sets Elements Boolean member : englisch für Element (einer Menge). Statt member heißt die Operation oft auch lookup. FG KTuEA, TU Ilmenau AuD
60 Datentyp Dynamische Menge. Mathematisches Modell: Modellierung einer Menge als endliche Menge von Objekten: Sorten: Elements: (nichtleere) Menge D (Parameter) Sets: P < (D) = {S D S endlich} Boolean: {true, false} FG KTuEA, TU Ilmenau AuD
61 Operationen: Datentyp Dynamische Menge empty() = insert(s, x) := S {x} delete(s, x) := S {x} { true, falls x S member(s, x) := false, falls x / S FG KTuEA, TU Ilmenau AuD
62 Beachte: Datentyp Dynamische Menge Ganz nebenbei wird das Verhalten des Datentyps bei den Sonderfällen bei insert(s, x) ist x schon in S bei delete(s, x) ist x nicht in S ohne Möglichkeit von Missverständnissen spezifiziert. FG KTuEA, TU Ilmenau AuD
63 Implementierungsmöglichkeiten (A) Einfach verkettete Liste oder Array mit Wiederholung : {1,, 5, 7, 11} darstellbar als list: bzw h 11 7 * * * m * * * * pegel: h FG KTuEA, TU Ilmenau AuD
64 Operationen: empty: erzeuge leere Liste / leeres Array A[1..m] member(x): durchsuche Liste / Array nach (erstem Auftreten von) x insert(x): füge x vorne in Liste ein bzw. füge x rechts von der Pegelposition in Array ein delete(x): suche und entferne alle Vorkommen von x in Liste bzw. Array Wie vermeidet man das Entstehen von Lücken im Array? Wenn A[j] zu entfernen ist: A[j] A[pegel]; pegel--; (Vorsicht: Nun erneut testen, ob A[j] = x ist.) FG KTuEA, TU Ilmenau AuD
65 Operationen mit Zeitbedarf h = gegenwärtige Pegelhöhe/Listenlänge empty: erzeuge leere Liste / leeres Array A[1..m] O(1) member(x): durchsuche Liste / Array nach (erstem Auftreten von) x O(h) insert(x): füge x vorne in Liste ein bzw. füge x rechts von der Pegelposition in Array ein O(1) delete(x): suche und entferne alle Vorkommen von x in Liste bzw. Array O(h) Nachteil: Wenn sehr oft schon vorhandene Elemente eingefügt werden, kann der Umfang der Liste viel größer als S werden, mit entsprechenden Auswirkungen auf Platzbedarf und Zeitaufwand. FG KTuEA, TU Ilmenau AuD
66 (B) Einfach verkettete Liste oder Array ohne Wiederholung: Mögliche Darstellung der Menge {1,, 3, 5, 7, 8, 11}: list: bzw h * * * m * * * * pegel: h Variable pegel enthält stets S. FG KTuEA, TU Ilmenau AuD
67 (B) Einfach verkettete Liste oder Array ohne Wiederholung: Vorteil: Platz für S D ist genau S Array-/Listeneinträge. Nachteil: Bei insert, delete, member jeweils lineare Suche nötig. Rechenaufwand in allen Fällen Θ( S ). FG KTuEA, TU Ilmenau AuD
68 (C) Einfach verkettete Liste oder Array aufsteigend sortiert nur möglich bei Vorhandensein von Sortierschlüsseln aus (U, <) in jedem x D: key : D U. In Beispielen: D = U, key(x) = x. Darstellung der Menge {1,, 3, 5, 7, 8, 11} über D = U = N: list: bzw h * * * m * * * * pegel: h Variable pegel enthält stets S. FG KTuEA, TU Ilmenau AuD
69 Einfach verkettete Liste aufsteigend sortiert: Vorteil: Kann Suche nach x abbrechen, sobald ein Listeneintrag x erreicht wird. Mittlere Anzahl von Vergleichen bei Suche nach einem der Einträge a 1 < < a n : wenn für jedes i gilt: Pr(x = a i ) = 1 n ( n) 1 n = n + 1. FG KTuEA, TU Ilmenau AuD
70 Mittlere Anzahl von Vergleichen bei Suche nach einem x / {a 1,..., a n } (1 Vergleich für Entscheidung zwischen <, =, >): wenn gilt: für jedes i, i n, ist Pr(a i 1 < x < a i ) = 1 n+1 und Pr(x < a 1 ) = Pr(a n < x) = 1 n+1 : ( n + n) 1 n + 1 < n + 1. Dies gilt ebenfalls für die Einfüge- und die Lösch-Operation. FG KTuEA, TU Ilmenau AuD
71 Array, aufsteigend sortiert: Nachteil: insert, delete: Verschieben vieler Elemente nötig, um die Ordnung zu erhalten und dabei das Entstehen von Lücken zu vermeiden. Zeitaufwand: Θ( S ) Vorteil: member: Kann binäre Suche benutzen. FG KTuEA, TU Ilmenau AuD
72 Gesehen gekonnt? Spezifikation einfacher Datentypen mittels Signatur und mathematischem Modell Listenimplementierung von Stacks und Queues Arrayimplementierung von Stacks und Queues Korrektheitsbegriff für Implementierungen Korrektheitsbeweise (Induktion) Verdoppelungsstrategie mit (amortisierter) Analyse Spezifikation und einfache Implementierungen für den Datentyp (endliche) Menge Aufwandsbetrachtungen für Datenstrukturen FG KTuEA, TU Ilmenau AuD
SS10 Algorithmen und Datenstrukturen 2. Kapitel Fundamentale Datentypen und Datenstrukturen
SS10 Algorithmen und Datenstrukturen 2. Kapitel Fundamentale Datentypen und Datenstrukturen Martin Dietzfelbinger April 2010 FG KTuEA, TU Ilmenau Algorithmen und Datenstrukturen SS10 Kapitel 2 Datentyp
MehrAlgorithmen und Datenstrukturen 3. Vorlesung
Algorithmen und Datenstrukturen 3. Vorlesung Martin Dietzfelbinger 18. April 2005 Stacks Queues Listen... Datentypen und Datenstrukturen FG KTuEA, TU Ilmenau AuD 18.04.2005 FG KTuEA, TU Ilmenau AuD 18.04.2005
Mehr12. Dynamische Datenstrukturen
Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Implementationsvarianten der verketteten Liste 0 04 Motivation: Stapel ( push, pop, top, empty
Mehr16. Dynamische Datenstrukturen
Datenstrukturen 6. Dynamische Datenstrukturen Eine Datenstruktur organisiert Daten so in einem Computer, dass man sie effizient nutzen kann. Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange
MehrGrundlegende Datentypen
Foliensatz 4 Michael Brinkmeier Technische Universität Ilmenau Institut für Theoretische Informatik Sommersemester 2009 TU Ilmenau Seite 1 / 50 Grundlegende Datentypen TU Ilmenau Seite 2 / 50 Atomare Datentypen
MehrWiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute
Wiederholung: Zusammenfassung Felder Algorithmen und Datenstrukturen (für ET/IT) Wintersemester / Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Ein Feld A kann repräsentiert
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion
MehrCounting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit
Counting-Sort Counting - Sort ( A,B,k ). for i to k. do C[ i]. for j to length[ A]. do C[ A[ j ] C[ A[ j ] +. > C[ i] enthält Anzahl der Elemente in 6. for i to k. do C[ i] C[ i] + C[ i ]. > C[ i] enthält
Mehr8 Elementare Datenstrukturen
Algorithmen und Datenstrukturen 186 8 Elementare Datenstrukturen In diesem und dem folgenden Kapitel werden grundlegende Techniken der Darstellung und Manipulation dynamischer Mengen auf Computern vorgestellt.
MehrAbstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.
Abstrakte Datentypen und Datenstrukturen/ Einfache Beispiele Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Datenstruktur (DS): Realisierung
MehrOrganisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Feld. Definition Feld
Organisatorisches Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 208 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München TUMonline-Einträge: Vorlesung https://campus.tum.de/tumonline/wblv.
Mehr11. Elementare Datenstrukturen
11. Elementare Datenstrukturen Definition 11.1: Eine dynamische Menge ist gegeben durch eine oder mehrer Mengen von Objekten sowie Operationen auf diesen Mengen und den Objekten der Mengen. Dynamische
MehrALP II Dynamische Datenmengen Datenabstraktion
ALP II Dynamische Datenmengen Datenabstraktion O1 O2 O3 O4 SS 2012 Prof Dr Margarita Esponda M Esponda-Argüero 1 Dynamische Datenmengen Dynamische Datenmengen können durch verschiedene Datenstrukturen
MehrAlgorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2016 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Programm heute 1 Einführung 2 Grundlagen von Algorithmen
Mehr13. Dynamische Datenstrukturen
Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Sortierte Liste 40 40 Motivation: Stapel ( push, pop, top, empty ) Wir brauchen einen neuen
MehrInformatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 6 (14.5.2014) Abstrakte Datentypen, Einfache Datenstrukturen Algorithmen und Komplexität Abstrakte Datentypen : Beispiele Dictionary: (auch:
MehrProgramm heute. Algorithmen und Datenstrukturen (für ET/IT) Feld als sequentielle Liste. Definition Feld
Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 205 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Einführung 2 Grundlagen von Algorithmen
MehrAlgorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2014 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 2 Programm heute 1 Einführung 2 Grundlagen von Algorithmen
Mehr1 Abstrakte Datentypen
1 Abstrakte Datentypen Spezifiziere nur die Operationen! Verberge Details der Datenstruktur; der Implementierung der Operationen. == Information Hiding 1 Sinn: Verhindern illegaler Zugriffe auf die Datenstruktur;
MehrAlgorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 2014 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 2 Programm heute 1 Einführung 2 Grundlagen von Algorithmen
MehrEinführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper
Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen Sebastian Küpper Unzulänglichkeit von Feldern Wenn ein Unternehmen alle Rechnungen eines Jahres verwalten möchte,
MehrProgramm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Feld. Feld als sequentielle Liste
Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 204 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Einführung 2 Grundlagen von Algorithmen
MehrAbstrakte Datentypen und Datenstrukturen
Abstrakte Datentypen und Datenstrukturen Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 3. VO DAP2 SS 2008 15. April 2008 1 Überblick ADT Sequence ADT Stack
MehrALP II Dynamische Datenmengen Datenabstraktion (Teil 2)
ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 49 Einfach verkettete Listen O1 O2 O3 50 Einführung Einfach verkettete Listen sind die einfachsten
MehrInformatik II, SS 2016
Informatik II - SS 2016 (Algorithmen & Datenstrukturen) Vorlesung 6 (6.5.2016) Abstrakte Datentypen, Einfache Datenstrukturen Algorithmen und Komplexität Abstrakte Datentypen : Beispiele Dictionary: (auch:
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda 1. Sortierte Listen 2. Stacks & Queues 3. Teile und Herrsche Nächste Woche: Vorrechnen (first-come-first-served)
MehrAlgorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing
Algorithmen I Tutorium 1-3. Sitzung Dennis Felsing dennis.felsing@student.kit.edu www.stud.uni-karlsruhe.de/~ubcqr/algo 2011-05-02 Überblick 1 Sortieren und Suchen 2 Mastertheorem 3 Datenstrukturen 4 Kreativaufgabe
Mehr7. Verkettete Strukturen: Listen
7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Version: 4. Jan. 2016 Vergleich: Schwerpunkte Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++):
MehrSchwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen
Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen
MehrNachtrag: Vergleich der Implementierungen von Stack
Nachtrag: Vergleich der Implementierungen von Stack In der letzten Vorlesung hatten wir zwei Implementierung der Klasse Stack: eine Implementierung als Liste (Array): liststack eine Implementierung als
MehrDatentypen. strukturierte. elementare. skalare reelle statische dynamische int. list. real float. set. record. inhomogen. homogen
Datentypen elementare strukturierte skalare reelle statische dynamische int real float list homogen set inhomogen record Der elementare Datentyp nat bestehend aus einer Objektmenge und den darauf definierten
MehrFallstudie: Online-Statistik
Fallstudie: Online-Statistik Ziel: Klasse / Objekt, welches Daten konsumiert und zu jeder Zeit Statistiken, z.b. Mittelwert, Varianz, Median (etc.) ausgeben kann Statistics s = new Statistics(maxSize);...
MehrContainerDatenstrukturen. Große Übung 4
ContainerDatenstrukturen Große Übung 4 Aufgabenstellung Verwalte Kollektion S von n Objekten Grundaufgaben: Iterieren/Auflistung Suche nach Objekt x mit Wert/Schlüssel k Füge ein Objekt x hinzu Entferne
MehrInformatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 7 (21.5.2014) Binäre Suche, Hashtabellen I Algorithmen und Komplexität Abstrakte Datentypen : Dictionary Dictionary: (auch: Maps, assoziative
MehrEinführung in die Programmiertechnik
Einführung in die Programmiertechnik Klassen und Abstrakte Datentypen Abstrakte Datentypen (ADT) Beschreibung der Datentypen nicht auf Basis ihrer Repräsentation, sondern auf Basis ihrer Operationen und
MehrTheoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke
Theoretische Informatik 1 WS 2007/2008 Prof. Dr. Rainer Lütticke Inhalt der Vorlesung Grundlagen - Mengen, Relationen, Abbildungen/Funktionen - Datenstrukturen - Aussagenlogik Automatentheorie Formale
Mehr5.3 Doppelt verkettete Listen
5.3 Doppelt verkettete Listen Einfach verkettete Listen unterstützen das Einfügen und Löschen am Anfang in konstanter Zeit; für das Einfügen und Löschen am Ende benötigen sie jedoch lineare Laufzeit Doppelt
MehrDatenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik
5. Datenstrukturen Motivation Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik Eine Datenstruktur speichert gegebene Daten und stellt auf diesen bestimmte Operationen
MehrAbstrakte Datentypen und Datenstrukturen
Abstrakte Datentypen und Datenstrukturen Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 3. VO DAP2 SS 2009 21. April 2009 1 Praktikum zu DAP 2 Beginn: Mittwoch
MehrAbstrakte Datentypen und deren Implementierung in Python
Kapitel 15: Abstrakte Datentypen und deren Implementierung in Python Einführung in die Informatik Wintersemester 007/08 Prof. Bernhard Jung Übersicht Abstrakte Datentypen ADT Stack Python-Implementierung(en)
MehrSpezielle Datenstrukturen
Spezielle Datenstrukturen Stapel (Stack) Beschreibung der Datenstruktur Stapel Ein Stapel (engl. Stack), auch Stapelspeicher oder Keller bzw. Kellerspeicher genannt, ist eine Datenstruktur, in der Daten
Mehr1. Die rekursive Datenstruktur Liste
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel Ein Stack, auch Stapel oder Keller genannt, ist eine Datenstruktur, bei der die Elemente nur an einem Ende der Folge eingefügt bzw. gelöscht
Mehr12.3 Ein Datenmodell für Listen
Zweiter Versuch: Wir modellieren ein Element der Liste zunächst als eigenständiges Objekt. Dieses Objekt hält das gespeicherte Element. Andererseits hält das Element- Objekt einen Verweis auf das nächste
MehrEinfügen immer nur am Kopf der Liste Löschen auch nur an einem Ende (2 Möglichkeiten!)
Stack und Queue Grundlegender Datentyp Menge von Operationen (add, remove, test if empty) auf generischen Daten Ähnlich wie Listen, aber mit zusätzlichen Einschränkungen / Vereinfachungen: Einfügen immer
MehrPraktikum zu DAP 2. Abstrakte Datentypen und Datenstrukturen. Überblick. Motivation. Freiwilliger Linux-Kurs von Wilfried Rupflin und Sven Jörges
Abstrakte Datentyen und Datenstrukturen Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund Praktikum zu DAP 2 Beginn: Mittwoch 22. Aril Bitte das 1. Praktikumsblatt
MehrVollständigkeit. Klassifikation von Operationen
Vollständigkeit Definition Konstruktormenge := mininale Menge von Operationen, mit denen man alle Elemente (=Instanzen) des ADT konstruieren kann. Für Stack ist das die Menge {create, push} Definition
MehrÜbung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Kürzeste Wege, Heaps, Hashing Heute: Kürzeste Wege: Dijkstra Heaps: Binäre Min-Heaps Hashing:
MehrDatenstrukturen und Algorithmen. Vorlesung 8
Datenstrukturen und Algorithmen Vorlesung 8 Inhaltsverzeichnis Vorige Woche: ADT Stack ADT Queue Heute betrachten wir: ADT Deque ADT Prioritätsschlange Binomial-Heap Schriftliche Prüfung Informationen
MehrStack. Queue. pop() liefert zuletzt auf den Stack gelegtes Element und löscht es push( X ) legt ein Element X auf den Stack
Stack und Queue Grundlegender Datentyp Menge von Operationen (add, remove, test if empty) auf generischen Daten Ähnlich wie Listen, aber mit zusätzlichen Einschränkungen / Vereinfachungen: Einfügen immer
MehrGrundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny
Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.
Mehr3. Übungsblatt zu Algorithmen I im SoSe 2017
Karlsruher Institut für Technologie Prof. Dr. Jörn Müller-Quade Institut für Theoretische Informatik Björn Kaidel, Sebastian Schlag, Sascha Witt 3. Übungsblatt zu Algorithmen I im SoSe 2017 http://crypto.iti.kit.edu/index.php?id=799
MehrVorlesung Informatik 2 Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 Elementare Datenstrukturen) Prof. Dr. Susanne Albers Lineare Listen (1) Lineare Anordnung von Elementen eines Grundtyps (elementarer Datentyp
MehrProgrammierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen, Bäume)
Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 15 (Linearer Speicher, Listen,
Mehr6. Verkettete Strukturen: Listen
6. Verkettete Strukturen: Listen 5 K. Bothe, Inst. f ür Inf., HU Berlin, PI, WS 004/05, III.6 Verkettete Strukturen: Listen 53 Verkettete Listen : Aufgabe Vergleich: Arrays - verkettete Listen Listenarten
MehrKapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2017/18. Pro f. Dr. Sán do r Fe k e te
Kapitel 4: Dynamische Datenstrukturen Algorithmen und Datenstrukturen WS 2017/18 Pro f. Dr. Sán do r Fe k e te 1 4.1 Grundoperationen Aufgabenstellung: 3 4.1 Grundoperationen Aufgabenstellung: Verwalten
MehrAlgorithmen und Datenstrukturen SS09. Foliensatz 7. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik
Foliensatz 7 Michael Brinkmeier Technische Universität Ilmenau Institut für Theoretische Informatik Sommersemester 2009 TU Ilmenau Seite 1 / 15 Mengenoperationen TU Ilmenau Seite 2 / 15 Mengenoperationen
MehrGliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen
Gliederung 5. Compiler 1. Struktur eines Compilers 2. Syntaxanalyse durch rekursiven Abstieg 3. Ausnahmebehandlung 4. Arrays und Strings 6. Sortieren und Suchen 1. Grundlegende Datenstrukturen 2. Bäume
MehrAlgorithmen I. Tutorium 1-4. Sitzung. Dennis Felsing
Algorithmen I Tutorium 1-4. Sitzung Dennis Felsing dennis.felsing@student.kit.edu www.stud.uni-karlsruhe.de/~ubcqr/algo 2011-05-09 Überblick 1 Verkettete Listen 2 Unbeschränkte Felder 3 Amortisierte Laufzeitanalyse
MehrKap. 2: Abstrakte Datentypen Kap. 3: Sortieren
Kap. 2: Abstrakte Datentypen Kap. 3: Sortieren Professor Dr. Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 4. VO DAP2 SS 2008 17. April 2008 1 ADT Queue ADT Dictionary
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Lineare Listen (2) Doppelt verkettete Listen Ringlisten, Stapel, Schlangen Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 175 Doppelt verkettete Listen
MehrAbschnitt 10: Datenstrukturen
Abschnitt 10: Datenstrukturen 10. Datenstrukturen 10.1Einleitung 10.2 Peer Kröger (LMU München) Einführung in die Programmierung WS 16/17 829 / 867 Einleitung Überblick 10. Datenstrukturen 10.1Einleitung
MehrElementare Datenstrukturen
Organisatorisches VL-09: Elementare Datenstrukturen (Datenstrukturen und Algorithmen, SS 2017) Gerhard Woeginger Vorlesung: Gerhard Woeginger (Zimmer 4024 im E1) Sprechstunde: Mittwoch 11:15 12:00 Übungen:
MehrEinführung in die Informatik
Einführung in die Informatik Jochen Hoenicke Software Engineering Albert-Ludwigs-University Freiburg Sommersemester 2014 Jochen Hoenicke (Software Engineering) Einführung in die Informatik Sommersemester
MehrStapel (Stack, Keller)
Stapel (Stack, Keller) Eine wichtige Datenstruktur ist der Stapel. Das Prinzip, dass das zuletzt eingefügte Element als erstes wieder entfernt werden muss, bezeichnet man als LIFO-Prinzip (last-in, first-out).
MehrDatenstrukturen. Mariano Zelke. Sommersemester 2012
Datenstrukturen Mariano Zelke Sommersemester 2012 Kapitel 3: Elementare Datenstrukturen Mariano Zelke Datenstrukturen 2/18 Einfach verkettete Listen Mariano Zelke Datenstrukturen 3/18 Eine Zeiger-Implementierung
MehrNAME, VORNAME: Studiennummer: Matrikel:
TU Ilmenau, Fakultat IA Institut für Theoretische Informatik FG Komplexitätstheorie und Effiziente Algorithmen Prof. Dr. (USA) M. Dietzfelbinger Klausur Algorithmen und Datenstrukturen SS08, Ing.-Inf.
MehrAlgorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
MehrÜbungsblatt 6: Softwareentwicklung I (WS 2006/07)
Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J.O. Blech Dipl.-Inform. M.J. Gawkowski Dipl.-Inform. N. Rauch Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik Übungsblatt 6:
MehrAdvanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
MehrProblem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe
Maximale Größe?! Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um Dynamische Anpassung der Größe Praktische Informatik I, HWS 2009, Kapitel 10 Seite
MehrAlgorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
MehrStacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012
, Queues & Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 19. September 2012 ODE/FHTBM, Queues & 19. September 2012 1/42 Datenstrukturen Elementare Datenstrukturen
MehrGrundlagen der Informatik
Grundlagen der Informatik Musterklausur 1. Dynamische Datenstrukturen und objektorientierte Programmierung Zur Verwaltung einer digitalen Fotogalerie sollen Techniken der objektorientierten Programmierung
MehrBeispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5
Robert Elsässer Paderborn, den 15. Mai 2008 u.v.a. Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5 AUFGABE 1 (6 Punkte): Nehmen wir an, Anfang bezeichne in einer normalen
MehrOrdnung im Materiallager: Datenstrukturen II. Suchen und Sortieren im Array Verkettete Listen Rekursion
Ordnung im Materiallager: Datenstrukturen II Suchen und Sortieren im Array Verkettete Listen Rekursion Indizierter Datenbehälter Modell: Parkhaus, nummerierte Plätze interface FuhrparkIndex { // indiziert
MehrProgrammieren I. Kapitel 13. Listen
Programmieren I Kapitel 13. Listen Kapitel 13: Listen Ziel: eigene Datenstrukturen erstellen können und eine wichtige vordefinierte Datenstruktur( familie) kennenlernen zusammengehörige Elemente zusammenfassen
MehrAlgorithmen und Datenstrukturen 11. Vorlesung
Algorithmen und Datenstrukturen 11. Vorlesung Martin Dietzfelbinger 23. Juni 2008 FG KTuEA, TU Ilmenau AuD 23.06.2008 Sortieren FG KTuEA, TU Ilmenau AuD 23.06.2008 1 Sortieren a 1 a 2 a 3 a n 10 1 4 5
MehrSchnittstellen, Stack und Queue
Schnittstellen, Stack und Queue Schnittstelle Stack Realisierungen des Stacks Anwendungen von Stacks Schnittstelle Queue Realisierungen der Queue Anwendungen von Queues Hinweise zum Üben Anmerkung: In
MehrAlgorithmen und Datenstrukturen Kapitel 4 Neue Datenstrukturen, besseres (?) Sortieren
Algorithmen und Datenstrukturen Kapitel 4 Neue Datenstrukturen, besseres (?) Sortieren Frank Heitmann heitmann@informatik.uni-hamburg.de 4. November 2015 Frank Heitmann heitmann@informatik.uni-hamburg.de
MehrGrundlagen: Algorithmen und Datenstrukturen
Grundlagen: Algorithmen und Datenstrukturen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 2010
MehrInformatik II, SS 2018
Informatik II - SS 2018 (Algorithmen & Datenstrukturen) Vorlesung 6 (7.5.2018) Dictionaries, Binäre Suche, Hashtabellen I / Yannic Maus Algorithmen und Komplexität Abstrakte Datentypen : Dictionary Dictionary:
MehrLISTEN ALS ABSTRAKTE DATENTYPEN
LISTEN ALS ABSTRAKTE DATENTYPEN Listen Formal: Sei A eine geg. Menge von Datenelementen; Liste l = a 1 endliche Folge von Elementen aus A, mit n a 1 : Länge der Liste l : erstes Element von l (head) a
MehrAufgaben NF 11; Seite 1
Aufgabe Ref 1: Gegeben ist die Klasse Schueler public class Schueler { private String name, vorname, kurs; // Konstruktor public Schueler(String n, String vn, String k) { name=n; vorname=vn; kurs=k; public
MehrKapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
MehrAlgorithmen und Datenstrukturen 1
Algorithmen und Datenstrukturen 1 3. Vorlesung Peter F. Stadler Universität Leipzig Institut für Informatik studla@bioinf.uni-leipzig.de 3. Verkettete Listen, Stacks, Queues Verkettete lineare Listen -
MehrDatenkapselung: public / private
627 18. Klassen Klassen, Memberfunktionen, Konstruktoren, Stapel, verkettete Liste, dynamischer Speicher, Copy-Konstruktor, Zuweisungsoperator, Destruktor, Konzept Dynamischer Datentyp Datenkapselung:
MehrKapitel ADS:IV. IV. Datenstrukturen
Kapitel ADS:IV IV. Datenstrukturen Record Container List Linked List Stack Queue Priority Queue Dictionary Direct-address Table Hash Table Hash Function ADS:IV-21 Datenstrukturen POTTHAST 2018 List Definition
Mehr11 Abstrakte Datentypen
11 Abstrakte Datentypen Erinnerung: Abstrakter Datentyp spezifiziert nur die Operationen Implementierung und andere Details sind verborgen Harald Räcke 231/656 11.1 Listen Nachteil von Feldern: feste Größe
MehrInformatik II Prüfungsvorbereitungskurs
Informatik II Prüfungsvorbereitungskurs Tag 4, 23.6.2016 Giuseppe Accaputo g@accaputo.ch 1 Programm für heute Repetition Datenstrukturen Unter anderem Fragen von gestern Point-in-Polygon Algorithmus Shortest
Mehr1.1 Abstrakte Datentypen 1.2 Lineare Strukturen 1.3 Bäume 1.4 Prioritätsschlangen 1.5 Graphen
1 Datenstrukturen 1.1 Abstrakte Datentypen 1.2 Lineare Strukturen 1.3 Bäume 1.4 Prioritätsschlangen 1.5 Graphen 1 Abstrakte Datentypen Spezifizieren Form und Funktionalität der zu verarbeitenden Daten
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für
MehrVerbund/Struktur (record/struct)
Arrays. Iteratoren. Verbund/Struktur (record/struct) Ein Verbund oder Struktur ist eine statische Datenstruktur Ein Verbund ist eine Menge von Elementen (meistens von unterschiedlichen Typen), die eine
MehrInformatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1
Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss
MehrAlgorithmen I - Tutorium 28 Nr. 3
Algorithmen I - Tutorium 28 Nr. 3 18.05.2016: Spaß mit Listen, Arrays und amortisierter Analyse Marc Leinweber marc.leinweber@student.kit.edu INSTITUT FÜR THEORETISCHE INFORMATIK (ITI), PROF. DR. JÖRN
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
MehrVorlesung Datenstrukturen
Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum
MehrAlgorithmen und Datenstrukturen
1 Algorithmen und Datenstrukturen Wintersemester 2016/17 11. Vorlesung Elementare Datenstrukturen: Stapel + Schlange + Liste Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I 2-4 Zur Erinnerung Datenstruktur:
Mehr