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



Ähnliche Dokumente
Algorithmen und Datenstrukturen Suchbaum

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

Suchen und Sortieren Sortieren. Heaps

13. Binäre Suchbäume

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

Sortierte Folgen 250

4.4.1 Implementierung vollständiger Bäume mit Feldern. Reguläre Struktur: Nachfolger des Knoten i sind die Knoten 2*i und 2*i+1.

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

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:

Datenstrukturen und Algorithmen

Suchen und Sortieren Sortieren. Heaps

Datenstrukturen & Algorithmen

5.5 Prioritätswarteschlangen

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

15 Optimales Kodieren

DATENSTRUKTUREN UND ZAHLENSYSTEME

KONSTRUKTION VON ROT-SCHWARZ-BÄUMEN

Grundlagen der Programmierung 2. Bäume

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

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.

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

Programmieren I. Kapitel 7. Sortieren und Suchen

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

Programmiertechnik II

Tutorium Algorithmen & Datenstrukturen

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Algorithmen und Datenstrukturen Balancierte Suchbäume

Vorlesung Datenstrukturen

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

Überblick. Lineares Suchen

WS 2009/10. Diskrete Strukturen

Algorithmen & Datenstrukturen 1. Klausur

Kapiteltests zum Leitprogramm Binäre Suchbäume

Objektorientierte Programmierung

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

Client-Server-Beziehungen

Kap. 4.2: Binäre Suchbäume

9. Natürliche Suchbäume

Suchen und Sortieren

Algorithms & Datastructures Midterm Test 1

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

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

Einführung in die Programmierung

Formale Spezialisierungstechniken. am Beispiel des binären Baums. Hybride Programmiersprachen Daniel Krompass Berlin, 2009

Wünschenswerte Eigenschaft von Suchbäumen mit n Knoten: Suchen, Einfügen, Löschen auch im schlechtesten Fall O(log n)

Algorithmen und Datenstrukturen

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

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

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

18. Natürliche 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)

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

EndTermTest PROGALGO WS1516 A

Einführung in die Programmierung für Wirtschaftsinformatik

Grundlagen der Algorithmen und Datenstrukturen Kapitel 6

Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6

Abschnitt: Algorithmendesign und Laufzeitanalyse

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

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

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

Große Übung Praktische Informatik 1

Problem: Finde für Alphabet mit n Zeichen einen Binärcode, der die Gesamtlänge eines Textes (über diesem Alphabet) minimiert.

Informatik II, SS 2018

Software Engineering Klassendiagramme Assoziationen

Anwendungsbeispiel MinHeap

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 )

Algorithmen und Datenstrukturen

U08 Entwurfsmuster (II)

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

Aufbau eines "B-Baums" der Ordnung 3, Teil 1

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

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

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

Abstract Data Structures

Objektorientierte Programmierung

368 4 Algorithmen und Datenstrukturen

Informatik II, SS 2014

Programmiertechnik II

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Programmierkurs Java

Tagesprogramm

Geordnete Binärbäume

elementare Datenstrukturen

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

