Suchen und Sortieren



Ähnliche Dokumente
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:

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 Suchbaum

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

Datenstrukturen & Algorithmen

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

13. Binäre Suchbäume

Kap. 4.2: Binäre Suchbäume

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

Kapiteltests zum Leitprogramm Binäre Suchbäume

Programmiertechnik II

Tutorium Algorithmen & Datenstrukturen

Algorithmen und Datenstrukturen Balancierte Suchbäume

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

Java: Vererbung. Teil 3: super()

Nachtrag zu binären Suchbäumen

Algorithmen und Datenstrukturen

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

Suchen und Sortieren Sortieren. Heaps

Datenstrukturen und Algorithmen

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Software Engineering Klassendiagramme Assoziationen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

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

Was meinen die Leute eigentlich mit: Grexit?

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

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

368 4 Algorithmen und Datenstrukturen

Binäre Bäume Darstellung und Traversierung

Algorithmen & Datenstrukturen 1. Klausur

Algorithmen und Datenstrukturen

Informatik II, SS 2014

Vorkurs Informatik WiSe 15/16

Test-Driven Design: Ein einfaches Beispiel

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

Vorkurs C++ Programmierung

WS 2009/10. Diskrete Strukturen

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

EndTermTest PROGALGO WS1516 A

Anwendungsbeispiel MinHeap

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

1 topologisches Sortieren

Typumwandlungen bei Referenztypen

Ich möchte eine Bildergalerie ins Internet stellen

Übung - Datensicherung und Wiederherstellung in Windows Vista

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

OSF Integrator für Btracking und Salesforce Anleitung für die Nutzer

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

Programmierkurs Java

Breiten- und Tiefensuche in Graphen

Programmieren I. Kapitel 7. Sortieren und Suchen

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Klausur zur Einführung in die objektorientierte Programmierung mit Java

DATENSTRUKTUREN UND ZAHLENSYSTEME

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

Geordnete Binärbäume

Kapitel 5: Dynamisches Programmieren Gliederung

Eigentlich sollte es ein Wanderpokal werden.

Vorname:... Matrikel-Nr.:... Unterschrift:...

Java Kurs für Anfänger Einheit 5 Methoden

Landes-Arbeits-Gemeinschaft Gemeinsam Leben Gemeinsam Lernen Rheinland-Pfalz e.v.

9. Natürliche Suchbäume

Urlaubsregel in David

Client-Server-Beziehungen

Serviceanweisung Austausch Globalsign Ausstellerzertifikate

Neuanlage des Bankzugangs ohne das bestehende Konto zu löschen

Die Post hat eine Umfrage gemacht

Grundlagen der Programmierung 2. Bäume

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

Reporting Services und SharePoint 2010 Teil 1

Sage Start Einrichten des Kontenplans Anleitung. Ab Version

Excel Pivot-Tabellen 2010 effektiv

Objektorientierte Programmierung

Java Einführung Abstrakte Klassen und Interfaces

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Prinzipien Objektorientierter Programmierung

Das EDV-Cockpit mit MindManager für SharePoint

Idee: Wenn wir beim Kopfknoten zwei Referenzen verfolgen können, sind die Teillisten kürzer. kopf Eine Datenstruktur mit Schlüsselwerten 1 bis 10

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

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Software Engineering Interaktionsdiagramme

Verwaltungsnummer festlegen oder ändern mit Ausnahme der 1XPPHUSie bestätigen die Eintragungen mit Drücken der Taste Return.

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Anwendungsbeispiele Buchhaltung

Objektorientierte Programmierung

Einführung in die Programmierung für Wirtschaftsinformatik

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:...

Transkript:

(Folie 69, Seite 36 im Skript) 5 6 1 4 Als assoziatives Array geeignet Schlüssel aus geordneter Menge Linke Kinder kleiner, rechte Kinder größer als Elternknoten Externe und interne Knoten Externe Knoten zu einem Sentinel zusammenfassen?

(Folie 70, Seite 36 im Skript) Java public class Searchtree K extends Comparable K, D extends Dictionary K, D { protected Searchtreenode K, D root; Java class Searchtreenode K extends Comparable K, D { K key; D data; Searchtreenode K, D left, right, parent;

Suchen (Folie 71, Seite 38 im Skript) Java public D find(k k) { if(root null) return null; Searchtreenode K, D n = root.findsubtree(k); return n null? null : n.data; Im Gegensatz zu Liste: Zusätzlicher Test auf null.

Suchen (Folie 7, Seite 38 im Skript) Java Searchtreenode K, D findsubtree(k k) { int c = k.compareto(key); if(c > 0) return right null? null : right.findsubtree(k); else if(c < 0) return left null? null : left.findsubtree(k); else return this; Wieder zusätzlicher Test auf null. Durch Sentinel verhindern! Besser: Iterativ statt rekursiv.

Einfügen (Folie 73, Seite 38 im Skript) 5 5 6 1 4 6 1 4 3 Wo fügen wir 3 ein? Wie fügen wir es ein? In den richtigen externen Knoten!

Einfügen (Folie 74, Seite 38 im Skript) Java public void insert(k k, D d) { if(root null) root = new Searchtreenode K, D (k, d); else root.insert(new Searchtreenode K, D (k, d));

Einfügen (Folie 75, Seite 38 im Skript) Java public void insert(searchtreenode K, D n) { int c = n.key.compareto(key); if(c < 0) { if(left null) left.insert(n); else {left = n; left.parent = this; else if(c > 0) { if(right null) right.insert(n); else {right = n; right.parent = this; else copy(n);

Löschen (Folie 76, Seite 38 im Skript) Beim Löschen unterscheiden wir drei Fälle: Blatt (einfach) Der Knoten hat kein linkes Kind (einfach) Der Knoten hat ein linkes Kind (schwierig) Damit sind alle Fälle abgedeckt! Warum kein Fall: Kein rechtes Kind?

Löschen (Folie 77, Seite 38 im Skript) Löschen eines Blatts: 5 5 1 4 3 6 1 4 3 Ein Blatt kann durch Zeigerverbiegen gelöscht werden.

Löschen (Folie 78, Seite 38 im Skript) Löschen eines Knotens ohne linkes Kind: 5 5 6 8 1 4 8 1 4 7 9 3 7 9 3 Wir können kopieren oder Zeiger verbiegen.

Löschen (Folie 79, Seite 38 im Skript) Löschen eines Knotens mit linkem Kind: 7 1 5 10 9 11 4 3 1 Finde den größten Knoten im linken Unterbaum Kopiere seinen Inhalt 3 Lösche ihn

Löschen (Folie 80, Seite 38 im Skript) In der Klasse Searchtree<K,D>: Java public void delete(k k) { if(root null) return; if(root.left null && root.right null && root.key k) root = null; else { Searchtreenode K, D n = root.findsubtree(k); if(n null) n.delete();

Löschen (Folie 81, Seite 38 im Skript) Java void delete() { if(left null && right null) { if(parent.left this) parent.left = null; else parent.right = null; else if(left null) { if(parent.left this) parent.left = right; else parent.right = right; right.parent = parent; else { Searchtreenode K, D max = left; while(max.right null) max = max.right; copy(max); max.delete();

Löschen (Folie 8, Seite 38 im Skript) In Searchtree<K,D> jetzt korrekt: Java public void delete(k k) { if(root null) return; if(root.key.equals(k)) if(root.left null && root.right null) { root = null; return; else if(root.left null) { root = root.right; root.parent = null; return; Searchtreenode K, D n = root.findsubtree(k); if(n null) n.delete();

Analyse (Folie 83, Seite 38 im Skript) Eine kleine Vorbemerkung: 3 1 0 0 1 3 4 Summe schlechte Näherung des Maximums.

Analyse (Folie 84, Seite 38 im Skript) 1.5 1 0.5 0 0 1 3 4 Summe gute Näherung des Maximums. Die Kurven sind steiler.

Analyse (Folie 85, Seite 39 im Skript) Wir fügen die Knoten 1,..., n in zufälliger Reihenfolge in einen leeren Suchbaum ein. Sei T n die Höhe dieses Suchbaums. Wir interessieren uns für E(T n ).

(Folie 86, Seite 39 im Skript) Wir betrachten erst einmal T 0, T 1, T und T 3 : E(T 0 ) = 0 E(T 1 ) = 1 E(T ) = E(T 3 ) = 8/3 1 1 3 3 3 3 1 1 3 1 1 3

(Folie 87, Seite 39 im Skript) Allgemeiner Fall: Die Wurzel des Baums enthält W {1,..., n. Pr[W = k] = 1/n für k {1,..., n Wie sieht der Rest des Baums aus, falls W = k? In den linken Teilbaum wurden {1,..., k 1 in zufälliger Reihenfolge eingefügt. Seine Höhe ist T k 1. Die Höhe des rechten Teilbaums ist T n k. Die Gesamthöhe ist T n = max{t k 1, T n k + 1.

(Folie 88, Seite 40 im Skript) Die Gesamthöhe ist T n = max{t k 1, T n k + 1. E(T n ) = 1 n n k=1 E(max{T k 1, T n k + 1) Wir können das Maximum durch die Summe abschätzen: E(T n ) 1 n n ( ) E(T k 1 ) + E(T n k ) + 1 k=1 Leider zu grob! Führt zu einer schlechten Abschätzung.

Problem: E(max{X, Y ) E(X ) + E(Y ) korrekt, aber zu ungenau. E(max{X, Y ) max{e(x ), E(Y ) genau genug, aber zu unkorrekt. Führe neue Zufallsvariablen ein: ˆT n = T n, ˆT n = T n, ˆT n = T n (Folie 89, Seite 40 im Skript) ET n = 1 n E ˆT n = 1 n n 1 k=0 E n 1 E k=0 Die Kurven sind jetzt steiler! ( max{t k, T n k 1 + 1 ) ( max{t k,t +1) n k 1

(Folie 90, Seite 40 im Skript) Vereinfachen wir diese Rekursionsgleichung zunächst: E ˆT n = 1 n n 1 E ( max{t k,t +1) n k 1 = = 1 n n 1 k=0 k=0 E ( max{ T k, T n k 1 ) = n n n 1 k=0 n 1 k=0 E ( ˆT k + ˆT n k 1 ) = = n E ( max{ ˆT k n 1 ( E ˆT k + E ˆT k ) = 4 n, ˆT n k 1 ) n 1 E ˆT k k=0 k=0 Diese Rekursionsgleichung läßt sich mit Standardmethoden lösen. Vorlesung Analyse von Algorithmen

(Folie 91, Seite 41 im Skript) E ˆT n = 4 n Wir lösen diese Gleichung nicht. n 1 k=0 E ˆT k Wir zeigen nur, daß E ˆT n (n + 3) 3 = (n + 3)(n + )(n + 1): n = 1: E ˆT 1 = (1 + 3) 3 n > 1: E ˆT n 4 n n 1 k=0 E ˆT k I.V. 4 n n 1 (k + 3) 3 = (n + 3) 3. k=0