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

Größe: px
Ab Seite anzeigen:

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

Transkript

1 Vortrag: Bäume in Haskell Bäume in Haskell Vortrag Christoph Forster Thomas Kresalek Fachhochschule Wedel University of Applied Sciences 27. November 2009 Christoph Forster, Thomas Kresalek 1/53 Vortrag

2 Agenda Christoph Forster, Thomas Kresalek 2/53 Vortrag

3 Agenda Christoph Forster, Thomas Kresalek 3/53 Vortrag

4 Motivation Natürliche Repräsentation hierarchischer Strukturen Ordnung von Mengen durch Hierarchisierung Bessere Laufzeiten als Liste Implizit Sortierung Christoph Forster, Thomas Kresalek 4/53 Vortrag

5 verschiedene Baumtypen verschiedene Baumtypen (binary tree) Daten nur in den Blättern Daten in Blättern und Knoten jeweils gleiche Typen unterschiedliche Typen, z.b. Int in Knoten für jeweilige Blätter-Anzahl Daten nur in den Knoten Datentyp hat Ordnungsrelation Daten vor Unterbäumen (binary heap) Daten zwischen Unterbäumen (binary search tree) N-äre Bäume () Christoph Forster, Thomas Kresalek 5/53 Vortrag

6 Agenda 1 2 Erweiterung Erweiterung Christoph Forster, Thomas Kresalek 6/53 Vortrag

7 Definition: Datentyp {- Binärbaum -} data Btree a = Leaf a Fork (Btree a ) (Btree a) Erweiterung Hier zunächst einfachste Art: Daten in den Blättern Christoph Forster, Thomas Kresalek 7/53 Vortrag

8 Beispiel {- Beispiel 1 -} Fork (Leaf 1) (Fork (Leaf 2) (Leaf 3)) {- Beispiel 2 -} Fork (Fork (Leaf 1) (Leaf 2)) (Leaf 3) Erweiterung Christoph Forster, Thomas Kresalek 8/53 Vortrag

9 Beispiel {- Beispiel 1 -} Fork (Leaf 1) (Fork (Leaf 2) (Leaf 3)) {- Beispiel 2 -} Fork (Fork (Leaf 1) (Leaf 2)) (Leaf 3) Erweiterung Beispiel 1 Beispiel 2 Christoph Forster, Thomas Kresalek 8/53 Vortrag

10 Wichtige Maße eines Baumes {- Größe des Baums -} size :: Btree a -> Int size (Leaf x) = 1 size (Fork xt yt) = size xt + size yt Erweiterung Christoph Forster, Thomas Kresalek 9/53 Vortrag

11 Wichtige Maße eines Baumes {- Größe des Baums -} size :: Btree a -> Int size (Leaf x) = 1 size (Fork xt yt) = size xt + size yt {- Höhe des Baums -} height :: Btree a -> Int height (Leaf x) = 0 height (Fork xt yt) = 1 + (height xt max height yt) Erweiterung Was sagen uns diese Maße? Christoph Forster, Thomas Kresalek 9/53 Vortrag

12 Wichtige Maße eines Baumes {- Größe des Baums -} size :: Btree a -> Int size (Leaf x) = 1 size (Fork xt yt) = size xt + size yt {- Höhe des Baums -} height :: Btree a -> Int height (Leaf x) = 0 height (Fork xt yt) = 1 + (height xt max height yt) Erweiterung Was sagen uns diese Maße? Größe entspricht der Länge einer Liste Höhe entspricht der maximalen Tiefe Christoph Forster, Thomas Kresalek 9/53 Vortrag

13 {- Tiefe des Baumes -} depths :: Btree a -> Btree Int depths = down 0 down :: Int -> Btree a -> Btree Int down n (Leaf x) = Leaf n down n (Fork xt yt) = Fork (down (n + 1) xt) (down (n + 1) yt) Erweiterung Christoph Forster, Thomas Kresalek 10/53 Vortrag

14 {- Tiefe des Baumes -} depths :: Btree a -> Btree Int depths = down 0 down :: Int -> Btree a -> Btree Int down n (Leaf x) = Leaf n down n (Fork xt yt) = Fork (down (n + 1) xt) (down (n + 1) yt) {- Baum in Liste umwandeln -} Erweiterung flatten :: Btree a -> [a] flatten (Leaf x) = [x] flatten (Fork xt yt) = flatten xt ++ flatten yt depths ersetzt die Blätter durch die Tiefe Reihenfolge der durch flatten erzeugten Liste? Christoph Forster, Thomas Kresalek 10/53 Vortrag

15 {- Tiefe des Baumes -} depths :: Btree a -> Btree Int depths = down 0 down :: Int -> Btree a -> Btree Int down n (Leaf x) = Leaf n down n (Fork xt yt) = Fork (down (n + 1) xt) (down (n + 1) yt) {- Baum in Liste umwandeln -} Erweiterung flatten :: Btree a -> [a] flatten (Leaf x) = [x] flatten (Fork xt yt) = flatten xt ++ flatten yt depths ersetzt die Blätter durch die Tiefe Reihenfolge der durch flatten erzeugten Liste? von Links nach Rechts Christoph Forster, Thomas Kresalek 10/53 Vortrag

16 Erstellung von Bäumen {- Erstellt Bäume aus einer Liste -} 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 Erweiterung Christoph Forster, Thomas Kresalek 11/53 Vortrag

17 Erstellung von Bäumen {- Erstellt Bäume aus einer Liste -} 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 Erweiterung Erstellt Baum minimaler Höhe Rekursives Aufbauen von optimalen Teilbäumen Halbierung der Ausgangsliste in jedem Schritt Laufzeit? Christoph Forster, Thomas Kresalek 11/53 Vortrag

18 Erstellung von Bäumen {- Erstellt Bäume aus einer Liste -} 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 Erweiterung Erstellt Baum minimaler Höhe Rekursives Aufbauen von optimalen Teilbäumen Halbierung der Ausgangsliste in jedem Schritt Laufzeit? O(n log n) Christoph Forster, Thomas Kresalek 11/53 Vortrag

19 Maximum Ermittlung {- Maximum der gespeicherten Werte -} maxbtree :: (Ord a) => Btree a -> a maxbtree (Leaf x) = x maxbtree (Fork xt yt)=(maxbtree xt) max (maxbtree yt) Erweiterung Christoph Forster, Thomas Kresalek 12/53 Vortrag

20 Maximum Ermittlung {- Maximum der gespeicherten Werte -} maxbtree :: (Ord a) => Btree a -> a maxbtree (Leaf x) = x maxbtree (Fork xt yt)=(maxbtree xt) max (maxbtree yt) Gesetze {- Gesetze über bisherige -} size = length. flatten Erweiterung height = maxbtree. depths {- Stimmts oder nicht? -} mkbtree. flatten = id flatten. mkbtree = id Christoph Forster, Thomas Kresalek 12/53 Vortrag

21 Maximum Ermittlung {- Maximum der gespeicherten Werte -} maxbtree :: (Ord a) => Btree a -> a maxbtree (Leaf x) = x maxbtree (Fork xt yt)=(maxbtree xt) max (maxbtree yt) Gesetze {- Gesetze über bisherige -} size = length. flatten Erweiterung height = maxbtree. depths {- Stimmts oder nicht? -} mkbtree. flatten = id flatten. mkbtree = id Stimmt! Christoph Forster, Thomas Kresalek 12/53 Vortrag

22 Verarbeitung mit map {- Map für den Binären 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) Erweiterung Christoph Forster, Thomas Kresalek 13/53 Vortrag

23 Verarbeitung mit map {- Map für den Binären 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) Erweiterung Analogon zu map auf Listen Anwendung von Funktionen auf die Elemente des Baums mapbtree ist wie map für Listen ein Funktor für Bäume Christoph Forster, Thomas Kresalek 13/53 Vortrag

24 Gesetze für map {- Gesetze für map auf binärem Baum -} mapbtree id = id mapbtree (f. g) = mapbtree f. mapbtree g map f. flatten = flatten. mapbtree f Was ist ein Funktor? Erweiterung Christoph Forster, Thomas Kresalek 14/53 Vortrag

25 Gesetze für map {- Gesetze für map auf binärem Baum -} mapbtree id = id mapbtree (f. g) = mapbtree f. mapbtree g map f. flatten = flatten. mapbtree f Was ist ein Funktor? mapbtree, genau wie map bei Listen Erweiterung Christoph Forster, Thomas Kresalek 14/53 Vortrag

26 Gesetze für map {- Gesetze für map auf binärem Baum -} mapbtree id = id mapbtree (f. g) = mapbtree f. mapbtree g map f. flatten = flatten. mapbtree f Was ist ein Funktor? mapbtree, genau wie map bei Listen Erweiterung Definition: Funktor Ein Operator, der aus einem oder mehreren singulären Termen wiederum einen singulären Term erzeugt. Quelle: angelehnt an CARNAP, 1954 Christoph Forster, Thomas Kresalek 14/53 Vortrag

27 fold {- Fold für den Binären Baum -} 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) Erweiterung Analogon zu fold auf Listen fold ermöglicht Verarbeitung der Christoph Forster, Thomas Kresalek 15/53 Vortrag

28 fold {- Fold für den Binären Baum -} 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) Erweiterung Analogon zu fold auf Listen fold ermöglicht Verarbeitung der Funktion f bearbeitet Blätter Funktion g arbeitet in den Knoten Christoph Forster, Thomas Kresalek 15/53 Vortrag

29 Nutzung von fold für size = foldbtree (const 1) ( + ) Erweiterung Christoph Forster, Thomas Kresalek 16/53 Vortrag

30 Nutzung von fold für size = foldbtree (const 1) ( + ) height = foldbtree (const 0) maxsubs where m maxsubs n = 1 + m max n Erweiterung Christoph Forster, Thomas Kresalek 16/53 Vortrag

31 Nutzung von fold für size = foldbtree (const 1) ( + ) height = foldbtree (const 0) maxsubs where m maxsubs n = 1 + m max n flatten = foldbtree wrap ( ++ ) Erweiterung Christoph Forster, Thomas Kresalek 16/53 Vortrag

32 Nutzung von fold für size = foldbtree (const 1) ( + ) height = foldbtree (const 0) maxsubs where m maxsubs n = 1 + m max n flatten = foldbtree wrap ( ++ ) Erweiterung maxbtree :: (Ord a) => Btree a -> a maxbtree = foldbtree id (max) Christoph Forster, Thomas Kresalek 16/53 Vortrag

33 Nutzung von fold für size = foldbtree (const 1) ( + ) height = foldbtree (const 0) maxsubs where m maxsubs n = 1 + m max n flatten = foldbtree wrap ( ++ ) Erweiterung maxbtree :: (Ord a) => Btree a -> a maxbtree = foldbtree id (max) mapbtree f = foldbtree (Leaf. f) Fork Christoph Forster, Thomas Kresalek 16/53 Vortrag

34 Erweiterung Binärer Bäume Definition: Datentyp {- Erweiterter Binärbaum -} data ATree a = ALeaf a AFork Int (ATree a) (ATree a) Erweiterung Zusätzlicher Wert im Knoten Speichert Größe des linken Teilbaums Christoph Forster, Thomas Kresalek 17/53 Vortrag

35 Erweiterung Binärer Bäume Konstruktor {- Konstruktor AFork -} fork :: ATree a -> ATree a -> ATree a fork xt yt = AFork n xt yt where n = lsize xt {- Konstruktur ATree-} mkatree :: [a] -> ATree a mkatree xs (m==0) = ALeaf (unwrap xs) otherwise = fork (mkatree ys) (mkatree zs) where m = (length xs) div 2 (ys,zs) = splitat m xs unwrap [x] = x Erweiterung Christoph Forster, Thomas Kresalek 18/53 Vortrag

36 Erweiterung Binärer Bäume Indizierter Zugriff {- indizierter Zugriff -} retrieve :: ATree a -> Int -> a retrieve (ALeaf x) 0 = x retrieve (AFork m xt yt) k = if k < m then retrieve xt k else retrieve yt (k-m) Erweiterung Nutzt gespeicherte Informationen in Knoten Effizienter als Zählen in Listen, bei großen n Christoph Forster, Thomas Kresalek 19/53 Vortrag

37 Agenda & Eigenschaften en & Eigenschaften en 4 5 Christoph Forster, Thomas Kresalek 20/53 Vortrag

38 Definition: Datentyp {- Binärer Suchbaum -} data (Ord a) Stree a = Null Fork (Stree a ) a (Stree a) & Eigenschaften en Christoph Forster, Thomas Kresalek 21/53 Vortrag

39 Eigenschaften Die Daten befinden sich in den Knoten zwischen den Subbäumen Für den Datentyp a muss eine Ordnungsrelation definiert sein Fork xt e yt x : x xt (x e), x yt (x > e) Gute Repräsentationsmöglichkeit für Multimengen mit Ordnungsrelation & Eigenschaften en Christoph Forster, Thomas Kresalek 22/53 Vortrag

40 Beispiel Beispiel {- Beispiel 1 -} Fork (Fork Null 1 Null) 3 (Fork (Fork Null 4 Null) 5 (Fork Null 6 Null)) 3 & Eigenschaften en 1 5 Null Null 4 6 Null Null Null Null Christoph Forster, Thomas Kresalek 23/53 Vortrag

41 : Erzeugung aus Liste Erzeugung {- Erzeugung eines Suchbaums aus einer Liste -} mkstree :: (Ord a) => [a] -> Stree a mkstree [] = Null mkstree (x:xs) = Fork (mkstree ys) x (mkstree zs) where (ys,zs) = partition (<= x) xs {- Aufteilung zweier Listen an Hand von Prädikat -} partition :: (a -> Bool) -> [a] -> ([a],[a]) partition p xs = (filter p xs,filter (not. p) xs) & Eigenschaften en Aus sortierten Listen erzeugte Bäume sind leider sehr unbalanciert Christoph Forster, Thomas Kresalek 24/53 Vortrag

42 Beispiele Beispiel {- Beispiel 2 -} {- mkstree [1,3,4,5,6] => -} Fork Null 1 (Fork Null 3 (Fork Null 4 (Fork Null 5 (Fork Null 6 Null)))) & Eigenschaften en Christoph Forster, Thomas Kresalek 25/53 Vortrag

