Suchbaum. AVL-Baum Rot-Schwarz B-Baum B*-Baum... -Baum

Ähnliche Dokumente
Vorlesung Informatik 2 Algorithmen und Datenstrukturen

5.8.2 Erweiterungen Dynamische Hash-Funktionen (mit variabler Tabellengröße)?

Informatik II, SS 2014

4. Hashverfahren. geg.: Wertebereich D, Schlüsselmenge S = {s 1,..., s n } D. Menge A von Speicheradressen; oft: A = {0,..., m 1}

Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Programmiertechnik II

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

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

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Sommersemester Dr. Tobias Lasser

3. Binäre Suchbäume. 3.1 Natürliche binäre Suchbäume. EADS 3.1 Natürliche binäre Suchbäume 78/598 ľernst W. Mayr

Hashing. Algorithmen und Datenstrukturen II 1

Informatik II, SS 2014

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

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

16. Dezember 2004 Dr. M. Schneider, P. Ziewer

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Bäume, Suchbäume und Hash-Tabellen

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Algorithmen und Datenstrukturen II

Informatik II Vorlesung am D-BAUG der ETH Zürich

Balancierte Bäume. Minimale Knotenanzahl von AVL-Bäumen. AVL-Bäume. Definition für "balanciert":

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

Informatik II, SS 2014

Wörterbucher. Das Wörterbuch 1 / 71

Algorithmen und Datenstrukturen Hashverfahren

ALP II Dynamische Datenmengen

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Algorithmen und Datenstrukturen Suchbaum

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

13. Binäre Suchbäume

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Geordnete Binärbäume

Objektorientierte Programmierung

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

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

equals und hashcode SortedSet NavigableSet Assoziative Container Programmieren II Dr. Klaus Höppner Hochschule Darmstadt Sommersemester / 32

Einführung in die Informatik 2

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

1 Polymorphie (Vielgestaltigkeit)

Suchen und Sortieren

Klausur zur Veranstaltung Programmierung (fortgeschrittene Konzepte)

Dynamische Mengen. Realisierungen durch Bäume

Fibonacci-Suche. Informatik I. Fibonacci-Suche. Fibonacci-Suche. Einführung. Rainer Schrader. 24. Mai 2005

Gegeben Zieladresse, finde Nachbarknoten, an den Paket zu senden ist ("Routing-Tabelle")

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

Nachtrag zu binären Suchbäumen (nicht (nur) AVL Bäumen: Löschen von Elementen in binären Suchbäumen. 1. Fall: zu löschendes Element ist Blatt: löschen

Suchen und Sortieren Binäre Suchbäume

4.4.1 Statisches perfektes Hashing. des Bildbereichs {0, 1,..., n 1} der Hashfunktionen und S U, S = m n, eine Menge von Schlüsseln.

Kapiteltests zum Leitprogramm Binäre Suchbäume

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Algorithmen & Datenstrukturen 1. Klausur

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

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

Datenstrukturen & Algorithmen

Java Einführung Collections

Bäume, Anwendung und Begriffe

Kap. 4.2: Binäre Suchbäume

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Verkettete Datenstrukturen: Bäume

Tutoraufgabe 1 (2 3 4 Bäume):

Klausur Informatik B April Teil I: Informatik 3

10. Kapitel (Teil1) BÄUME GRUNDLAGEN. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm

BÄUME BALANCIERTE BÄUME. Algorithmen & Datenstrukturen Prof. Dr. Wolfgang Schramm. 10. Kapitel (Teil 2)

Vorlesung Datenstrukturen

Definition 15 Rot-Schwarz-Bäume sind externe Binärbäume (jeder Knoten hat 0 oder 2 Kinder) mit roten und schwarzen Kanten, so dass gilt:

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Informatik II, SS 2014

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

8.1 Einführendes Beispiel

Algorithmen und Datenstrukturen SoSe 2008 in Trier. Henning Fernau Universität Trier

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Algorithmen und Datenstrukturen

Oracle: Abstrakte Datentypen:

EndTermTest PROGALGO WS1516 A

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

BTree.dll - Balancierte und verkettete Bäume. Ecofor. BTree.dll. Realisiert mit Microsoft Visual Studio /9

Copyright, Page 1 of 8 AVL-Baum

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

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

Datenstrukturen in Java

368 4 Algorithmen und Datenstrukturen

Informatik II, SS 2014

Nachtrag zu binären Suchbäumen

! DBMS organisiert die Daten so, dass minimal viele Plattenzugriffe nötig sind.

Teil 1: Suchen. Problemstellung Elementare Suchverfahren Hashverfahren Binäre Suchbäume Ausgeglichene Bäume. B-Bäume Digitale Suchbäume Heaps

Suchen in Listen und Hashtabellen

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:

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Gebundene Typparameter

Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.

14. Rot-Schwarz-Bäume

Maps (Dictionaries, assoziative Speicher)

Assoziative Container in C++ Christian Poulter

Suchen. lineare Suche, binäre Suche, divide and conquer, rekursive und iterative Algorithmen, geordnete Daten, Comparable

Programmiertechnik II Klausur WS 15/16 Angewandte Informatik Bachelor

Transkript:

Suchbäume Suchbaum Binärer Suchbaum Vielweg-SB AVL-Baum Rot-Schwar B-Baum B*-Baum... -Baum Fast ausgeglichen: Differen der Blatttiefen begrent Ausgeglichen: alle Blätter besiten gleiche Tiefe. Wird für Eternspeicherugiffe verwendet. hs / fub alp3-2.1 1 Einfügen AVL-Baum Annahme: AVL Knoten k enhält Feld mit Höhe des Baumes, dessen Knoten k ist. (height) Verfahren: Rekursives Traversieren um Einfügepunkt. Rückschreitend: Balance prüfen X l r hs / fub alp3-2.1 2 1

AVL-Baum: Einfügen AvlNode insert( Comparable, AvlNode t { if( t == null ) t = new AvlNode(, null, null ); else //recursive call of insert() if(.compareto( t.element ) < 0 ) { t.left = insert(, t.left ); // Balance check after recursive call if( height( t.left ) - height( t.right ) == 2 ) // Check single or double rotation if(.compareto( t.left.element ) < 0 ) t = rotatewithleftchild( t ); else t = doublewithleftchild( t ); } else if(.compareto( t.element ) > 0 )...} // adjust height t.height = ma(height(t.left),height(t.right ) ) + 1; return t; } hs / fub alp3-2.1 3 Rotieren AvlNode rotatewithleftchild( AvlNode ) {AvlNode =.left;.left =.right;.right = ;.height = ma( height(.left ), height(.right ) ) + 1;.height = ma( height(.left ),.height ) + 1; return ; } hs / fub alp3-2.1 4 2

Doppelt rotieren (l r) AvlNode doublewithleftchild( AvlNode ){.left = rotatewithrightchild(.left ); return rotatewithleftchild( ); } 2 ll lr hs / fub alp3-2.1 5 AVL Bäume: Rotationen ll lr hs / fub alp3-2.1 6 3

AVL Bäume: Rotationen 2 2 ll lr hs / fub alp3-2.1 7 3.3.2.4 B-Bäume - Motivation Ziel: Persistente Datenspeicherung mit effiientem Zugriff " Lösung:" Daten bei Programmstart in Hauptspeicher laden, Vor Beendigung serialisiert auf Platte schreiben. Schlecht! Problem: Hohe Lese-/Schreibkosten 1 : 10 4-10 5 Besser: Benötigte Daten von der Platte lesen, verändern, urückschreiben. hs / fub alp3-2.1 8 4

B-Baum: Suchbaum für Hintergrundspeicher - Mehrweg-Suchbaum mit variablem Grad k, t <= k <=2 t, t: Minimalgrad Wurel: 1 <= k <= 2t - Knoten mit k Unterbäumen enthalten k-1 Werte (Schlüssel, kes) - alle Blätter haben gleiche Tiefe 30 t=2 20 25 35 40 10 15 18 22 23 24 27 29 31 34 37,39 45 47 50 hs / fub alp3-2.1 9 B + -Baum (manchmal B*-Baum genannt!) Ziel: Großer Verweigungsgrad innerer Knoten Methode: Schlüssel in inneren Knoten, alle Schlüssel-Wert-Paare in Blättern. Wert: Verweis auf Datensat im Hintergrundspeicher 30 20 25 35 40 15 20 21 25 27 30... B+-Baum mit "Sat"- Schlüsseln 45 47... Hintergrundspeicher mit Datensäten (wahlfreier Zugriff) hs / fub alp3-2.1 10 5

3.3.5 Hash-Verfahren Implementierung von Mengen (und Wörterbücher): Alternative u Suchbäumen to hash: erhacken, Hackfleisch Grundidee: Indeierung der Tabelle mit geeignet transformierten Schlüsselwerten {30,63,15,11,97,19} h() = mod 10 berechnet den den Plat von in der "Hashtabelle" t (in erster Näherung...) t 0 30 1 11 2-3 63 4-5 15 6-7 97 8-9 19 hs / fub alp3-2.1 11 Hash-Verfahren (1) Hash-Verfahren implementiert ein Wörterbuch (Map, dictionnar), das für einen Schlüssel den ugehörigen Wert liefert. Beispiele: Telefonbuch: Nachname -> Telefonnr; Kasse: Produktcode -> Preis, u.v.m. Gegeben Schlüsselmenge V Funktion h : K -> {0,...,m-1} (Hashfunktion) Wertemenge V (optional, wenn nur Menge von Schlüsseln verwaltet wird) Tabelle tab Entr[] mit tab.length() == m Implementierung: - intern als Feld, etern Folge von Plattenspeicherblöcken -Feldelement vom Tp Entr speichert Schlüssel k und/oder Wert v Tabellenelement ("slots", buckets") kann b Schlüssel k bw. Schlüssel / Wertpaare (k,v) speichern hier: Bucket-Größe b = 1 hs / fub alp3-2.1 12 6

Hash-Verfahren (2) Wichtige Operationen: boolean insert(ke k, Object v) { // requires: k!= null // effects: if tab[h(k)].value = v' replace v' b v // else put v into tab[h(k)] if (tab[h(k)] == null) tab[h(k)].value = v else... ; //hash collision Object find : K -> V //.B.:Feldimplementierung Object lookup (Ke k){ if (tab[h(k)].ke) == k) return tab[h(k)].value else??? //collision or not // found?? } hs / fub alp3-2.1 13 Hash-Kollisionen Hash-Kollision liegt vor, wenn h(k i ) = h(k j ) für k i!= k j Annahme: für jeden Schlüssel k und jedes i, 0<=i<m gilt: Wahrscheinlichkeit (h(k) == i) = 1/m Wie wahrscheinlich sind Kollisionen? n Schlüssel einfügen: W(mindestens eine Kollision) = 1-W(keine Koll.) W(keine K) = 1 * (m-1)/m * (m-2)/m *... * (m-n+1) / m = m! / m n *(m-n)! Bsp.: m=10, n=8: W= 1-0.0181, m=20, n=10 W= 1-0,065 hs / fub alp3-2.1 14 7

Hash-Kollisionen Gängige Verfahren ur Kollisionsbehandlung: - Offene Adressierung (= geschlossene Hashtabelle): Finde freien Plat in der Tabelle,.B. nächster nicht belegter Plat hier: 3 Versuche, bis freier Plat gefunden. - Verkettung (Chaining) hs / fub alp3-2.1 15 Laufeit bei Verkettung Mittlere Laufeit "Suche mit Schlüssel k" tab[].length = m n Schlüssel gespeichert Füllungsgrad: α = n/m Annahme: uniformes Hash - Nicht erfolgreiche Suche: für alle i: tab[i] ist Liste der Länge n/m Damit: Suche im Mittel O ( 1 + n/m) und mit der Annahme: n/m = const: O(1) hs / fub alp3-2.1 16 8

Laufeit bei Verkettung - Erfolgreiche Suche: 1 + n/2*m - 1/2*m = O(1 + α) Operationen Bewertung: unschlagbar schnelles Einfügen / Suchen... wenn "gute" Hash-Funktion und α nicht u groß Sonst.B. "dnamisches Verändern" der Tabellengröße, aufwendig! Sehr einfache Implementierung hs / fub alp3-2.1 17 Hash Tabelle mit Verkettung public class HashMapSimple //etends AbstractMap //implements Map { private Entr table[]; //Hash Table private int count; // total number of entries private static class Entr //implements Map.Entr { int hash; Object ke; Object value; Entr net; Entr(int hash, Object ke, Object value) { this.hash = hash; this.ke = ke; this.value = value; }...} hs / fub alp3-2.1 18 9

Verkettung: Einfügen public Object insert(object ke, Object value) { // no duplicate kes not in Hash table. Entr tab[] = table; int hash = 0; int inde = 0; hash = ke.hashcode(); inde = (hash & 07FFFFFFF) % tab.length; for (Entr e = tab[inde] ; e!= null ; e = e.net) { if ((e.hash == hash) && ke.equals(e.ke)) { Object old = e.value; e.value = value; return old; } } // Creates the new entr. Entr e = new Entr(hash, ke, value); e.setnet(tab[inde]); //chain in front tab[inde] = e; count++; return null; } hs / fub alp3-2.1 19 Verkettung: Suchen Suche public Object lookup(object ke) { // search(ke), get(ke)... Entr tab[] = table; int hash = ke.hashcode(); int inde = (hash & 07FFFFFFF) % tab.length; for (Entr e = tab[inde]; e!= null; e = e.net) if ((e.hash == hash) && ke.equals(e.ke)) return e.value; return null; } hs / fub alp3-2.1 20 10