Algorithmen und Datenstrukturen

Slides:



Advertisements
Ähnliche Präsentationen
Klassen - Verkettete Liste -
Advertisements

Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Informatik II – Kapitel 11
Algorithmen und Datenstrukturen
„Such-Algorithmen“ Zusammenfassung des Kapitels 11
Kapitel 6. Suchverfahren
<d,a,s, ,i,s,t, ,e,i,n,e, ,L,i,s,t,e>
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Synonyme: Stapel, Keller, LIFO-Liste usw.
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Listen Richard Göbel.
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 24 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
Halbzeit: Kurze Wiederholung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
Sortieren vorsortierter Daten
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 19 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 9 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Anwendungen von Stapeln und Schlangen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (11-3 –Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Online Competitive Algorithms
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (15 Hashverfahren: Verkettung der Überläufer) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (12 – Dynamische Tabellen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 13 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 12 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
WS03/041 Binomial Queues Prof. Dr. S. Albers Prof.Dr.Th Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Operationen auf verketteten Listen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
 Präsentation transkript:

Algorithmen und Datenstrukturen Skiplisten Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 8 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät für Angewandte Wissenschaften Albert-Ludwigs-Universität Freiburg

Randomisierte Skiplisten Verhalten von randomisierten Skiplisten Perfekte Skiplisten Randomisierte Skiplisten Verhalten von randomisierten Skiplisten Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

1. (Perfekte) Skiplisten Mögliche Implementationen von Wörterbüchern Verkette lineare Listen Suchen, Einfügen, Entfernen: (n) Schritte (Balancierte) Suchbäume Suchen, Einfügen, Entfernen: O(log n) Schritte Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Idee:Beschleinige Suche durch zusätzliche Zeiger  1 4 47 2 8 15 17 20 43 (a)  3 2 47 15 1 4 20 2 8 17 43 (b)  3 2 20 1 17 4 8 47 2 15 43 (c) Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Perfekte Skiplisten Perfekte Skipliste: sortierte, verkettet gespeichete Liste mit Kopfelement ohne Schlüssel und Endelement mit Schlüssel  und: Jeder 20-te Knoten hat Zeiger auf nächsten Knoten auf Niveau 0 Jeder 21-te Knoten hat Zeiger auf 21 Positionen entfernten Knoten auf Niveau 1 Jeder 22-te Knoten hat Zeiger auf 22 Positionen entfernten Knoten auf Niveau 22 ... Jeder 2k-te Knoten hat Zeiger auf 2k Positionen entfernten Knoten auf Niveau k k = log n - 1 Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Perfekte Skiplisten Listenhöhe: log n - 1 Gesamtzahl der Zeiger: Anzahl Zeiger pro Listenelement  log n Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Implementation von Skiplisten class skipListNode { /* Knotenklasse für Skip-Listen */ protected int key; protected Object information; protected skipListNode [] next; /* Konstruktor */ skipListNode (int key, int height) { this.key = key; this.next = new skipListNode [height+1]; } Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Implementation von Skiplisten class skipList { /* Implementiert eine Skip-Liste */ public int maxHeight = 0; // Max. Höhe der Liste private skipListNode head; // Kopf der Liste private skipListNode tail; // Ende der Liste private int height; // Akt. Höhe der Liste private skipListNode[] update; // Hilfsarray /* Konstruktor */ skipList (int maxHeight) { this.maxHeight = maxHeight; height = 0; head = new skipListNode (Integer.MIN VALUE, maxHeight); tail = new skipListNode (Integer.MAX VALUE, for (int i = 0; i <= maxHeight; i++) head.next[i] = tail; update = new skipListNode[maxHeight+1]; } Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Suchen in Skiplisten Perfekte Skiplisten: Suchen: O(log n) Zeit public skipListNode search (int key) { /* liefert den Knoten p der Liste mit p.key = key, falls es ihn gibt, und null sonst */ skipListNode p = head; for (int i = height; i >= 0; i--) /* folge den Niveau-i Zeigern */ while (p.next[i].key < key) p = p.next[i]; /* p.key < x <= p.next[0].key */ p = p.next[0]; if (p.key == key && p != tail) return p; else return null; } Perfekte Skiplisten: Suchen: O(log n) Zeit Einfügen, Entfernen: (n) Zeit Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

2. Randomisierte Skiplisten Aufgabe der starren Verteilung der Höhen der Listenelemente Anteil der Elemente mit bestimmter Höhe wird beibehalten Höhen werden gleichmäßig und zufällig über die Liste verteilt Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Einfügen in randomisierte Skiplisten Einfügen von k: Suche (erfolglos) nach k; die Suche endet bei dem Knoten q mit größtem Schlüssel, der kleiner als k ist. Füge neuen Knoten p mit Schlüssel k und zufällig gewählter Höhe nach Knoten q ein. Wähle die Höhe von p, so da für alle i gilt: Sammle alle Zeiger, die über die Einfügestelle hinwegweisen in einem Array und füge p in alle Niveau i Listen mit 0  i  Höhe von p, ein. Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Einfügen in randomisierte Skiplisten public void insert (int key) { /* fügt den Schlüssel key in die Skip-Liste ein */ skipListNode p = head; for (int i = height; i >= 0; i--) { while (p.next[i].key < key) p = p.next[i]; update[i] = p; } p = p.next[0]; if (p.key == key) return; // Schüssel vorhanden int newheight = randheight (); if (newheight > height) { /* Höhe der Skip-Liste anpassen */ for (int i = height + 1; i <= newheight; i++) update[i] = head; height = newheight; p = new skipListNode (key, newheight); for (int i = 0; i <= newheight; i++) { /* füge p in Niveau i nach update[i] ein */ p.next[i] = update[i].next[i]; update[i].next[i] = p; Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Beispiel für Einfügen Schlüssel 16: 20 8 17 47 2 4 15 43  Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Erzeugen zufälliger Höhen private int randheight () { /* liefert eine zufällige Höhe zwischen 0 und maxHeight */ int height = 0; while (rand () % 2 == 1 && height < maxHeight) height++; return height; } Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

3. Verhalten von randomisierten Skiplisten Unabhängig von der Erzeugungshistorie Erwartete Anzahl von Zeigern in einer Liste der Länge n ist 2n Erwartete Höhe einer Liste mit n Elementen ist in O(log n) (genauer:  2 log n + 2) Erwartete Suchkosten für die Suche nach einem Element in einer Liste mit n Elementen sind in O(log n). Einfügen und Entfernen von Elementen in Liste mit n Elementen in erwarteter Zeit O(log n) möglich. Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Erwartete Anzahl von Zeigern zi = # Zeiger von Element i Z = # Zeiger in Liste mit n Elementen = E(Z) = E(zj) = Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Erwartete Höhe einer Liste mit n Elementen h + 1 = max zi P(zi > t) = P(max zi > t) = P(z1 > t ) + P(z2 > t | z1  t) + … P(zn > t | z1, z2, …, zn-1  t)  P(z1 > t) + P(z2 > t) + … + P(zn > t) P(h = j)  P(h > j – 1) Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Erwartete Höhe einer Liste mit n Elementen Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Entfernen eines Schlüssels Entfernen von k: Suche (erfolgreich) nach k Entferne Knoten p mit p.key = k aus allen Niveau i Listen, mit 0  i  Höhe von p, und adjustiere ggfs. die Listenhöhe. Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann

Entfernen eines Schlüssels public void delete (int key) { /* enfernt den Schlüssel key aus der Skip-Liste */ skipListNode p = head; for (int i = height; i >= 0; i--) { /* folge den Niveau-i Zeigern */ while (p.next[i].key < key) p = p.next[i]; update[i] = p; } p = p.next[0]; if (p.key != key) return; /* Schlüssel nicht vorhanden */ for (int i = 0; i < p.next.length; i++) { /* entferne p aus Niveau i */ update[i].next[i] = update[i].next[i].next[i]; /* Passe die Höhe der Liste an */ while (height >= 0 && head.next[height] == tail) height--; Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann