Agenda. 1 Einleitung. 2 Binäre Bäume. 3 Binäre Suchbäume. 4 Rose Trees. 5 Zusammenfassung & Ausblick. Haskell Bäume. Einleitung.
|
|
- Dominik Acker
- vor 7 Jahren
- Abrufe
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 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
MehrHaskell 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,
MehrHASKELL 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
MehrAlgorithmen 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
MehrAlgorithmen 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
Mehrexpr :: 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,
MehrProgrammieren 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
MehrProgrammieren 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,
MehrFunktionale 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
MehrAlgorithmen 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
MehrInformatik 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
Mehr4.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
MehrInformatik 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
MehrBinä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
MehrAlgorithmen 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
Mehr13 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
MehrTrees. 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
MehrDatenstrukturen 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
MehrMengen. 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
MehrAlexander 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,...
MehrTrees. 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
MehrAnwendungsbeispiel 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
MehrAlgorithmen 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
MehrBemerkung: 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
MehrAlgorithmen 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)
Mehr3. 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
Mehr1 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
MehrInformatik 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
MehrWS 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
MehrBinä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
MehrProgrammieren 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
MehrFunktionale Programmierung mit Haskell
Funktionale Programmierung mit Haskell Dr. Michael Savorić Hohenstaufen-Gymnasium (HSG) Kaiserslautern Version 20120622 Überblick Wichtige Eigenschaften Einführungsbeispiele Listenerzeugung und Beispiel
MehrWas 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
MehrInformatik 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,
MehrEinfü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
MehrEinfü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
MehrWas 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
MehrProgrammierung 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
MehrVorlesung 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
MehrStrö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
MehrFunktionale 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,
MehrWiederholung 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
Mehr1 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
Mehr11. 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
MehrTeil 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
MehrTag 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
MehrKapitel 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
Mehr18. 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
Mehr13 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)
MehrLö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
MehrPraktische 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
MehrALP 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:
Mehr9. 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
MehrAlgorithmen 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,
MehrAbstrakte 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
MehrProgrammieren 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
MehrHaskell 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:
MehrGrundlagen 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
MehrGrundlagen 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)
MehrPraktische 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
MehrInformatik 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:
MehrPhysikalisch 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
Mehr10 Abstrakte Datentypen
10 Abstrakte Datentypen abstrakte Datentypen generische Implementierung datengesteuerte Programmierung Operationstabelle 10.1 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen
MehrDie 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
MehrDatenstrukturen. 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
MehrProgrammierkurs 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
MehrB6.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
MehrInformatik 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:
MehrVorlesung 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
MehrGliederung. 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,
MehrProgrammierung 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)
MehrProgramm 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
MehrTutoraufgabe 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 Imperative vs. funktionale Programmierung Plakativ lassen sich folgende Aussagen treffen: funktional: imperativ: Berechnung von Werten
MehrParadigmen 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)]
MehrSoftware 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,
Mehr7. 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
MehrAlgorithmen 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.
MehrWiederholung. 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
Mehr3.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
MehrINFORMATIK 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
MehrProgramm 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
MehrAlgorithmen 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
Mehr18. 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
MehrProgrammieren 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
MehrAlgorithmen 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 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 (
MehrInformatik 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:
MehrInformatik 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
MehrDie 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
MehrProgrammieren 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
MehrEinfü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
MehrEinfü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
MehrProgrammieren 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
MehrAlgorithmen 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.
MehrProInformatik: 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