Algorithmen I. Sascha Witt Institut für Theoretische Informatik Web: https://crypto.iti.kit.edu/index.php?id=799

Ähnliche Dokumente
Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Was bisher geschah ADT Menge mit Operationen: Suche nach einem Element Einfügen eines Elementes Löschen eines Elementes Realisierung durch

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Informatik II, SS 2014

Java. Wir verwenden oft Java für Datenstrukturen und Algorithmen. Die Vorlesung ist aber von der Programmiersprache unabhängig.

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Struktur am Beispiel einer Liste

Einführung Elementare Datenstrukturen. Der Konstruktor muß den Listenkopf head erzeugen. Der Vorgänger und Nachfolger von head ist head selbst.

Abstrakte Datentypen.

Algorithmen und Datenstrukturen

Sortierte Folgen 250

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Algorithmen & Datenstrukturen 1. Klausur

3. Übung Algorithmen I

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Algorithmen und Datenstrukturen Suchbaum

Bäume, Suchbäume und Hash-Tabellen

(06 - Anwendungen von Stapeln und Schlangen)

14. Rot-Schwarz-Bäume

13. Binäre Suchbäume

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Grundlagen der Informatik Generische Klassen

Java Generics & Collections

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

Übung 13: Priority Queues (Vorrangwarteschlangen 1 )

Programmiertechnik II

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

JAVA KURS COLLECTION

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Whitebox-Vererbung vs. Blackbox-Vererbung. - Begriffsbestimmung - Vererbung öffentliche Vererbung private Vererbung - Zusammenfassung

Einführung in die STL anhand eines ausgewählten Beispiels

Institut für Informatik

Teil V. Generics und Kollektionen in Java

Programmiertechnik II

Vorlesung 09: Mengen. Peter Thiemann SS 2010

Inhalte Informatik. I1 Grundprinzip des objektorientierten Modellierens I3 Modellieren von Netzwerkanwendungen

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

Zentralabitur 2017 Informatik

Einführung in die Informatik Hashtables

Informatik II, SS 2014

Kapitel 11: Wiederholung und Zusammenfassung

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Algorithmen und Datenstrukturen

Freiherr-vom-Stein-Gymnasium Leverkusen Fachschaft Informatik Unterrichtsinhalte Informatik Qualifikationsphasen Q1 und Q2

Branch-and-Bound. Wir betrachten allgemein Probleme, deren Suchraum durch Bäume dargestellt werden kann. Innerhalb des Suchraums suchen wir

Zentralabitur 2018 Informatik

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Knasmüller.book Seite vii Mittwoch, 28. März : vii. Inhaltsverzeichnis

Vorgaben zu den unterrichtlichen Voraussetzungen für die schriftlichen Prüfungen im Abitur in der gymnasialen Oberstufe im Jahr 2010

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2013 / Vorlesung 7, Donnerstag 5.

HEUTE. Datenstrukturen im Computer. Datenstrukturen. Rekursion. Feedback Evaluation. abstrakte Datenstrukturen

Java Einführung Collections

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer

Algorithmen und Datenstrukturen Balancierte Suchbäume

Datenstrukturen in Java

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Informatik II. PVK Part1 Severin Wischmann n.ethz.ch/~wiseveri

Programmierung in C/C++

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Vorlesung 5: DATENSTRUKTUREN UND ALGORITHMEN

U08 Entwurfsmuster (II)

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 5, Donnerstag, 20.

Kapitel 9 Suchalgorithmen

Vorlesung : Binäre Entscheidungsdiagramme (BDDs) Dr. Carsten Sinz

Übung Algorithmen I

8. Generics Grundlagen der Programmierung 1 (Java)

Übersicht Datenstrukturen und Algorithmen. Literatur. Algorithmus: Wikipedia Definition. Vorlesung 1: Einführung. Prof. Dr.

Grundkonzepte java.util.list

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Graphen: Datenstrukturen und Algorithmen

Listenverarbeitung in Python