43 Beispiele 1 Null 3 Null 4 Null 5 & Eigenschaften en Null 6 Null Null Christoph Forster, Thomas Kresalek 26/53 Vortrag

44 : Rückführung zu Liste Erzeugung einer Liste aus einem Stree flatten :: (Ord a) => Stree a -> [a] flatten Null = [] flatten (Fork xt x yt) = flatten xt ++ (x:flatten yt) & Eigenschaften en Christoph Forster, Thomas Kresalek 27/53 Vortrag

45 : Sortieren Sortieren sort :: (Ord a) => [a] -> [a] sort = flatten. mkstree entspricht einer möglichen Implementierung des Quicksort-Algorithmus & Eigenschaften en Christoph Forster, Thomas Kresalek 28/53 Vortrag

46 : Höhe Höhe heightst :: (Ord a) => Stree a -> Integer heightst Null = 0 heightst (Fork xt x yt) = 1 + (max (heightst xt) (heightst yt)) & Eigenschaften en Die Höhe eines Suchbaums ergibt sich über die Knoten Christoph Forster, Thomas Kresalek 29/53 Vortrag

47 : Member Membership member :: (Ord a) => a -> Stree a -> Bool member x Null = False member x (Fork xt y yt) (x < y) = member x xt (x == y) = True (x > y) = member x yt & Eigenschaften en besonders effizient, wenn der Baum perfekt balanciert ist Christoph Forster, Thomas Kresalek 30/53 Vortrag

48 : Einfügen Einfügen insert :: (Ord a) => a -> Stree a -> Stree a insert x Null = Fork Null x Null insert x (Fork xt y yt) (x < y) = Fork (insert x xt) y yt (x == y) = Fork xt y yt (x > y) = Fork xt y (insert x yt) & Eigenschaften en Christoph Forster, Thomas Kresalek 31/53 Vortrag

49 : Entfernen von Elementen Entfernen von Elementen delete :: (Ord a) => a -> Stree a -> Stree a delete x Null = Null delete x (Fork xt y yt) (x < y) = Fork (delete x xt) y yt (x == y) = join xt yt (x > y) = Fork xt y (delete x yt) & Eigenschaften en Teilbäume müssen an der Stelle des gelöschten Elements zusammengeführt werden Das Ergebnis soll perfekt balanciert sein. Christoph Forster, Thomas Kresalek 32/53 Vortrag

50 : Join Join join :: (Ord a) => Stree a -> Stree a -> Stree a join Null yt = yt join (Fork ut x vt) yt = Fork ut x (join vt yt) & Eigenschaften en Einfache Implementierung Aber Ergebnis ist nicht gut balanciert Christoph Forster, Thomas Kresalek 33/53 Vortrag

51 : Join Join join :: (Ord a) => Stree a -> Stree a -> Stree a join xt yt = if empty yt then xt else Fork xt (headtree yt) (tailtree yt) & Eigenschaften en komplexere Implementierung empty, headtree und tailtree müssen implementiert werden Christoph Forster, Thomas Kresalek 34/53 Vortrag

52 : Empty Empty empty :: (Ord a) => Stree a -> Bool empty Null = True empty (Fork xt y yt) = False & Eigenschaften en Christoph Forster, Thomas Kresalek 35/53 Vortrag

53 : Head und Tail eines Baums Head und Tail {- Head -} headtree :: (Ord a) => Stree a -> a headtree = fst. splittree {- Tail -} tailtree :: (Ord a) => Stree a -> Stree a tailtree = snd. splittree splittree & Eigenschaften en splittree :: (Ord a) => Stree a -> (a,stree a) splittree (Fork xt y yt) = if empty xt then (y,yt) else (x, Fork wt y yt) where (x,wt) = splittree xt Christoph Forster, Thomas Kresalek 36/53 Vortrag

54 : Join-Optimierung Join join :: (Ord a) => Stree a -> Stree a -> Stree a join xt yt = if empty yt then xt else Fork xt headoftree tailoftree where (headoftree,tailoftree) = splittree yt & Eigenschaften en splittree wird nur einmal aufgerufen. Christoph Forster, Thomas Kresalek 37/53 Vortrag

55 Verarbeitung mit map {- Map für den Binären Suchbaum -} mapstree :: (a -> b) -> Stree a -> Stree b mapstree f Null = Null mapstree f (Fork xt x yt) = Fork (mapbtree f xt) (f x) (mapbtree f yt) & Eigenschaften en Analog zur Implementierung für Btree Christoph Forster, Thomas Kresalek 38/53 Vortrag

56 en fold foldstree :: (Ord a) => (a -> b) -> (b -> b -> b -> b) -> b -> Stree a -> b foldstree f g v Null = v foldstree f g v (Fork xt x yt) = g (foldstree f g v xt) (f x) (foldstree f g v yt) & Eigenschaften en Christoph Forster, Thomas Kresalek 39/53 Vortrag

57 en Nutzung von fold für {- Höhe -} heightst :: (Ord a) => STree a -> Integer heightst = foldstree (const 1) (\ x y z -> (max x z) + y) 0 {- Bildung einer Liste -} flatten :: (Ord a) => STree a -> [a] flatten = foldstree (\ x -> [x]) (\ x y z -> x ++ (y ++ z)) [] & Eigenschaften en Christoph Forster, Thomas Kresalek 40/53 Vortrag

58 en FoldStree nicht direkt für member, insert und delete einsetzbar allerdings auch hier Strukturübereinstimmungen Schaffung einer weiteren sinnvoll? & Eigenschaften en Christoph Forster, Thomas Kresalek 41/53 Vortrag

59 en Erweitertes fold foldstree2 :: Ord a => (STree a -> a -> STree a -> c) -> (c -> a -> STree a -> c) -> (STree a -> a -> c -> c) -> (a -> c) -> a -> STree a -> c foldstree2 fm fl fr fn y Null = fn y foldstree2 fm fl fr fn x (Fork xt y yt) (x < y) = fl (foldstree2 fm fl fr fn x xt) y yt (x == y) = fm xt x yt (x > y) = fr xt y (foldstree2 fm fl fr fn x yt) & Eigenschaften en Christoph Forster, Thomas Kresalek 42/53 Vortrag

60 en Nutzung des erweiterten fold member :: (Ord a) => a -> Stree a -> Bool member = foldstree2 (\ x y z -> True) (\ x y z -> x) (\ x y z -> z) (\ x -> False) insert :: (Ord a) => a -> Stree a -> Stree a insert = foldstree2 (\ xt y yt -> Fork xt y yt) (\ xt x yt -> Fork xt x yt) (\ xt x yt -> Fork xt x yt) (\ x -> Fork Null x Null) & Eigenschaften en delete :: (Ord a) => a -> Stree a -> Stree a delete = foldstree2 (\ xt y yt -> join xt yt) (\ xt x yt -> Fork xt x yt) (\ xt x yt -> Fork xt x yt) (\ x -> Null) Christoph Forster, Thomas Kresalek 43/53 Vortrag

61 en Nutzung des erweiterten fold buildfork xt x yt = Fork xt x yt insert :: (Ord a) => a -> Stree a -> Stree a insert = foldstree2 buildfork buildfork buildfork (\ x -> Fork Null x Null) & Eigenschaften en delete :: (Ord a) => a -> Stree a -> Stree a delete = foldstree2 (\ xt y yt -> join xt yt) buildfork buildfork (\ x -> Null) Christoph Forster, Thomas Kresalek 44/53 Vortrag

