Informatik-Seminar Thema 6: Bäume

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

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

Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen:

Datenstrukturen & Algorithmen

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

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

Programmieren in Haskell Programmiermethodik

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Vorlesung Datenstrukturen

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

expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6))

Algorithmen und Datenstrukturen

Datenstrukturen. einfach verkettete Liste

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

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

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Grundlagen der Programmierung 2. Bäume

Datenstrukturen und Algorithmen

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

Funktionale Programmierung mit Haskell

Tutorium Algorithmen & Datenstrukturen

7. Sortieren Lernziele. 7. Sortieren

Informatik II, SS 2014

Algorithmen und Datenstrukturen Suchbaum

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Proseminar Kodierverfahren bei Dr. Ulrich Tamm Sommersemester 2003 Thema: Codierung von Bäumen (Prüfer Codes...)

Programmierung und Modellierung

Verkettete Datenstrukturen: Bäume

Kapiteltests zum Leitprogramm Binäre Suchbäume

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

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

Dynamisches Huffman-Verfahren

Programmiertechnik II

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search)

15 Optimales Kodieren

Grundlagen: Algorithmen und Datenstrukturen

Programmiertechnik II

Funktionale Programmierung mit Haskell

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Übungen zu Programmierung I - Blatt 8

14. Rot-Schwarz-Bäume

Binärbäume: Beispiel

Binäre Bäume Darstellung und Traversierung

Gierige Algorithmen Interval Scheduling

368 4 Algorithmen und Datenstrukturen

DATENSTRUKTUREN UND ZAHLENSYSTEME

Suchbäume mit inneren Knoten verschiedener Knotengrade.

Suchen und Sortieren Sortieren. Heaps

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

Programmieren in Haskell Einstieg in Haskell

B / B* - Bäume. Guido Hildebrandt Seminar Datenbanksysteme

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

11. Elementare Datenstrukturen

13. Binäre Suchbäume

Programmieren in Haskell

Übrigens: um den Algorithmus im Unterricht einzuführen, sind keine Formeln notwendig! Warum reicht die normale ASCII-Codierung nicht aus?

Sortierverfahren für Felder (Listen)

Tag 7. Pattern Matching und eigene Datentypen

Haskell in der Schule - (K)ein Thema? Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli

11.1 Grundlagen - Denitionen

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

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

Funktionale Programmierung ALP I. Funktionen höherer Ordnung. Teil 2 SS Prof. Dr. Margarita Esponda. Prof. Dr.

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

Haskell, Typen, und Typberechnung. Grundlagen der Programmierung 3 A. Einige andere Programmiersprachen. Typisierung in Haskell

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.

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

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

Kapitel 9 Suchalgorithmen

Suchen und Sortieren

Kap. 4.2: Binäre Suchbäume

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:

Algorithmen & Datenstrukturen 1. Klausur

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

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

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

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 )

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

Algorithmen und Datenstrukturen SS09

Klausur Informatik-Propädeutikum (Niedermeier/Hartung/Nichterlein, Wintersemester 2012/13)

Seminar Kompressionsalgorithmen Huffman-Codierung, arithmetische Codierung

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

Algorithmen und Datenstrukturen Balancierte Suchbäume

Grundlagen der Programmierung 2. Sortierverfahren

Sortierte Folgen 250

Funktionen höherer Ordnung

Informatik II, SS 2014

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Bäume, Anwendung und Begriffe

Datenstrukturen & Algorithmen

Transkript:

Informatik-Seminar 2003 - Thema 6: Bäume Robin Brandt 14. November 2003 1 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Übersicht Definition Eigenschaften Operationen Idee Beispiel Datendefinition Operationen 2 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Verarbeitungsarten Problemaufteilung Dekodieren Kodieren Analyse des Ursprungstextes Huffmanbaum-Erzeugung 3 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Definition eines Baumes Eigenschaften: Menge von Punkten (Knoten) und Linien (Kanten) eine Kante verbindet zwei Knoten ein Baum besitzt 3 Eigenschaften: einen hervorgehobener Knoten, die Wurzel Jeder Knoten c außer der Wurzel ist durch eine Kante mit einem anderen Knoten p, dem Vater von c, verbunden ein Baum ist zusammenhängend spezielle Knoten ohne Kinder : Blätter nicht-blattknoten auch innere Knoten genannt 4 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Eigenschaften Definition Eigenschaften Operationen Binärbaum: Variante eines Baumes mit zwei Stellen für Kinder Definition in Haskell (rekursive Datenstruktur): data BTree a = Leaf a Fork (BTree a) (BTree a) Definierte Eigenschaften Größe: Anzahl der Blätter Höhe: Entfernung zum weitesten Punkt von der Wurzel aus Anzahl innere Knoten = Anzahl Blätter - 1 5 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Eigenschaften Definition Eigenschaften Operationen In Haskell: Verarbeitung mit Pattern Matching size :: BTree a -> Int size (Leaf x) = 1 size (Fork xt yt) = size xt + size yt height :: BTree a -> Int height (Leaf x) = 0 height (Fork xt yt) = 1 + max (height xt) (height yt) nodes :: BTree a -> Int nodes (Leaf x) = 0 nodes (Fork xt yt) = 1 + nodes xt + nodes yt 6 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Glätten eines Bäumes Eigenschaften Operationen Umwandlung des Inhalts des Baumes in eine Liste Reihenfolge der Listenelemente entspricht der Blätterfolge von links nach rechts Umsetzung in Haskell: flatten :: BTree a -> [a] flatten (Leaf x) = [x] flatten (Fork xt yt) = flatten xt ++ flatten yt 7 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Eigenschaften Operationen Erzeugen eines Baumes aus einer Liste Umkehroperation zum Glätten Idee: Liste in zwei Teile unterteilen und daraus neue Teilbäumen erzeugen (Rekursion) mkbtree :: [a] -> BTree a mkbtree xs (m == 0) = Leaf (unwrap xs) otherwise = Fork (mkbtree ys) (mkbtree zs) where m = (length xs) div 2 (ys, zs) = splitat m xs unwrap [x] = x 8 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