Java. public D find(k k) { Listnode K, D n = findnode(k); if(n == null) return null; return n.data; Java

Codes und Informationsgehalt

1 topologisches Sortieren

Algorithmen und Datenstrukturen

Internet Explorer Version 6

Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Java Einführung Abstrakte Klassen und Interfaces

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

SEP 114. Design by Contract

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

Graphen: Datenstrukturen und Algorithmen

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Transkript:

6 Partiell geordnete binäre Bäume: Heap (Haufen) Motivation für manchen Anwendungen nur partielle Ordnung der Elemente statt vollständiger nötig, z.b. - Prioritätsschlange: nur das minimale (oder maximale) Element - k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen: enqueue() findmin() dequeuemin() Gesucht Datenstruktur, die alle Operationen auch im schlechtesten Fall in logarithmischer Zeit O(log n) ausführt Verschiedene Realisierungen, hier binärer Heap Achtung, nicht mit "Freispeicher-Halde" ("heap")verwechseln!! hs / fub alp--heap Heap () Partiell geordneter Baum ist ein knotenmarkierter Binärbaum mit der Eigenschaft: jeder Knotenwert ist kleiner oder gleich den Werten seiner Nachfolger (Heap-Invariante): für alle Knoten k: c e child(k) => k.val( ) <=c.val( ) 9 Operationen: Einfügen enqueue() Minimum entfernen dequeuemin() evtl. findmin() 8 0 "MaxHeap": k.val() >= c.val() analog. hs / fub alp--heap

Binärer Heap Logarithmische Laufzeit? Kann Baum entarten? 9 JA 5 6 0 5 Ziel: Baum möglichst ausgeglichen halten z.b. Binominal Heap, Fibonacci Heap hier: Binärer Heap hs / fub alp--heap Binärer Heap Zusätzliche Strukturinvariante: Fast vollständiger binärer Baum 5 6 h 5 9 0 6 5 8 Höhe h : h <= n < h+ => h <= log n Einige Beispiele aus Goodrich/ Tamassia (s. Lit.-Liste) hs / fub alp--heap

Beispiel Kein binärer Heap 5 6 5 0 6 5 8 hs / fub alp--heap 5 Binäre Heaps Kein binärer Heap 5 6 5 9 0 6 5 8 hs / fub alp--heap 6

Binärer Heap Einfügen (enqueue) 9 8 5 0 8 9 8 0 (i) vollständiger Baum => Knoten hier einfügen (ii) Heap-Eigenschaft wiederherstellen hs / fub alp--heap Binärer Heap enqueue() 9 8 5 0 8 8 9 0 while (parent > val) {exchange();} ("upheap") O(log n) Vertauschungen hs / fub alp--heap 8

Binärer Heap Vollständiger Baum: Feldrepräsentation 9 8 5 0 8 8 9 0 9 8 0 8 0 5 8 9 0... 5 Reguläre Struktur: Nachfolger des Knoten i sind die Knoten *i und *i+, Vorgänger von i : i/ hs / fub alp--heap 9 Imperative Implementierung public class VectorHeap implements... { // model: // data Ord t => POTree t = E N(POTree t) t (POTree t) // inv E = True // inv(n l x r) = (if l /= E then x<=root l else True) && (if r /= E then x<=root r else True) && inv l && inv r // && and POTree is complete. Object [] vheap; // the array implementing the tree private int size; //number of nodes private int length; //a.length private int current; // the current node private final int ROOT = ; // the root hs / fub alp--heap 0 5

Binary heap: enqueue public void enqueue(comparable val) throws java.lang.exception { // requires : - // effects: inserts val into this as a leaf into the // only possible position which maintains completeness // of tree and maintains heap invariant // if count > size throws an execption if (sizet== vheap.length -) throw new java.lang.exception("heap full"); size++; int i = size; while (i > && vheap[parent(i)].compareto(val)>0) { vheap[i] = vheap[parent(i)]; i = i/; } vheap[i] = val; } hs / fub alp--heap Binärer Heap: dequeue dequeue 9 8 5 0 Minimum entfernen. ) Inv. "fast vollständig" herstellen: -> letztes Element als Wurzel. ) Heap-Invariante herstellen. 8 9 0 8 muss hier entfernt (Vollständigkeit) und passend eingefügt werden (Heap-Eigenschaft) hs / fub alp--heap 6

Beispiel: dequeue 8 9 8 5 0 8 9 0 hs / fub alp--heap Beispiel: dequeue 8 9 solange ein Kind mit kleinerem Wert existiert: Tausche mit kleinerem der Kinder. 8 5 0 8 9 0 hs / fub alp--heap

"downheap" 9 8 5 8 0 8 9 0 hs / fub alp--heap 5 Beispiel 9 8 5 0 8 8 9 0 hs / fub alp--heap 6 8

Binärer Heap: dequeue Noch ein Beispiel 6 5 5 0 8 0 9 0 hs / fub alp--heap 5 6 0 5 0 8 9 0 Tauschoperationen: 0 <->, <-> 0, 5 <-> 0 hs / fub alp--heap 8 9

Binärer Heap Laufzeit: enqueue() und dequeue(): O(log n) findmin() : O() Sortieren mit Heap: n*log n Operationen. Konstruktion eines Heap: n log n Schritte. Geht das bessser? Ja hs / fub alp--heap 9 Konstruktion eine Heap mit n = k Elementen (n+)/ Elemente zu Heap-Knoten machen. hs / fub alp--heap 0 0

n+ / Elemente hinzunehmen zu n-/ heaps verschmelzen. Heap-Eigenschaft herstellen (downheap) ) enqueue(9) ) enqueue(8) enqueue ()

Heap-Konstruktion "Bottom-up"-Konstruktion benötigt O(n) Schritte. (n+)/ Knoten einfügen (n+)/ Knoten einfügen und downheap (n+)/8 Knoten einfügen und downheap... n Einfügeoperationen, n/ upheaps => O(n) hs / fub alp--heap