62 Agenda Christoph Forster, Thomas Kresalek 45/53 Vortrag

63 Angelehnt an Verzweigungen des Rhododendron Busches Christoph Forster, Thomas Kresalek 46/53 Vortrag

64 Rose Tree Definition: Datentyp {- -} data Rose a = Node a [Rose a] Allgemeiner definiert Beliebig viele Kinder Rose Tree 2. Ordnung Blätter sind durch leere Listen dargestellt Christoph Forster, Thomas Kresalek 47/53 Vortrag

65 Unendliche Bäume Beispiel {- Unendlicher Rose Tree -} Node 0 [ Node n [] n <- [1..]] Christoph Forster, Thomas Kresalek 48/53 Vortrag

66 Unendliche Bäume Beispiel {- Unendlicher Rose Tree -} Node 0 [ Node n [] n <- [1..]] Spezielle Verarbeitung notwendig (breath-first) Analogon zu unendlichen Listen Im Folgenden: Endliche Christoph Forster, Thomas Kresalek 48/53 Vortrag

67 Wichtige Maße eines Baumes {- Anzahl der Elemente -} size :: Rose a -> Int size (Node x xts) = 1 + sum (map size xts) Christoph Forster, Thomas Kresalek 49/53 Vortrag

68 Wichtige Maße eines Baumes {- Anzahl der Elemente -} size :: Rose a -> Int size (Node x xts) = 1 + sum (map size xts) {- Höhe des Baums -} height :: Rose a -> Int height (Node x xts) = 1 + maxlist (map height xts) where maxlist = foldl (max) 0 Christoph Forster, Thomas Kresalek 49/53 Vortrag

69 Wichtige Maße eines Baumes {- Anzahl der Elemente -} size :: Rose a -> Int size (Node x xts) = 1 + sum (map size xts) {- Höhe des Baums -} height :: Rose a -> Int height (Node x xts) = 1 + maxlist (map height xts) where maxlist = foldl (max) 0 Höhe und Größe eines Rose Tree immer größer 0 Christoph Forster, Thomas Kresalek 49/53 Vortrag

70 Plätten eines Rosenbaumes {- Plätten des Baums -} flatten :: Rose a -> [a] flatten (Node x xts) = x:concat(map flatten xts) Christoph Forster, Thomas Kresalek 50/53 Vortrag

71 Plätten eines Rosenbaumes {- Plätten des Baums -} flatten :: Rose a -> [a] flatten (Node x xts) = x:concat(map flatten xts) Plätten nur bei endlichen Bäumen (depth-first) Plätten effizient O(n log n) Reihenfolge? Christoph Forster, Thomas Kresalek 50/53 Vortrag

72 Plätten eines Rosenbaumes {- Plätten des Baums -} flatten :: Rose a -> [a] flatten (Node x xts) = x:concat(map flatten xts) Plätten nur bei endlichen Bäumen (depth-first) Plätten effizient O(n log n) Reihenfolge? Christoph Forster, Thomas Kresalek 50/53 Vortrag

73 Plätten eines Rosenbaumes {- Plätten des Baums -} flatten :: Rose a -> [a] flatten (Node x xts) = x:concat(map flatten xts) Plätten nur bei endlichen Bäumen (depth-first) Plätten effizient O(n log n) Reihenfolge? Zuerst Knoten, dann Kinder von Links nach Rechts 5,2,1,3,7,6,8 Christoph Forster, Thomas Kresalek 50/53 Vortrag

74 fold {- Fold für den Rosenbaum -} foldrose :: (a -> [b] -> b) -> Rose a -> b foldrose f (Node x xts) = f x (map (foldrose f) xts) Christoph Forster, Thomas Kresalek 51/53 Vortrag

75 fold {- Fold für den Rosenbaum -} foldrose :: (a -> [b] -> b) -> Rose a -> b foldrose f (Node x xts) = f x (map (foldrose f) xts) Element Verarbeitung mit map {- map für den Rosenbaum -} maprose :: (a -> b) -> Rose a -> Rose b maprose f = foldrose (Node. f) Christoph Forster, Thomas Kresalek 51/53 Vortrag

76 Beispiele mit fold {- Größe eines Rosenbaums -} size :: Rose a -> Int size = foldrose f where f x ns = 1 + sum ns Christoph Forster, Thomas Kresalek 52/53 Vortrag

77 Beispiele mit fold {- Größe eines Rosenbaums -} size :: Rose a -> Int size = foldrose f where f x ns = 1 + sum ns {- Maximum eines Rosenbaumes -} maxrose :: (Ord a, Num a) => Rose a -> a maxrose = foldrose f where f x ns = x max maxlist ns maxlist = foldl (max) 0 Christoph Forster, Thomas Kresalek 52/53 Vortrag

78 Beispiele mit fold {- Größe eines Rosenbaums -} size :: Rose a -> Int size = foldrose f where f x ns = 1 + sum ns {- Maximum eines Rosenbaumes -} maxrose :: (Ord a, Num a) => Rose a -> a maxrose = foldrose f where f x ns = x max maxlist ns maxlist = foldl (max) 0 {- Plätten eines Rosenbaumes -} flatten :: Rose a -> [a] flatten = foldrose f where f x ns = x:concat ns Christoph Forster, Thomas Kresalek 52/53 Vortrag

79 Agenda Christoph Forster, Thomas Kresalek 53/53 Vortrag

80 Bäume 3 1/2 verschiedene Spezialfälle (Btrees / Atrees) (Strees) N-äre Bäume (Rose trees) Christoph Forster, Thomas Kresalek 54/53 Vortrag

81 Bäume 3 1/2 verschiedene Spezialfälle (Btrees / Atrees) (Strees) N-äre Bäume (Rose trees) en en Christoph Forster, Thomas Kresalek 54/53 Vortrag

82 Zusammenfassung Bäume Binäre Halden Christoph Forster, Thomas Kresalek 55/53 Vortrag

83 Zusammenfassung Bäume Binäre Halden Anwendungsfälle Merteens number Huffman trees Christoph Forster, Thomas Kresalek 55/53 Vortrag

84 Fragen? Vielen Dank für die Aufmerksamkeit! Christoph Forster, Thomas Kresalek 56/53 Vortrag

Informatik-Seminar Thema 6: Bäume

Informatik-Seminar Thema 6: Bäume 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

Mehr

Haskell Seminar Abstrakte Datentypen. Nils Bardenhagen ms2725

Haskell Seminar Abstrakte Datentypen. Nils Bardenhagen ms2725 Haskell Seminar Abstrakte Datentypen Nils Bardenhagen ms2725 Gliederung Konzept Queue Module Sets Bags Flexible Arrays Fazit Abstrakte Datentypen (ADT) Definition: Eine Zusammenfassung von Operationen,

Mehr

HASKELL KAPITEL 8. Bäume