Kapitel 3. Speicherhierachie. Beispiel für Cache Effekte. Motivation Externspeicheralgorithmen. Motivation Für Beachtung von Cache Effekten

Algorithmen und Datenstrukturen in Java Jiri Spale, Algorithmen und Datenstrukturen in Java 1

Praktikum angewandte Systemsoftwaretechnik: Vergleich nichtblockierender Queues

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Algorithmische Intelligenz. Amortisierung. Stefan Edelkamp

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / Vorlesung 9, Dienstag 18.

Aufbau Datenbanksysteme

Programmieren in Haskell

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Ablauf heute. Algorithmen und Datenstrukturen Kapitel 4 Neue Datenstrukturen, besseres (?) Sortieren. Stapel (Keller, Stack) Datentypen

Algorithmik Funke/Bahrdt/Krumpe/Mendel/Seybold SS Übungsblatt 4

Java-Implementierung der Priority-Queue und des Huffman-Algorithmus Effiziente Algorithmen SS12 Übung 4 Aufgabe 5 Johannes Hein

Probeklausur: Programmierung WS04/05

Programmierung mit C Zeiger

Datenstrukturen und Algorithmen

Beispielblatt VU Algorithmen und Datenstrukturen 1 VU 6.0

PHP Schulung Beginner. Newthinking Store GmbH Manuel Blechschmidt

Schulinternes Curriculum im Fach Informatik

Übersicht. Rot-schwarz Bäume. Rot-schwarz Bäume. Beispiel. Eigenschaften. Datenstrukturen & Algorithmen. Rot-schwarz Bäume Eigenschaften Einfügen

Curriculum des Wahlfaches Informatik für das Gymnasium Dialog

Kapitel : Andere dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

3 Amortisierte Analyse

Inhaltsverzeichnis. Was ist Informatik? 5. Programmierung 13. Einleitung. 1 Informatik Was ist Informatik? Teilgebiete der Informatik 8

Transkript:

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 VL vom 08.05.2017 Letztes Mal: Heute: Folgen als Listen Folgen als Felder (Arrays), beschränkt / unbeschränkt Amortisierte Analyse Weitere Repräsentationen von Folgen Motivation Hashtabellen KIT Institut für Theoretische Informatik 2

Stapel und Schlangen einfache Schnittstellen vielseitig einsetzbar austauschbare, eziente Implementierungen wenig fehleranfällig stack... FIFO queue... popfront pushfront deque... pushback popback KIT Institut für Theoretische Informatik 3

Stapel Operationen: push/pop, entsprechen pushfront/popfront oder pushback/popback für Folgen a b c d pop b c d push x x b c d KIT Institut für Theoretische Informatik 4

Stapel Implementierungsvarianten Operationen: push/pop, entsprechen pushfront/popfront oder pushback/popback für Folgen List: OK aber doppelte Verkettung ist overkill SList: mittels pushfront/popfront. Endezeiger unnötig, dummy item unnötig UArray: mittels pushback/popback. Cache-ezient aber nur amortisierte konstante Laufzeit pro Operation In der Vorlesung Algorithm Engineering lernen wir bessere Implementierungen kennen. a b c d pop b c d push x x b c d KIT Institut für Theoretische Informatik 5

Stapel Anwendungen Rekursion Klammerstrukturen,..., Parser Daten irgendwie ablegen und wieder herausholen KIT Institut für Theoretische Informatik 6

Warteschlangen / First-In-First-Out / FIFO Operationen: enqueue/dequeue, entsprechen pushfront/popback oder pushback/popfront für Folgen Beispiel: a b c enqueue dequeue x a b c x a b x c KIT Institut für Theoretische Informatik 7

FIFO Implementierungsvarianten Operationen: enqueue/dequeue, entsprechen pushfront/popback oder pushback/popfront für Folgen List: OK aber doppelte Verkettung ist overkill SList: mittels pushback/popfront. Endezeiger wichtig, dummy item unnötig Array,UArray: scheinbar nicht ezient möglich CArray: zyklisches Array In der Vorlesung Algorithm Engineering lernen wir bessere Implementierungen kennen. KIT Institut für Theoretische Informatik 8