mapbtree-operation Eigenschaften Operationen analog zu map auf Listen erzeugt aus einem Baum und einer Funktion einen neuen Baum mapbtree :: (a -> b) -> BTree a -> BTree b mapbtree f (Leaf x) = Leaf (f x) mapbtree f (Fork xt yt) = Fork (mapbtree f xt) (mapbtree f yt) 9 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

foldbtree Definition Eigenschaften Operationen analog zu fold auf Listen berechnet aus zwei Funktionen und einem Baum einen Wert 1. Funktion verarbeitet ein Blattelement 2. Funktion verarbeitet zwei verarbeitete (!) Teilbäume foldbtree :: (a -> b) -> (b -> b -> b) -> BTree a -> b foldbtree f g (Leaf x) = f x foldbtree f g (Fork xt yt) = g (foldbtree f g xt) (foldbtree f g yt) 10 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Eigenschaften Operationen Zurückführen einfacher Operationen auf fold Motivation: Traversieren des Baumes ausgliedern und wiederverwenden size :: BTree a -> Int size (Leaf x) = 1 size (Fork xt yt) = size xt + size yt height :: BTree a -> Int height (Leaf x) = 0 height (Fork xt yt) = 1 + max (height xt) (height yt) size2 = foldbtree (const 1) (+) height2 = foldbtree (const 0) maxsubs where m maxsubs n = 1 + m max n 11 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Idee Beispiel bisher: Information nur in den Blattknoten Erweiterung: auch die inneren Knoten sollen Informationen aufnehmen können Ziel: Entwicklung effizienterer Algorithmen Beispiel: Größeninformation im inneren Knoten für einen schnellen indizierten Zugriff auf den Baum (vgl. (!!) bei Listen) 12 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Datendefinition Definition Idee Beispiel data ATree a = Leaf a Fork Int (ATree a) (ATree a) zusätzliche Int-Komponente speichert die Gesamtgröße des linken Teilbaum muß bei Baumerzeugung zugesichert werden (z.b. durch eigene Funktion zum Erzeugen) Beispiel an der Tafel 13 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Definition Datendefinition Operationen auch labelled binary trees genannt verwendet zur effizienten Suche recht effizient für Mengenrepräsentationen ( - Test proportional zu h(t)) Eigenschaften (Größe, Höhe) und Operationen (flatten, map) ähnlich zu einfachen binären Bäumen (sorted. flatten) searchtree == True keine Blattknoten mehr, alle Informationen in den inneren Knoten 14 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Datendefinition Definition Datendefinition Operationen Nur für Elemente aus Ord-Typklasse definiert Alle kleineren Elemente liegen im linken, alle größeren im rechten Teilbaum data (Ord a) => Stree a = Null Fork (Stree a) a (Stree a) 15 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Erzeugung aus einer Liste Datendefinition Operationen ähnlicher Ablauf wie bei mkbtree Aufteilung der Liste in eine kleinere und eine größere Hälfte mkstree :: (Ord a) => [a] -> Stree a mkstree [] = Null mkstree (x:xs) = Fork (mkstree smaller) x (mkstree larger) where (smaller,larger) = partition (<= x) xs partition :: (a->bool) -> [a] -> ([a],[a]) partition p xs = ([ x x <- xs, p x], [ y y <- xs, (not. p) y]) 16 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Datendefinition Operationen Sortieren mit Hilfe von Suchbäumen es gilt: (sorted. flatten) searchtree == True Idee: Umwandlung einer Liste in einen Baum und anschließendes Glätten ergibt eine sortierte Liste sort :: (Ord a) => [a] -> [a] sort = flatten. mkstree Entfernen des Zwischenbaums ergibt eine Implementierung von Quicksort 17 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Datendefinition Operationen Einfügen und Löschen aus Suchbäumen Grundfunktionen für Mengenverarbeitung Ablauf an der Tafel 18 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Definition struktureller Aufbau nahezu identisch zu Suchbäumen Daten werden im Baum jedoch anders angeordnet: Ein Datum eines Knotens ist kleinergleich allen Daten aller Unterbäume für andere Anwendungen als Suchbäume geeignet: kleinstes Element ist in konstanter Zeit gefunden Zusammenfügen zweier Heap-Trees ist sehr schnell Heap Trees werden in einem späteren Vortrag genauer behandelt 19 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Definition Verarbeitungsarten Baumtyp mit Mehrfachverzweigungen data Rose a = Node a [Rose a] bei externen Knoten ist die Liste der Unterbäume leer binäre Bäume sind strukturgleich zu 2. Ordnung Möglich: Erzeugung von unendlichen Bäumen r1 = Node 1 [ Node n [] n <- [1..]] 20 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Möglichkeiten der Verarbeitung Verarbeitungsarten Depth-First Datum am Knoten verarbeiten anschließend Daten des linkesten Teilbaumes dann der zweit-linke Teilbaum... Breadth-First Daten am Knoten verarbeiten dann alle Knoten der Teilbäume (erste Ebene) weiter mit unteren Ebenen... 21 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Definition Problemaufteilung Dekodieren Kodieren Analyse des Ursprungstextes Huffmanbaum-Erzeugung werden benutzt zur Datenkomprimierung Idee: Umkodierung des zu komprimierenden Textes (Bildes,...) mit Hilfe Codes variabler Länge (EDV 1) häufig auftauchende Zeichen werden kürzer kodiert als selten auftauchende Auftrittswahrscheinlichkeit h(x) 1/Codelänge 22 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Problemaufteilung Dekodieren Kodieren Analyse des Ursprungstextes Huffmanbaum-Erzeugung Aufteilung des Problems in Unterprobleme Informationen über Auftrittshäufigkeiten sammeln Aufbau eines binären Huffman-Baums Kodierung eines Textes Dekodierung 23 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Dekodieren Definition Problemaufteilung Dekodieren Kodieren Analyse des Ursprungstextes Huffmanbaum-Erzeugung decode :: BTree Char -> [Bit] -> [Char] decode t cs = if null cs then [] else decode1 t cs where decode1 (Leaf x) cs = x : decode t cs decode1 (Fork xt yt) (L:cs) = decode1 xt cs decode1 (Fork xt yt) (R:cs) = decode1 yt cs Funktion erzeugt aus dem Huffman-Baum und einer Bitfolge den Ursprungstext Beispiel an der Tafel 24 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Kodieren Definition Problemaufteilung Dekodieren Kodieren Analyse des Ursprungstextes Huffmanbaum-Erzeugung encode :: BTree Char -> [Char] -> [Bit] Vorgehensweise: Suche im Baum nach dem zu kodierenden Buchstaben und merken des Pfades von der Wurzel leider ineffizient! Zwischenschritt, der aus Baum eine Codetabelle baut verbessert die Laufzeit 25 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Analyse Definition Problemaufteilung Dekodieren Kodieren Analyse des Ursprungstextes Huffmanbaum-Erzeugung sample :: [Char] -> [(Char,Int)] Erzeugt Liste aus Buchstaben und ihren Auftrittswahrscheinlichkeiten Idee: Text nach Buchstaben sortieren und mehrfaches Auftreten zusammenfassen sample = sortby freq. collate. sortby id 26 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Baumerzeugung Problemaufteilung Dekodieren Kodieren Analyse des Ursprungstextes Huffmanbaum-Erzeugung mkhuff :: [(Char,Int)] -> HuffTree mkhuff = unwrap. until singleton combine. map mktip erzeugt aus der Liste mit den Buchstabenhäufigkeiten einen Huffman-Baum data HuffTree = Tip Int Char Node Int HuffTree HuffTree deriving(show) zusätzliches Datum beinhaltet Gewicht (Optimierung) 27 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume

Zusammenfassung Algorithmus Problemaufteilung Dekodieren Kodieren Analyse des Ursprungstextes Huffmanbaum-Erzeugung 1. aus Analyse-Tupeln Blätter (Tips) erzeugen 2. die ersten beiden Bäume der Liste zu einem Knoten kombinieren (Gewicht des Knotens ist die Summe der Gewichte der kombinierten Bäume) 3. erzeugten Knoten in die nach Gewichten aufsteigend sortierte Liste einsortieren 4. gehe zu Schritt 2 bis die Liste nur noch ein Element besitzt 5. abschließend Gewichte aus Baum entfernen 28 Robin Brandt Informatik-Seminar 2003 - Thema 6: Bäume