HASKELL KAPITEL 8. Bäume HASKELL KAPITEL 8 Bäume Baum rekursiv definierte Datenstruktur nicht linear vielerlei Varianten: Struktur der Verzweigung, Ort der gespeicherten Information (Knoten, Kanten, Blätter ) 2 Binärbaum Jeder

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen B3. Verkettete Listen und Bäume Marcel Lüthi and Gabriele Röger Universität Basel 22. März 2018 Einführung Abstrakter Datentyp / Datenstruktur Abstrakter Datentyp Eine Menge

Mehr

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B3.1 Einführung. B3.2 Verkettete Liste. B3.3 Bäume

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B3.1 Einführung. B3.2 Verkettete Liste. B3.3 Bäume Algorithmen und Datenstrukturen 22. März 2018 B3. Verkettete Listen und Bäume Algorithmen und Datenstrukturen B3. Verkettete Listen und Bäume B3.1 Einführung Marcel Lüthi and Gabriele Röger B3.2 Verkettete

Mehr

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

expr :: Expr expr = Mul (Add (Const 3) (Const 4)) (Div (Sub (Const 73) (Const 37)) (Const 6)) 1 - Korrektur 2 - Abstrakte Datentypen für arithmetische Ausdrücke Der Datentyp Wir beginnen zunächst mit dem algebraischen Datentyp für Ausdrücke. Hierfür definieren wir einen Konstruktor Number für Zahlen,

Mehr

Programmieren in Haskell Programmiermethodik

Programmieren in Haskell Programmiermethodik Programmieren in Haskell Programmiermethodik Peter Steffen Universität Bielefeld Technische Fakultät 12.01.2011 1 Programmieren in Haskell Bisherige Themen Was soll wiederholt werden? Bedienung von hugs

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Programmiermethodik Programmieren in Haskell 1 Was wir heute machen Spezifikation Strukturelle Rekursion Strukturelle Induktion Programmieren in Haskell 2 Spezifikation sort [8,

Mehr

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

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda ALP I SS 2011 Funktionstypen Funktionen haben einen Datentyp, der folgende allgemeine Form hat: functionname :: T 1 -> T 2, wobei T 1, T 2 wiederum beliebige Datentypen sind Beispiel: T 1 T 2 Der Datentyp

Mehr

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B4.1 Definitionen und Eigenschaften. B4.2 Traversierung. B4.

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B4.1 Definitionen und Eigenschaften. B4.2 Traversierung. B4. Algorithmen und Datenstrukturen 28. März 2019 B4. Intermezzo - Bäume Algorithmen und Datenstrukturen B4. Intermezzo - Bäume B4.1 Definitionen und Eigenschaften Marcel Lüthi and Gabriele Röger Universität

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 11 (4.6.2014) Binäre Suchbäume II Algorithmen und Komplexität Binäre Suchbäume Binäre Suchbäume müssen nicht immer so schön symmetrisch sein

Mehr

4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als

4.1 Bäume, Datenstrukturen und Algorithmen. Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als Kapitel 4 Bäume 4.1 Bäume, Datenstrukturen und Algorithmen Zunächst führen wir Graphen ein. Die einfachste Vorstellung ist, dass ein Graph gegeben ist als eine Menge von Knoten und eine Menge von zugehörigen

Mehr

Informatik II Bäume zum effizienten Information Retrieval

Informatik II Bäume zum effizienten Information Retrieval lausthal Informatik II Bäume zum effizienten Information Retrieval. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Binäre Suchbäume (binary search tree, BST) Speichere wieder Daten als "Schlüssel

Mehr

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

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps Binäre Suchbäume Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps Mengen n Ziel: Aufrechterhalten einer Menge (hier: ganzer Zahlen) unter folgenden Operationen: Mengen n Ziel: Aufrechterhalten einer

Mehr

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel Algorithmen und Datenstrukturen Bäume M. Herpers, Y. Jung, P. Klingebiel 1 Lernziele Baumstrukturen und Ihre Verwendung kennen Grundbegriffe zu Bäumen anwenden können Baumstruktur in C anlegen können Suchbäume

Mehr

13 Berechenbarkeit und Aufwandsabschätzung

13 Berechenbarkeit und Aufwandsabschätzung 13 Berechenbarkeit und Aufwandsabschätzung 13.1 Berechenbarkeit Frage: Gibt es für jede Funktion, die mathematisch spezifiziert werden kann, ein Programm, das diese Funktion berechnet? Antwort: Nein! [Turing

Mehr

Trees. November 14, Algorithms & Datastructures 2 Exercises WT 2017

Trees. November 14, Algorithms & Datastructures 2 Exercises WT 2017 Trees November 14, 2017 Algorithms & Datastructures 2 Exercises WT 2017 Dipl.-Ing. University Linz, Institute for Pervasive Computing Altenberger Straße 69, A-4040 Linz anzengruber@pervasive.jku.at Binärbaum

Mehr

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen Bäume sind verallgemeinerte Listen Datenstrukturen Teil 2 Bäume Jeder Knoten kann mehrere Nachfolger haben Sie sind weiter spezielle Graphen Graphen bestehen aus Knoten und Kanten Kanten können gerichtet

Mehr

Mengen. Binäre Suchbäume. Mengen: Anwendungen (II) Mengen: Lösung mit Listen 12/3/12. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

Mengen. Binäre Suchbäume. Mengen: Anwendungen (II) Mengen: Lösung mit Listen 12/3/12. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps // Mengen Binäre Suchbäume Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps n Ziel: ufrechterhalten einer Menge (hier: ganzer Zahlen) unter folgenden Operationen: n eines Elements n eines Elements

Mehr

Alexander Nutz. 3. Dezember 2007

Alexander Nutz. 3. Dezember 2007 3. Dezember 2007 1 / 21 Aufgabe: die zeit- und platzeziente Implementierung von abstrakten Datentypen, z.b. eines Wörterbuches oder einer Zahlenmenge, für Programme bekannte : Listen,, Heaps,, Stacks,...

Mehr

Trees. November 13, Algorithms & Datastructures 2 Exercises WT 2017

Trees. November 13, Algorithms & Datastructures 2 Exercises WT 2017 Trees November 13, 2018 Algorithms & Datastructures 2 Exercises WT 2017 Dipl.-Ing. University Linz, Institute for Pervasive Computing Altenberger Straße 69, A-4040 Linz anzengruber@pervasive.jku.at Binärbaum

Mehr

Anwendungsbeispiel MinHeap

Anwendungsbeispiel MinHeap Anwendungsbeispiel MinHeap Uns seien n ganze Zahlen gegeben und wir möchten darin die k größten Zahlen bestimmen; zudem gelten, dass n deutlich größer als k ist Wir können das Problem mit Laufzeit in O(n

Mehr

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur - Punkte: A1: 30, A2: 20, A3: 20, A4: 20, A5: 10, A6: 20 Punkte: /120 12.02.2012 Hinweis: Geben Sie bei allen

Mehr

Bemerkung: Heapsort. Begriffsklärung: (zu Bäumen) Begriffsklärung: (zu Bäumen) (2) Heapsort verfeinert die Idee des Sortierens durch Auswahl:

Bemerkung: Heapsort. Begriffsklärung: (zu Bäumen) Begriffsklärung: (zu Bäumen) (2) Heapsort verfeinert die Idee des Sortierens durch Auswahl: Heapsort Bemerkung: Heapsort verfeinert die Idee des Sortierens durch Auswahl: Minimum bzw. Maximum wird nicht durch lineare Suche gefunden, sondern mit logarithmischem Aufwand durch Verwendung einer besonderen

Mehr

Algorithmen und Datenstrukturen II

Algorithmen und Datenstrukturen II Algorithmen und Datenstrukturen II und Red-Black-Trees Dr. Georg Sauthoff 1 AG Praktische Informatik July 1, SoSe 2011 1 gsauthof@techfak.uni-bielefeld.de Suchbäume (Indexdatenstrukturen) Zugriff in O(logn)

Mehr

3. Funktionales Programmieren 3.2 Algorithmen auf Listen und Bäumen. Heapsort verfeinert die Idee des Sortierens durch Auswahl:

3. Funktionales Programmieren 3.2 Algorithmen auf Listen und Bäumen. Heapsort verfeinert die Idee des Sortierens durch Auswahl: Heapsort 3. Funktionales Programmieren 3.2 Algorithmen auf Listen und Bäumen Heapsort verfeinert die Idee des Sortierens durch Auswahl: Minimum bzw. Maximum wird nicht durch lineare Suche gefunden, sondern

Mehr

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition. 1 Informatik I: Einführung in die Programmierung 11. Bäume e e Albert-Ludwigs-Universität Freiburg Bernhard Nebel 13. November 2015 13. November 2015 B. Nebel Info I 3 / 33 Bäume in der Informatik Bäume

Mehr

Informatik II, SS 2018

Informatik II, SS 2018 Informatik II - SS 2018 (Algorithmen & Datenstrukturen) Vorlesung 15b (13.06.2018) Graphenalgorithmen IV Algorithmen und Komplexität Prims MST-Algorithmus A = while A ist kein Spannbaum do e = u, v ist

Mehr

WS 2011/2012. Robert Giegerich Dezember 2013

WS 2011/2012. Robert Giegerich Dezember 2013 WS 2011/2012 Robert 1 AG Praktische Informatik 11. Dezember 2013 1 robert@techfak.uni-bielefeld.de Vorschau Themen heute: Funktionen höherer Ordnung (Fortsetzung) künstliche Striktheit mehr zu fold für

Mehr

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

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps Binäre Suchbäume Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps Mengen n Ziel: Aufrechterhalten einer Menge (hier: ganzer Zahlen) unter folgenden Operationen: Mengen n Ziel: Aufrechterhalten einer

Mehr

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

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10. Universität Bielefeld AG Praktische Informatik 10. Dezember 2014 Wiederholung: Schema: f :: [σ] -> τ f [] = e 1 f (a : as) = e 2 where s = f as wobei e 1 und e 2 Ausdrücke vom Typ τ sind und e 2 die Variablen

Mehr

Funktionale Programmierung mit Haskell

Funktionale Programmierung mit Haskell Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel

Mehr

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

Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen: Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen: Peano-Zahlen, Listen, Bäume Rekursive Funktionen strukturelle

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 17 (8.7.2014) Minimale Spannbäume II Union Find, Prioritätswarteschlangen Algorithmen und Komplexität Minimaler Spannbaum Gegeben: Zus. hängender,

Mehr

Einführung in die funktionale Programmierung

Einführung in die funktionale Programmierung Einführung in die funktionale Programmierung Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 26. Oktober 2006 Haskell - Einführung Syntax Typen Auswertung Programmierung

Mehr

Einführung in die Informatik 2 9. Übung

Einführung in die Informatik 2 9. Übung Technische Universität München WS 2012/13 Institut für Informatik 11.11.2012 Prof. Tobias Nipkow, Ph.D. Abgabe: 18.12.2012, 15:30 Lars Noschinski, Dr. Jasmin Blanchette, Dmitriy Traytel Einführung in die

Mehr

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

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell): Was bisher geschah deklarative Programmierung funktional: Programm: Menge von Termgleichungen, Term Auswertung: Pattern matsching, Termumformungen logisch: Programm: Menge von Regeln (Horn-Formeln), Formel

Mehr

Programmierung und Modellierung

Programmierung und Modellierung Programmierung und Modellierung Benutzerdefinierte Datentypen Martin Wirsing in Zusammenarbeit mit Moritz Hammer SS 2009 2 Inhalt Kap. 7 Benutzerdefinierte Datentypen 1. Aufzählungstypen 2. Typen mit zusammengesetzten

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum

Mehr

Ströme als unendliche Listen in Haskell

Ströme als unendliche Listen in Haskell Ströme als unendliche Listen in Haskell Strom := Folge oder Liste von Daten, unbegrenzt viele Daten-Elemente. Ströme sind in Haskell als als (potentiell) unendliche Listen darstellbar und programmierbar

Mehr

Funktionale Programmierung ALP I. Algebraische Datentypen und Abstrakte Datentypen. SS 2013 Prof. Dr. Margarita Esponda. Prof. Dr.

Funktionale Programmierung ALP I. Algebraische Datentypen und Abstrakte Datentypen. SS 2013 Prof. Dr. Margarita Esponda. Prof. Dr. Funktionale Programmierung AP I Algebraische Datentypen und Abstrakte Datentypen SS 2013 Abstrakt Datentypen Beispiel: Algebraischen Datentypen für Bäume data SBTree = SBTree SBTree AP I: Margarita Esponda,

Mehr

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

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen Was bisher geschah abstrakter Datentyp : Signatur Σ und Axiome Φ z.b. ADT Menge zur Verwaltung (Finden, Einfügen, Entfernen) mehrerer Elemente desselben Typs Spezifikation einer Schnittstelle Konkreter

Mehr

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition.

1 Der Baum. Informatik I: Einführung in die Programmierung 11. Bäume. Bäume in der Informatik. Bäume in der Informatik - Definition. 1 Informatik I: Einführung in die Programmierung 11. Bäume e e Albert-Ludwigs-Universität Freiburg Bernhard Nebel 17. November 2017 17. November 2017 B. Nebel Info I 3 / 33 Bäume in der Informatik Bäume

Mehr

11. Elementare Datenstrukturen

11. Elementare Datenstrukturen 11. Elementare Datenstrukturen Definition 11.1: Eine dynamische Menge ist gegeben durch eine oder mehrer Mengen von Objekten sowie Operationen auf diesen Mengen und den Objekten der Mengen. Dynamische

Mehr

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1 Teil : Suchen Problemstellung Elementare Suchverfahren Hashverfahren Binäre Suchbäume (Wiederholung aus Prog 2) Bäume: Begriffe, Eigenschaften und Traversierung Binäre Suchbäume Gefädelte Suchbäume Ausgeglichene

Mehr

Tag 7. Pattern Matching und eigene Datentypen

Tag 7. Pattern Matching und eigene Datentypen Tag 7 Pattern Matching und eigene Datentypen Heute werden wir eine Technik kennenlernen, die dafür sorgt, daß wir sehr viel übersichtlichere und kürzere Programme schreiben können. Als Überleitung auf

Mehr

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1 Kapitel 3: Eine einfache Programmiersprache Programmieren in Haskell 1 Datentypen, Datentypdefinitionen data Instrument = Oboe HonkyTonkPiano Cello VoiceAahs data Musik = Note Ton Dauer Pause Dauer Musik

Mehr

18. Natürliche Suchbäume

18. Natürliche Suchbäume Wörterbuchimplementationen 1. Natürliche Suchbäume [Ottman/Widmayer, Kap..1, Cormen et al, Kap. 12.1-12.] Hashing: Implementierung von Wörterbüchern mit erwartet sehr schnellen Zugriffszeiten. Nachteile

Mehr

13 Abstrakte Datentypen

13 Abstrakte Datentypen 13 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen auf den Elementen (Konstruktoren, Selektoren, Typprädikate) Eigenschaften abgeleitet Jetzt: Abstrakte Datentypen (ADT)

Mehr

Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07

Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07 Lösungshinweise/-vorschläge zur Altklausur Abschlussklausur 06/07 Dies sind die Lösungsvorschläge zu einer Altklausur, deren Aufgabenstellung an die Inhalte der Vorlesung Grundlagen der Programmierung

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte

Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom : Funktionen Höherer Ordnung II und Effizienzaspekte 16:02:08 2017-01-17 1 [34] Praktische Informatik 3: Funktionale Programmierung Vorlesung 6 vom 22.11.2016: Funktionen Höherer Ordnung II und Effizienzaspekte Christoph Lüth Universität Bremen Wintersemester

Mehr

ALP I Induktion und Rekursion

ALP I Induktion und Rekursion ALP I Induktion und Rekursion WS 2012/2013 Vollständige Induktion (Mafi I) Die Vollständige Induktion ist eine mathematische Beweistechnik, die auf die Menge der natürlichen Zahlen spezialisiert ist. Vorgehensweise:

Mehr

9. Natürliche Suchbäume

9. Natürliche Suchbäume Bäume Bäume sind. Natürliche Suchbäume [Ottman/Widmayer, Kap..1, Cormen et al, Kap. 12.1-12.] Verallgemeinerte Listen: Knoten können mehrere Nachfolger haben Spezielle Graphen: Graphen bestehen aus Knoten

Mehr

Algorithmen und Datenstrukturen I

Algorithmen und Datenstrukturen I Algorithmen und Datenstrukturen I Sortierverfahren D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2009/10, 18. Januar 2010,

Mehr

Abstrakte Datentypen II

Abstrakte Datentypen II 7 Abstrakte Datentypen II Nachdem wir im letzten Kapitel die grundlegenden Eigenschaften abstrakter Datentypen beschrieben haben und dabei eher einfache Beispiele betrachtet haben, soll es in diesem Kapitel

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Syntax und Semantik von Haskell Programmieren in Haskell 1 Was wir heute (und nächstes mal) machen Datentypdefinitionen Wertdefinitionen, Variablenbindungen Musterbindungen Funktionsbindungen

Mehr

Haskell for Hackers... or why functional programming matters

Haskell for Hackers... or why functional programming matters ... or why functional programming matters Franz Pletz CCC München 27-06-2009 @ GPN8 Fahrplan Ablauf Motivation 1 Ablauf Motivation 2 3 4 Ablauf Ablauf Motivation bei Fragen/Unklarheiten:

Mehr

Grundlagen der Programmierung 2. Unendliche Listen und Ströme(B)

Grundlagen der Programmierung 2. Unendliche Listen und Ströme(B) Grundlagen der Programmierung 2 Unendliche Listen und Ströme(B) Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 17. Mai 2006 Beispiel: scanl, scanr scanl berechnet das foldl

Mehr

Grundlagen der Programmierung 2. Bäume

Grundlagen der Programmierung 2. Bäume Grundlagen der Programmierung 2 Bäume Prof. Dr. Manfred Schmidt-Schauÿ Künstliche Intelligenz und Softwaretechnologie 24. Mai 2006 Graphen Graph: Menge von Knoten undzugehörige (gerichtete oder ungerichtete)

Mehr

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom : Typvariablen und Polymorphie Rev. 2749 1 [28] Praktische Informatik 3: Funktionale Programmierung Vorlesung 4 vom 04.11.2014: Typvariablen und Polymorphie Christoph Lüth Universität Bremen Wintersemester 2014/15 2 [28] Fahrplan Teil

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 10 (3.6.2014) Binäre Suchbäume I Algorithmen und Komplexität Zusätzliche Dictionary Operationen Dictionary: Zusätzliche mögliche Operationen:

Mehr

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Aufgaben zur Klausur Objektorientierte Programmierung im WS 2003/04 (IA 252) Zeit: 90 Minuten erlaubte Hilfsmittel: keine

Mehr

10 Abstrakte Datentypen

10 Abstrakte Datentypen 10 Abstrakte Datentypen abstrakte Datentypen generische Implementierung datengesteuerte Programmierung Operationstabelle 10.1 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen

Mehr

Die Korrektheit von Mergesort

Die Korrektheit von Mergesort Die Korrektheit von Mergesort Christoph Lüth 11. November 2002 Definition von Mergesort Die Funktion Mergesort ist wie folgt definiert: msort :: [Int]-> [Int] msort xs length xs

Mehr

Datenstrukturen. einfach verkettete Liste

Datenstrukturen. einfach verkettete Liste einfach verkettete Liste speichert Daten in einer linearen Liste, in der jedes Element auf das nächste Element zeigt Jeder Knoten der Liste enthält beliebige Daten und einen Zeiger auf den nächsten Knoten

Mehr

Programmierkurs II. Typsynonyme & algebraische Datentypen

Programmierkurs II. Typsynonyme & algebraische Datentypen Programmierkurs II Typsynonyme & algebraische Datentypen Um Dinge der realen Welt abzubilden, ist es nur in den seltensten Fällen komfortabel alles als Zahlen, Strings oder Listen zu kodieren. Wir benötigen

Mehr

B6.1 Introduction. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Introduction. B6.3 Analyse. B6.4 Ordnungsbasierte Methoden

B6.1 Introduction. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Introduction. B6.3 Analyse. B6.4 Ordnungsbasierte Methoden Algorithmen und Datenstrukturen 11. April 2018 B6. Binäre Suchbäume a Algorithmen und Datenstrukturen B6. Binäre Suchbäume 1 Marcel Lüthi and Gabriele Röger Universität Basel 11. April 2018 a Folien basieren

Mehr

Informatik II, SS 2016

Informatik II, SS 2016 Informatik II - SS 2016 (Algorithmen & Datenstrukturen) Vorlesung 10 (27.5.2016) Binäre Suchbäume II Algorithmen und Komplexität Zusätzliche Dictionary Operationen Dictionary: Zusätzliche mögliche Operationen:

Mehr

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 Bäume: Grundlagen und natürliche Suchbäume) Prof. Dr. Susanne Albers Bäume (1) Bäume sind verallgemeinerte Listen (jedes Knoten-Element kann mehr

Mehr

Gliederung. Algorithmen und Datenstrukturen I. Binäre Bäume: ADT Heap. inäre Bäume: ADT Heap. Abstrakte Datentypen IV. D. Rösner

Gliederung. Algorithmen und Datenstrukturen I. Binäre Bäume: ADT Heap. inäre Bäume: ADT Heap. Abstrakte Datentypen IV. D. Rösner Gliederung Algorithmen und Datenstrukturen I Abstrakte Datentypen IV D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2009/10,

Mehr

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

Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search) Fachrichtung 6.2 Informatik Universität des Saarlandes Tutorenteam der Vorlesung Programmierung 1 Programmierung 1 (Wintersemester 2015/16) Wiederholungstutorium Lösungsblatt 13 (Queues, Binary Search)

Mehr

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr.

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr. Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 0 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Fortgeschrittene Datenstrukturen Such-Algorithmen

Mehr

Tutoraufgabe 1 (Implementierung eines ADTs):

Tutoraufgabe 1 (Implementierung eines ADTs): Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Tutoriumslösung - Übung (Abgabe.05.0) F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe (Implementierung eines ADTs): Wir spezifizieren den ADT

Mehr

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1 Übergang von funktionaler zu OOP Algorithmen und Datenstrukturen II 1 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten

Mehr

Paradigmen der Programmierung

Paradigmen der Programmierung SS 11 Prüfungsklausur 25.07.2011 Aufgabe 5 (6+9 = 15 Punkte) a) Bestimmen Sie jeweils den Typ der folgenden Haskell-Ausdrücke: ( 1, 2 :"3", 4 < 5) :: (Char, String, Bool) [(last, tail), (head, take 5)]

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa AG Softech FB Informatik TU Kaiserslautern Lernziele Die Definition wichtiger Begriffe im Zusammenhand mit Bäumen zu kennen. Markierte Bäumen, insbesondere Suchbäume,