Class BoundedFIFO(n : N) of Element b : Array [0..n] of Element // CArray h=0 : N // head t=0 : N // tail Function isempty : {0, 1}; return h = t h n 0 Function rst : Element; assert isempty; return b[h] Function size : N; return (t h + n + 1) mod (n + 1) Procedure pushback(x : Element) assert size< n b[t] := x t := (t + 1) mod (n + 1) Procedure popfront assert isempty; h := (h + 1) mod (n + 1) Einsparung von einem Element durch gesonderte Variable s (für size) b t KIT Institut für Theoretische Informatik 9

Warteschlangen Anwendungen Datenpuer für Netzwerke Pipeline-Verarbeitung Job-Queues (Fairness...) Breitensuche in Graphen (siehe Kapitel 9.1) KIT Institut für Theoretische Informatik 10

Deque Double-Ended Queues Aussprache wie dek. List: OK SList: Nein (aber push/pop-front und pushback OK) Array,UArray: Nein CArray: Ja KIT Institut für Theoretische Informatik 11

Deque Anwendungen Relativ selten. Oft werden nur 3 der vier Operationen benötigt. Work Stealing Load Balancing Undo/Redo Operationspuer KIT Institut für Theoretische Informatik 12

Vergleich: Listen Felder Vorteile von Listen exibel remove, splice,... kein Verschnitt Vorteile von Feldern beliebiger Zugri einfach kein Overhead für Zeiger Cache-ezientes scanning KIT Institut für Theoretische Informatik 13

Operation List SList UArray CArray explanation ` ' [ ] n n 1 1 1 1 1 1 not with inter-list splice rst 1 1 1 1 last 1 1 1 1 insert 1 1 n n insertafter only remove 1 1 n n removeafter only pushback 1 1 1 1 amortized pushfront 1 1 n 1 amortized popback 1 n 1 1 amortized popfront 1 1 n 1 amortized concat 1 1 n n splice 1 1 n n ndnext,... n n n n cache-ecient KIT Institut für Theoretische Informatik 14

Ausblick: Weitere Repräsentationen von Folgen Hashtabellen: schnelles Einfügen, Löschen und Suchen Kapitel 4 Prioritätslisten: schnelles Einfügen, Minimum Entfernen Kapitel 6 Suchbäume,... : sortierte Folgen einfügen, löschen, suchen, Bereichsanfragen,... Kapitel 7 KIT Institut für Theoretische Informatik 15

Hashing (Streuspeicherung) to hash völlig durcheinander bringen. Paradoxerweise hilft das, Dinge wiederzunden KIT Institut für Theoretische Informatik 16

Hashtabellen speichere Menge M Element. key(e) ist eindeutig für e M. unterstütze Wörterbuch-Operationen in Zeit O(1). M.insert(e : Element): M := M {e} M.remove(k : Key): M := M \ {e}, key(e) = k M.nd(k : Key): return e M with key(e) = k; falls nichts gefunden Anderes Interface: map/partielle Funktion Key Element M[k] = M.nd(k) KIT Institut für Theoretische Informatik 17

Exkurs: Konventionen für Elemente Viele Datenstrukturen repräsentieren Mengen (engl. auch collection classes). Die Mengenelemente e haben Schlüssel key(e). Elementvergleich hier gleichbedeutend mit Schlüsselvergleich. e = e gdw. key(e) = key(e ) (analog für e < e und e > e ). KIT Institut für Theoretische Informatik 18

Hashing: Anwendungen Auslieferungsregale der UB Karlsruhe Entfernen exakter Duplikate Schach (oder andere kombinatorische Suchprogramme): welche Stellungen wurden bereits durchsucht? Symboltabelle bei Compilern Assoziative Felder bei Script-Sprachen wie perl oder python Datenbank-Gleichheits-Join (wenn eine Tabelle in den Speicher passt) Routenplaner: Teilmengen von Knoten, z. B. Suchraum... KIT Institut für Theoretische Informatik 19