Einführung in die Programmierung
|
|
- Klara Hofmeister
- vor 6 Jahren
- Abrufe
Transkript
1 Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen
2 Themen dieser Lektion Container und Generik Container-Operationen Listen Arrays Die Performance eines Algorithmus beurteilen: Die Landau- Symbole (Big-O-Notation) Hashtabellen Stapelspeicher (fortan Stacks) und Warteschlangen (fortan queues) 2
3 Container-Datenstrukturen Beinhalten andere Objekte (Elemente, engl. items ). Fundamentale Operationen auf einen Container: Einfügen: Ein Element hinzufügen Löschen: Ein Vorkommen eines Elements (falls vorhanden) löschen Ausradieren (Wipeout): Alle Vorkommen eines Elements löschen Suchen: Ist ein bestimmtes Element vorhanden? Traversierung/Iteration: Eine gegebene Operation auf jedes Element anwenden Die Implementation eines Containers bestimmt, wie wir in dieser Stunde sehen werden: Welche dieser Operationen verfügbar sind Ihre Geschwindigkeiten Die Speicheranforderungen Diese Lektion ist nur eine kurze Einführung. Mehr dazu im zweiten Semester in der Vorlesung Datenstrukturen und Algorithmen 3
4 Ein bekannter Container: Die Liste before after item 1 start index back forth Cursor count finish Um die Iteration und andere Operationen zu vereinfachen haben unsere Listen Cursors. (hier intern, können aber auch extern sein.) Abfragen Befehle 4
5 Ein standardisiertes Namensschema Containerklassen in EiffelBase benutzen standardisierte Namen für grundlegende Containeroperationen: is_empty : BOOLEAN has (v : G ): BOOLEAN count : INTEGER item : G make put (v : G ) remove (v : G ) wipe_out start, finish forth, back Wenn angebracht, benutzen auch Sie diese Namen in Ihren eigenen Klassen 5
6 Begrenzte Repräsentationen Beim Entwurf von Containerstrukturen sollte man festgelegte Grenzen vermeiden! Eng mich nicht ein! : EiffelBase mag harte Grenzen nicht. Die meisten Strukturen sind unbegrenzt Auch die Grösse von Arrays (zu jeder Zeit begrenzt) kann verändert werden Wenn eine Struktur begrenzt ist, nennt man die maximale Anzahl Elemente capacity, und die Invariante lautet count <= capacity 6
7 Container und Generik Wie behandeln wir Varianten von Containerklassen, die sich nur in ihrem Elementtyp unterscheiden? Lösung: Generik ermöglicht explizite Typ-Parametrisierung, konsistent mit statischer Typisierung. Containerstrukturen sind als generische Klassen implementiert: LINKED_LIST [G ] pl : LINKED_LIST [PERSONE ] sl : LINKED_LIST [STRING ] al : LINKED_LIST [ANY ] 7
8 Listen Eine Liste ist ein Container, der Elemente in einer bestimmten Ordnung beinhaltet. Listen in EiffelBase haben Cursors before after 1 start item index back forth Cursor count finish 8
9 Cursor-Eigenschaften (Alle in der Klasseninvariante!) Der Cursor reicht von 0 bis count + 1: 0 <= index <= count + 1 Der Cursor ist auf Position 0 gdw before wahr ist: before = (index = 0 ) Der Cursor ist auf Position count + 1 gdw after wahr ist: after = (index = count + 1 ) In einer leeren Liste ist der Cursor auf Position 0 oder 1: is_empty implies ((index = 0 ) or (index = 1)) 9
10 Eine spezifische Implementation: (einfach) verkettete Liste 10
11 Warnung Vergessen sie auf keinen Fall die Grenzfälle, wenn Sie eine Container-Datenstruktur und die zugehörige Klasse definieren : Leere Struktur Volle Struktur (bei endlicher Kapazität) 11
12 Eine Zelle hinzufügen 12
13 Der dazugehörige Befehl put_right (v : G ) -- v rechts der Cursorposition einfügen, Cursor nicht bewegen. require not_after: not after local p : LINKABLE [G] do create p.make (v) if before then p.put_right (first_element) first_element := p active := p else p.put_right (active.right) active.put_right (p) end count := count + 1 ensure next_exists: active.right /= Void inserted: (not old before) implies active.right.item = v inserted_before: (old before) implies active.item = v end 13
14 Eine Zelle löschen 14
15 Der zugehörige Befehl Entwerfen Sie remove als Übung! 15
16 Am Ende einfügen: extend 16
17 Arrays Ein Array ist ein Container-Speicher, der Elemente in zusammenhängende Speicherstellen speichert, wobei jede solche durch einen Integer-Index identifiziert wird. lower item (4 ) upper Gültige Indexwerte 17
18 Grenzen und Indizes Arrays haben Grenzen: lower : INTEGER -- Minimaler Index. upper : INTEGER -- Maximaler Index. Die Kapazität eines Arrays ist durch die Grenzen bestimmt: capacity = upper lower
19 Auf Elemente eines Arrays zugreifen und diese verändern item (i : INTEGER) : G -- Eintrag an Stelle i, sofern im Index-Intervall. require valid_key: valid_index (i ) put (v : G; i : INTEGER) i >= lower and i <= upper require ensure -- Ersetze i-ten Eintrag, sofern im Index-Intervall, -- durch v. valid_key: valid_index (i ) inserted: item (i ) = v 19
20 Bemerkung zu Eiffel: Vereinfachung der Notation Das Feature item ist wie folgt deklariert: item (i : INTEGER) alias [ ] : G assign put Dies ermöglicht folgende synonyme Notationen: a [i ] für a.item (i ) a.item (i ) := x für a.put (x, i ) a [i ] := x für a.put (x, i ) Diese Vereinfachungen sind prinzipiell für alle Klassen möglich. Eine Klasse darf maximal ein Feature mit Alias [] haben. 20
21 Die Grösse eines Arrays ändern Arrays haben immer eine fixe obere und untere Grenze, und deshalb auch eine fixe Kapazität. Eiffel erlaubt - anders als die meisten Programmiersprachen das Verändern der Grösse eines Arrays (resize). Das Feature force verändert die Grösse eines Arrays: Im Unterschied zu put hat es keine Vorbedingung. Das Verändern der Grösse bedingt meistens eine Neu Allokation des Arrays und das Kopieren der alten Werte. Solche Operationen sind teuer! 21
22 Einen Array benutzen, um eine Liste zu repräsentieren. Siehe Klasse ARRAYED_LIST in EiffelBase Einführung des Features count (Anzahl der Elemente in der Liste.) Die Anzahl der Listenelemente reicht von 0 bis capacity : 0 <= count <= capacity Eine leere Liste hat keine Elemente: is_empty = (count = 0) 22
23 LINKED_LIST oder ARRAYED_LIST? Die Wahl der Datenstruktur hängt von der Geschwindigkeit ihrer Containeroperationen ab. Die Geschwindigkeit einer Containeroperation hängt von ihrer Implementation und dem zugrundeliegenden Algorithmus ab. 23
24 Wie schnell ist ein Algorithmus? Abhängig von der Hardware, dem Betriebssystem, der Auslastung der Maschine Aber am meisten hängt die Geschwindigkeit vom Algorithmus selbst ab! 24
25 Komplexität eines Algorithmus: die O-Notation Sei n die Grösse einer Datenstruktur (count ). f ist O ( g (n)) heisst, dass es eine Konstante k gibt, so dass: n, f (n) k g (n) Definiert die Funktion nicht mithilfe einer exakten Formel, sondern durch Grössenordnungen, z.b. O (1), O (log count), O (count), O (count 2 ), O (2 count ). 7count count + 4 ist O (count? 2 ) 25
26 Beispiele put_right von LINKED_LIST : O (1) Unabhängig von der Anzahl Elementen in einer verketteten Liste: Es braucht nur konstante Zeit, um ein Element bei der Cursorposition einzufügen. force von ARRAY : O (count) Im schlechtesten Fall wächst die Zeit für diese Operation proportional mit der Anzahl Elemente im Array. 26
27 Wieso konstante Faktoren ignorieren? Betrachten wir Algorithmen mit Komplexitäten O (n ) O (n 2 ) O (2 n ) Nehmen Sie an, Ihr neuer PC (Weihnachten steht vor der Tür!) ist 1000 mal schneller als Ihre alte Maschine. Wie viel grösser kann ein Problem sein, damit Sie es immer noch in einem Tag lösen können? 27
28 Varianten der Algorithmenkomplexitäten Wir sind interessiert an Der Leistung im schlechtesten Fall (worst case) Der Leistung im besten Fall (best case, eher selten) Der durchschnittlichen Leistung (benötigt statistische Verteilung) Solange nicht explizit genannt beziehen wir uns in dieser Diskussion auf die Leistung im schlechtesten Fall. Notation der unteren Grenze: (n ) 28
29 Kosten der Operationen einer einfach verketteten Liste Operation Feature Komplexität Einfügen rechts vom Cursor put_right O (1) Einfügen am Ende extend O (count) O (1) Rechten Nachbarn löschen remove_right O (1) Element beim Cursor löschen remove O (count) Index-basierter Zugriff i_th O (count) Suchen has O (count) 29
30 Kosten der Operationen einer doppelt verketteten Liste Operation Feature Komplexität Einfügen rechts vom Cursor put_right O (1) Einfügen am Ende extend O (1) Rechten Nachbarn löschen remove_right O (1) Element beim Cursor löschen remove O (1) Index-basierter Zugriff i_th O (count) Suchen has O (count) 30
31 Kosten der Operationen eines Arrays Operation Feature Complexity Index-basierter Zugriff item O (1) Index-basierte Ersetzung put O (1) Index-basierte Ersetzung ausserhalb der Grenzen force O (count) Suchen has O (count) Suchen in sortiertem Array - O (log count) 31
32 Hashtabellen Können wir die Effizienz von Arrays erreichen: Zeitlich konstanter Zugriff Zeitlich konstante Änderungen ohne uns dabei auf ganze Zahlen als Schlüssel zu beschränken? Die Antwort: Hashtabellen ( jedenfalls beinahe) 32
33 Hashtabellen Arrays und Hashtabellen sind beide indexierte Strukturen; Das Verändern eines Elements benötigt einen Index oder, im Fall von Hashtabellen, einen Schlüssel (key). Im Unterschied zu Arrays sind bei Hashtabellen auch nicht-integer als Schlüssel möglich. 33
34 Eine Abbildung (mapping) 34
35 Der Gebrauch von Hashtabellen persone, persone1 : PERSONE personal_verzeichnis : HASH_TABLE [PERSONE, STRING ] create personal_verzeichnis.make ( ) Ein Element speichern: create persone1 personal_verzeichnis.put ( persone1, Annie ) Ein Element abfragen: persone := personal_verzeichnis.item ( Annie ) 35
36 Eingeschränkte Generik und die Klassenschnittstelle class HASH_TABLE [G, K -> HASHABLE ] Erlaubt h [ ABC ] für h item ( ABC ) Erlaubt h item [ ABC ] := x für h put (x, ABC ) feature item alias "[]" (key : K ): G assign force Zusammen: Erlauben h [ ABC ] := x für h put (x, ABC ) put (new : G ; key : K ) -- Füge new mit key ein, sofern kein anderes -- Element mit diesem Schlüssel existiert. do end force (new : G; key : K ) -- Tabelle updaten, so dass new das Element -- ist, das mit key assoziiert wird. end 36
37 Das Beispiel, neu geschrieben persone, persone1 : PERSONE personal_verzeichnis : HASH_TABLE [PERSONE, STRING ] create personal_verzeichnis.make ( ) Ein Element speichern: create persone1 Kein guter Stil - Wieso? personal_verzeichnis [ Annie ] := persone1 Ein Element abfragen: persone := personal_verzeichnis [ Annie ] 37
38 Die Hashfunktion Die Hashfunktion bildet K, die Menge der möglichen Schlüssel, auf ein ganzzahliges Intervall a..b ab. Eine perfekte Hashfunktion ergibt für jedes Element von K einen anderen Integer. Immer, wenn zwei unterschiedliche Schlüssel denselben Hashwert ergeben, entsteht eine Kollision. 38
39 Behandlung von Kollisionen Offenes Hashing: ARRAY [LINKED_LIST [G]] 39
40 Eine andere Technik: Geschlossenes Hashing Die Klasse HASH_TABLE [G, H] implementiert geschlossenes Hashing: HASH_TABLE [G, H] benutzt einen einzigen ARRAY [G], um die Elemente zu speichern. Zu jeder Zeit sind einige Positionen frei und einige besetzt: 40
41 Geschlossenes Hashing Falls die Hashfunktion eine bereits besetzte Position ergibt, wird der Mechanismus probieren, eine Folge von anderen Positionen (i1, i2, i3) zu erreichen, bis er eine freie Stelle findet. Mit dieser Richtlinie und einer guten Wahl der Hashfunktion ist das Suchen und das Einfügen in Hashtabellen in O (1) erreichbar. 41
42 Kosten der Operationen einer Hashtabelle Operation Feature Komplexität Schlüsselbasierter Zugriff Schlüsselbasierte Einfügung Löschung Schlüsselbasiertes Ersetzen Suchen item put, extend remove replace has O (1) O (count) O (1) O (count) O (1) O (count) O (1) O (count) O (1) O (count) 42
43 Dispenser Im Unterschied zu indexierten Strukturen wie Arrays und Hashtabellen gibt es keinen Schlüssel oder andere identifizierende Informationen für Elemente von Dispensern. Dispenser sind Container-Datenstrukturen, die eine spezifische Ausgaberegel besitzen: Last In First Out (LIFO): Wähle das Element, das zuletzt eingefügt wurde Stack. First In First Out (FIFO): Wähle das älteste, noch nicht entfernte Element Queue. Vorrangswarteschlange (priority queue): Wähle das Element mit der höchsten Priorität. 43
44 Dispenser 44
45 Stacks Ein Stack ist ein Dispenser, der die LIFO-Regel anwendet. Die grundlegenden Operationen sind: Ein Element auf den Stack drücken (put) Das oberste Element wegnehmen (remove) Zugriff auf das oberste Element (item) Oberstes Element (top) Der Rumpf, der nach einem pop übrig bleiben würde. Ein neues Element würde hierhin gepusht 45
46 Anwendungen von Stacks Viele! Allgegenwärtig in der Implementation von Programmiersprachen: Parsen von Ausdrücken (bald) Ausführung von Routinen managen ( DER Stack ) Spezialfall: Rekursion implementieren Bäume traversieren 46
47 Ein Beispiel: Die Präfixnotation (auch: Polnische Notation) from until loop end Alle Terme der Polnischen Notation wurden gelesen Lese nächsten Term in Polnischer Notation if x ist ein Operand then s.put (x) else -- x ist ein binärer Operator -- Erhalte die beiden Operanden: op1 := s.item; s.remove op2 := s.item; s.remove -- Wende Operator auf Operanden an und «drücke» -- das Resultat: s.put (application (x, op2, op1)) end 47
48 Auswertung von 2 a b + c d - * + a b a (a +b) c (a +b) d c (c -d) (a +b) (a +b) (a +b)*(c -d) (a +b)*(c -d) 48
49 Der Laufzeit-Stack Der Laufzeit-Stack enthält Aktivierungseinträge für alle zur Zeit aktiven Routinen. Ein Aktivierungseintrag beinhaltet die lokalen Variablen einer Routine (Argumente und lokale Entitäten). 49
50 Stacks implementieren Die häufigsten Implementationen eines Stacks sind entweder verkettet oder indiziert (arrayed). 50
51 Zwischen den Datenstrukturen auswählen Benutzen Sie eine verkettete Liste, falls: Die Ordnung der Elemente wichtig ist Die meisten Zugriffe in dieser Ordnung erfolgen (Bonusbedingung) Kein festes Grössenlimit Benutzen Sie einen Array, falls: Jedes Elemente mit einem Integer-Index identifiziert werden kann Die meisten Zugriffe über diesen Index erfolgen Feste Grössengrenze (zumindest für längere Ausführungszeit) Benutzen Sie eine Hashtabelle, falls: Jedes Item einen entsprechenden Schlüssel hat. Die meisten Zugriffe über diese Schlüssel erfolgen. Die Struktur beschränkt ist. Benutzen Sie einen Stack: Für eine LIFO-Regel Beispiel: Traversieren von verschachtelten Strukturen (z.b. Bäume). Benutzen Sie eine Queue: Für eine FIFO-Regel Beispiel: Simulation eines FIFO-Phänomens. 51
52 Was wir gesehen haben Container-Datenstrukturen: Grundlegende Begriffe, Schlüsselbeispiele Ein wenig Komplexitätstheorie ( Big-O ) Wann welcher Container zu wählen ist 52
Einführung in die Programmierung
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 18: Undo/Redo Weiterführe Referenzen Kapitel 21 von Object-Oriented Software Construction, Prentice Hall,
Informatik 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
Grundlagen: 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
Informatik 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
Ü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:
Programmierung im Grossen
1 Letzte Aktualisierung: 16. April 2004 Programmierung im Grossen Bertrand Meyer 2 Vorlesung 4: Abstrakte Daten-Typen Übungen 3 Passe die vorhergehende Spezifikation von Stacks (LIFO, Last-In First-Out
Grundlagen 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.
Informatik II Prüfungsvorbereitungskurs
Informatik II Prüfungsvorbereitungskurs Tag 4, 9.6.2017 Giuseppe Accaputo g@accaputo.ch 1 Aufbau des PVK Tag 1: Java Teil 1 Tag 2: Java Teil 2 Tag 3: Algorithmen & Komplexität Tag 4: Dynamische Datenstrukturen,
ALP 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
Informatik 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:
Counting - 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
Datenstrukturen 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
Einfü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
Schwerpunkte. 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
Einführung in die Programmierung
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 9: Abstraktion Heutige Themen Abstraktion, vor allem funktionale Abstraktion Der Begriff der Routine Das
12. Dynamische Datenstrukturen
Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Implementationsvarianten der verketteten Liste 0 04 Motivation: Stapel ( push, pop, top, empty
13. 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
Übungsklausur Algorithmen I
Jun.-Prof. Hofheinz, Jun.-Prof. Meyerhenke (ITI, KIT) 08.06.2015 Übungsklausur Algorithmen I Aufgabe 1. (Algorithm Engineering) Nennen Sie zwei Konzepte, die Algorithm Engineering im Gegensatz zu theoretischer
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1
Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1
Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch
13. Hashing. AVL-Bäume: Frage: Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n)
AVL-Bäume: Ausgabe aller Elemente in O(n) Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n) Frage: Kann man Einfügen, Löschen und Suchen in O(1) Zeit? 1 Hashing einfache Methode
Stacks, 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
12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.
Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete. Worst-case Zeit für Search: Θ(n). In der Praxis jedoch sehr gut. Unter gewissen
Algorithmen und Datenstrukturen
Universität Innsbruck Institut für Informatik Zweite Prüfung 16. Oktober 2008 Algorithmen und Datenstrukturen Name: Matrikelnr: Die Prüfung besteht aus 8 Aufgaben. Die verfügbaren Punkte für jede Aufgabe
Ü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)
Verkettete Datenstrukturen: Listen
Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).
Wiederholung: 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
Einführung in die Programmierung
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 18: Undo/Redo Chair of Software Engineering Weiterführe Referenzen Kapitel 21 von Object-Oriented Software
6. 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
Abstrakter 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
3. Ü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
Einstieg in die Informatik mit Java
1 / 15 Einstieg in die Informatik mit Java Collections Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung
Informatik II, SS 2014
Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 9 (28.5.2014) Hashtabellen III Algorithmen und Komplexität Offene Adressierung : Zusammenfassung Offene Adressierung: Alle Schlüssel/Werte
Autotest. Automatische Testgenerierung mit Design by Contract. von Simon Greiner am 12. Juli 2007
Autotest Automatische Testgenerierung mit Design by Contract von Simon Greiner am 12. Juli 2007 Autotest 1. Testen 2. Design by Contract 3. Strategien zur Testerstellung 1. Zufallsstrategie 2. Planungsstrategie
Teil VII. Hashverfahren
Teil VII Hashverfahren Überblick 1 Hashverfahren: Prinzip 2 Hashfunktionen 3 Kollisionsstrategien 4 Aufwand 5 Hashen in Java Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 7 1 Hashverfahren:
Grundlagen der Informatik 0
Technische Universität Darmstadt 01.07.2013 Grundlagen der Informatik 0 Vorlesung 0 Java ist eine Programmiersprache Ilkay Baytekin Douglas Crockford http://media.smashingmagazine.com/wp-content/uploads/2012/04/doug-crockford-image.jpg
13. Bäume: effektives Suchen und Sortieren
Schwerpunkte Aufgabe und Vorteile von Bäumen 13. Bäume: effektives Suchen und Sortieren Java-Beispiele: Baum.java Traverse.java TraverseTest.java Sortieren mit Bäumen Ausgabealgorithmen: - Preorder - Postorder
Verbund/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
Chair of Software Engineering
1 2 Enführung n de Programmerung Bertrand Meyer Vorlesung 13: Contaner-Datenstrukturen Letzte Bearbetung 1. Dezember 2003 Themen für dese Vorlesung 3 Contaner-Datenstrukturen 4 Contaner und Genercty Enthalten
Schnittstellen, 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
ContainerDatenstrukturen. 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
NAME, 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.
Grundlagen der Informatik
Jörn Fischer j.fischer@hs-mannheim.de Willkommen zur Vorlesung Grundlagen der Informatik ADS-Teil Page 2 Überblick Inhalt 1 Eigenschaften von Algorithmen Algorithmenbegriff O-Notation Entwurfstechniken
Einführung in die Programmierung. Bertrand Meyer. Vorlesung 23: Ein Beispiel: Undo-Redo. Das Problem
1 Einführung in die Programmierung Bertrand Meyer Letzte Bearbeitung 20. Januar 2004 2 Vorlesung 23: Ein Beispiel: Un-Re Das Problem 3 Den Benutzern eines interaktiven Systems ermöglichen, den Effekt des
Assoziative Container in C++ Christian Poulter
Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: inf@poulter.de Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...
Vorlesung Datenstrukturen
Vorlesung Datenstrukturen Sortierte Folgen Maike Buchin 30.5., 1.6., 13.6.2017 Sortierte Folgen Häufiges Szenario: in einer Menge von Objekten mit Schlüsseln (aus geordnetem Universum) sollen Elemente
1 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;
11. 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
Inhaltsverzeichnis. Teil 1 Grundlagen 21. Teil 2 Datenstrukturen 85
Inhaltsverzeichnis Vorwort 13 Umfang 14 Einsatz als Unterrichtsmittel 14 Algorithmen mit Praxisbezug 15 Programmiersprache 16 Danksagung 17 Vorwort des Java-Beraters 18 Hinweise zu den Übungen 19 Teil
OCP Java SE 8. Collections
OCP Java SE 8 Collections Collections (Interfaces) Iterable Collection Set List Queue SortedSet Deque Collection List erlaubt Duplikate und null behält die Reihenfolge Set erlaubt keine Duplikate Queue
Datenstrukturen und Algorithmen
Datenstrukturen und Algorithmen VO 708.031 27.10.2011 stefan.klampfl@tugraz.at 1 Wiederholung Wir vergleichen Algorithmen anhand des ordnungsmäßigen Wachstums von T(n), S(n), Asymptotische Schranken: O-Notation:
12.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
Informatik 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:
Klausur Algorithmen und Datenstrukturen
Technische Universität Braunschweig Wintersemester 2013/2014 Institut für Betriebssysteme und Rechnerverbund Abteilung Algorithmik Prof. Dr. Sándor P. Fekete Stephan Friedrichs Klausur Algorithmen und
Einführung in die Programmierung
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 4: Die Schnittstelle einer Klasse (und eine erste Einführung in den Begriff von Vertrag) Kunde, Versorger
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 217 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Graphen, Suchbäume, AVL Bäume Heute: Graphen und Bäume Binäre Suchbäume AVL-Bäume Nächste
Algorithmen & Datenstrukturen Midterm Test 2
Algorithmen & Datenstrukturen Midterm Test 2 Martin Avanzini Thomas Bauereiß Herbert Jordan René Thiemann
Algorithmen I. Sascha Witt Institut für Theoretische Informatik Web: https://crypto.iti.kit.edu/index.php?id=799
Algorithmen I Sascha Witt 10.05.2017 Institut für Theoretische Informatik Web: https://crypto.iti.kit.edu/index.php?id=799 (Folien von Peter Sanders) KIT Institut für Theoretische Informatik 1 Erinnerung
Kapitel 4: Datentyp Keller und Schlange
Kapitel 4: Datentyp Keller und Schlange Keller (Stack) Schlange (Queue) 4-1 Definition Keller und seine Operationen Ein Keller (engl. Stack; Stapel) ist eine endliche Menge von Elementen mit einer LIFO-Organisation
Einführung in die Programmierung
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 7: Referenzen und Zuweisungen Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand
public interface Stack<E> { public void push(e e); public E pop();
ADS Zusammenfassung René Bernhardsgrütter 02.04.2012 1 Generics Gewähren Typsicherheit und können für verschiedene Datentypen ohne Casts verwendet werden. Beim Erstellen der Klasse werden Platzhalter für
Humboldt-Universität zu Berlin Berlin, den Institut für Informatik
Humboldt-Universität zu Berlin Berlin, den 15.06.2015 Institut für Informatik Prof. Dr. Ulf Leser Übungen zur Vorlesung M. Bux, B. Grußien, J. Sürmeli, S. Wandelt Algorithmen und Datenstrukturen Übungsblatt
Programmieren 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
Konkatenation zweier Listen mit concat
Ein Datenmodell für Listen Konkatenation zweier Listen mit concat Was ist an der Konkatenation etwas unschön? Man muss die vordere Liste einmal durchgehen, um den letzten Nachfolger (urspr. null zu erhalten,
Einfach verkettete Liste
5. Listen Verkettete Listen Einfach verkettete Liste Für jedes einzelne Element der Liste wird ein Hilfsobjekt erzeugt. Jedes Hilfsobjekt enthält zwei Instanzvariablen: den zu speichernden Wert bzw. einen
Problem: 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
Advanced 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
Übung: Algorithmen und Datenstrukturen SS 2007
Übung: Algorithmen und Datenstrukturen SS 2007 Prof. Lengauer Sven Apel, Michael Claÿen, Christoph Zengler, Christof König Blatt 4 Votierung in der Woche vom 21.05.0725.05.07 Aufgabe 9 Waggons rangieren
JAVA KURS COLLECTION
JAVA KURS COLLECTION COLLECTIONS Christa Schneider 2 COLLECTION Enthält als Basis-Interface grundlegende Methoden zur Arbeit mit Collections Methode int size() boolean isempty() boolean contains (Object)
Grundlagen der Informatik
Grundlagen der Informatik Musterklausur 1. Dynamische Datenstrukturen und objektorientierte Programmierung Zur Verwaltung einer digitalen Fotogalerie sollen Techniken der objektorientierten Programmierung
Willkommen zur Vorlesung. Algorithmen und Datenstrukturen
Willkommen zur Vorlesung Algorithmen und Datenstrukturen Mein Name: Andreas Berndt Zum Dozenten Diplom-Informatiker (TU Darmstadt) Derzeit Software-Entwickler für Web- Applikationen Derzeitige Sprachen:
Einführung in die Programmierung
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Vorlesung 5: Invarianten und Logik Erinnerung: Verträge In Verbindung mit einem Feature: Ø Vorbedingungen Ø Nachbedingungen
Inhaltsverzeichnis. Teil 1 Grundlagen 23
Inhaltsverzeichnis Vorwort 11 Umfang 12 Einsatz als Unterrichtsmittel 12 Algorithmen mit Praxisbezug 13 Programmiersprache 14 Danksagung 15 Vorwort des C++-Beraters 16 Hinweise zu den Übungen 21 Teil 1
Algorithmen 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
Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen
Kapitel 10 Komplexität von Algorithmen und Sortieralgorithmen Arrays 1 Ziele Komplexität von Algorithmen bestimmen können (in Bezug auf Laufzeit und auf Speicherplatzbedarf) Sortieralgorithmen kennenlernen:
Theoretische 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
Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1
Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1 Aufgabe 1. / 16 P Instruktionen: 1) In dieser Aufgabe sollen Sie nur die Ergebnisse angeben. Diese können Sie direkt bei den Aufgaben notieren. 2) Sofern
Vorlesung Informatik 2 Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (12 Hashverfahren: Verkettung der Überläufer) Prof. Dr. Susanne Albers Möglichkeiten der Kollisionsbehandlung Kollisionsbehandlung: Die Behandlung
STL-Container und Laufzeit
STL-Container und Laufzeit Eine Übersicht Höhere Programmierung / C++ Yannick Kaiser, LMU 1 C++11 Array konstanter Länge, die bei der Initalisierung angegeben werden muss STL-Kapselung für klassische
Grundlagen der Algorithmen und Datenstrukturen Kapitel 2
Grundlagen der Algorithmen und Datenstrukturen Kapitel 2 Christian Scheideler + Helmut Seidl SS 2009 02.04.09 Kapitel 3 1 Grundlegende Laufzeitanalyse Eingabe (z.b. unsortierte Liste) Eingabe (z.b. Such-Operationen)
Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!
Albert-Ludwigs-Universität Institut für Informatik Prof. Dr. F. Kuhn Informatik II: Algorithmen & Datenstrukturen Montag, 29. August, 2014, 14:00 17:00 Name:...........................................................
Robert Sedgewick. Algorithmen in Java. Teil 1-4 Grundlagen Datenstrukturen Sortieren Suchen. Java-Beratung durch Michael Schidlowsky
Robert Sedgewick Algorithmen in Java Teil 1-4 Grundlagen Datenstrukturen Sortieren Suchen Java-Beratung durch Michael Schidlowsky 3., überarbeitete Auflage \ PEARSON ein Imprint von Pearson Education München
Programmiertechnik II
Hash-Tabellen Überblick Hashfunktionen: Abbildung von Schlüsseln auf Zahlen Hashwert: Wert der Hashfunktion Hashtabelle: Symboltabelle, die mit Hashwerten indiziert ist Kollision: Paar von Schlüsseln mit
Vorlesung 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
Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015
Datenstrukturen und Algorithmen Vorlesung 8: (K6) 1 Joost-Pieter Katoen Lehrstuhl für Informatik Software Modeling and Verification Group http://moves.rwth-aachen.de/teaching/ss-15/dsal/ 7. Mai 015 3 Joost-Pieter
Algorithmen & Komplexität
Algorithmen & Komplexität Angelika Steger Institut für Theoretische Informatik steger@inf.ethz.ch Breitensuche, Tiefensuche Wir besprechen nun zwei grundlegende Verfahren, alle Knoten eines Graphen zu
12 Collections Framework. Interfaces Maps and Collections. Collection Interface. Überblick. Collection = Containterklasse, die andere Objekte enthält.
Collection = Containterklasse, die andere Objekte enthält. Inhalte: Schnittstellen Implementierungen Algorithmen Interfaces Maps and Collections Iterable Collection Map Vorteile: Set List Queue SortedMap
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 217 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. Graphen und Bäume 2. Binäre Suchbäume 3. AVL-Bäume 4. Algorithmen und Datenstrukturen 2 Agenda
Programmieren 2 Übung Semesterwoche 2
Programmieren 2 Übung Semesterwoche 2 1. Stack (LIFO: Last-In--First-Out) Implementieren und testen Sie eine Klasse Stack, so dass beliebig viele Objekte eines vorgegebenen Datentyps (z. B. String) auf
Kapitel 4. Kontrollstrukturen
Kapitel 4 Kontrollstrukturen Kontrollstrukturen 1 Ziele Kontrollstrukturen in imperativen Programmen kennenlernen und verstehen. Realisierung der Kontrollstrukturen in Java. Kontrollstrukturen 2 Anweisungen
Einführung in die Informatik I
Einführung in die Informatik I Einige wichtige Datenstrukturen: Vektor, Matrix, Liste, Stapelspeicher, Warteschlange Prof. Dr. Nikolaus Wulff Datenstruktur / Datentyp Programme benötigen nicht nur effiziente
Vorlesung Informatik 2 Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 Bäume: Grundlagen und natürliche Suchbäume) Prof. Dr. Susanne Albers Bäume (1) Bäume sind verallgemeinerte Listen (jedes Knoten-Element kann mehr
Bäume, Suchbäume und Hash-Tabellen
Im folgenden Fokus auf Datenstrukturen, welche den assoziativen Zugriff (über einen bestimmten Wert als Suchkriterium) optimieren Bäume: Abbildung bzw. Vorberechnung von Entscheidungen während der Suche
Kapitel 12: Induktive
Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter
Datenstrukturen Teil 1. Arrays, Listen, Stapel und Warteschlange. Arrays. Arrays. Array
Datenstrukturen Teil 1,, und Sammelbegriff für Anordnung, Aufstellung, Reihe von gleichen Elementen in festgelegter Art und Weise Werden unterschieden in Standardarrays und assoziative Können ein- oder
Robert Sedgewick. Algorithmen in Java. »il 1-4 Grundlagen Datenstrykturen Sortleren Suchen. java-beratung durch Michael Schidlowsky
Robert Sedgewick Algorithmen in Java»il 1-4 Grundlagen Datenstrykturen Sortleren Suchen java-beratung durch Michael Schidlowsky 3., überarbeitete Auflage PEARSON ein Imprint von Pearson Education München
1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)
Der folgende Mitschrieb wurde von Prof. Alexa am 16.07.2008 als Probeklausur in der MPGI2 Vorlesung gezeigt und wurde auf http://www.basicinside.de/2008/node/94 veröffentlicht. Die Abschrift ist unter
Algorithmen 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
Datenstrukturen & Algorithmen Lösungen zu Blatt 5 FS 14
Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 26. März