Mehr

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure 7. Dynamische Datenstrukturen Bäume Informatik II für Verkehrsingenieure Übersicht dynamische Datenstrukturen Wozu? Oft weiß man nicht von Beginn an, wieviele Elemente in einer Datenstruktur untergebracht

Mehr

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

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 10, Donnerstag 8. Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 10, Donnerstag 8. Januar 2015 (Verkettete Listen, Binäre Suchbäume) Junior-Prof. Dr.

Mehr

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen. Wiederholung Baum: Gerichteter Graph, der die folgenden drei Bedingungen erfüllt: Es gibt einen Knoten, der nicht Endknoten einer Kante ist. (Dieser Knoten heißt Wurzel des Baums.) Jeder andere Knoten

Mehr

3.2. Divide-and-Conquer-Methoden

3.2. Divide-and-Conquer-Methoden LUDWIG- MAXIMILIANS- UNIVERSITY MUNICH DEPARTMENT INSTITUTE FOR INFORMATICS DATABASE 3.2. Divide-and-Conquer-Methoden Divide-and-Conquer-Methoden Einfache Sortieralgorithmen reduzieren die Größe des noch

Mehr

INFORMATIK FÜR BIOLOGEN

INFORMATIK FÜR BIOLOGEN Technische Universität Dresden 15012015 Institut für Theoretische Informatik Professur für Automatentheorie INFORMATIK FÜR BIOLOGEN Musterklausur WS 2014/15 Studiengang Biologie und Molekulare Biotechnologie

Mehr

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph Programm heute Algorithmen und Datenstrukturen (für ET/IT) Sommersemester 07 Dr. Stefanie Demirci Computer Aided Medical Procedures Technische Universität München 7 Fortgeschrittene Datenstrukturen Graphen

Mehr

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Einführung. B6.2 Symboltabellen. B6.3 Einfache Implementationen

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Einführung. B6.2 Symboltabellen. B6.3 Einfache Implementationen Algorithmen und Datenstrukturen 03. April 2019 B6. Symboltabellen a Algorithmen und Datenstrukturen B6. Symboltabellen 1 Marcel Lüthi and Gabriele Röger Universität Basel 03. April 2019 a Folien basieren

Mehr

18. Natürliche Suchbäume

18. Natürliche Suchbäume Bäume Bäume sind. Natürliche Suchbäume [Ottman/Widmayer, Kap..1, Cormen et al, Kap. 12.1-12.] Verallgemeinerte Listen: Knoten können mehrere Nachfolger haben Spezielle Graphen: Graphen bestehen aus Knoten

Mehr

Programmieren in Haskell Abstrakte Datentypen

Programmieren in Haskell Abstrakte Datentypen Programmieren in Haskell Abstrakte Datentypen Peter Steffen Universität Bielefeld Technische Fakultät 09.01.2009 1 Programmieren in Haskell Einführung Man unterscheidet zwei Arten von Datentypen: konkrete

Mehr

Algorithmen und Datenstrukturen 12

Algorithmen und Datenstrukturen 12 12. Juli 2012 1 Besprechung Blatt 11 Fragen 2 Binary Search Binäre Suche in Arrays Binäre Suchbäume (Binary Search Tree) 3 Sortierverfahren Allgemein Heapsort Bubblesort Insertionsort Mergesort Quicksort

Mehr

Übung 4: Die generische Klasse AvlBaum in Java 1

Übung 4: Die generische Klasse AvlBaum in Java 1 Übung 4: Die generische Klasse AvlBaum in Java 1 Ein binärer Suchbaum hat die AVL -Eigenschaft, wenn sich in jedem Knoten sich die Höhen der beiden Teilbäume höchstens um 1 unterscheiden. Diese Last (

Mehr

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

Informatik II Vorlesung am D-BAUG der ETH Zürich Informatik II Vorlesung am D-BAUG der ETH Zürich Vorlesung 9, 2.5.2016 [Nachtrag zu Vorlesung : Numerische Integration, Zusammenfassung Objektorientierte Programmierung] Dynamische Datenstrukturen II:

Mehr

Informatik II, SS 2016

Informatik II, SS 2016 Informatik II - SS 2016 (Algorithmen & Datenstrukturen) Vorlesung 11 (1.6.2016) Binäre Suchbäume III Algorithmen und Komplexität Tiefe eines binären Suchbaums Worst-Case Laufzeit der Operationen in binären

Mehr

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. 4.5.5 Rekursive Typen Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten. datatype IntList = Nil Cons o f ( i n t IntList ) ; Damit

Mehr

Programmieren in Haskell Einstieg in Haskell

Programmieren in Haskell Einstieg in Haskell Programmieren in Haskell Einstieg in Haskell Peter Steffen Universität Bielefeld Technische Fakultät 24.10.2008 1 Programmieren in Haskell Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 13. Bäume. Bäume 1 Kapitel 13 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1 Kapitel 14 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können

Mehr

Programmieren in Haskell

Programmieren in Haskell Programmieren in Haskell Wir steigen ein... Programmieren in Haskell 1 Was wir heute machen Umfrage: Wer hat den Hugs ausprobiert? Ausdrücke und Werte Datentypen Funktionen Aufgabe für diese Woche Programmieren

Mehr

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

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2013 / Vorlesung 10, Donnerstag 9. Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2013 / 2014 Vorlesung 10, Donnerstag 9. Januar 2014 (Verkettete Listen, Binäre Suchbäume) Junior-Prof. Dr.

Mehr

ProInformatik: Funktionale Programmierung. Punkte

ProInformatik: Funktionale Programmierung. Punkte ProInformatik: Funktionale Programmierung 27.7-22.8.2008, M. Knobelsdorf Probeklausur Ihre persönliche Klausurnummer: Vorname, Nachname: Aufgabe 1 2 3 4 5 6 7 8 Punkte 12 4 4 4 4 2 4 6 40 Erz. Punkte Zum

Mehr