Algebraische Datentypen ALP I Funktionale Programmierung Bäume (kurze Einführung) SS 2013 Prof. Dr. Margarita Esponda ALP I: Margarita Esponda, 6. Vorlesung, 11.07.2012 Funktionale Programmierung Was ist ein Baum? Eine spezielle Graph-Struktur ohne Zyklen root 1. Er hat eine Wurzel. O1 2. Alle Knoten ausser der Wurzel O3 O2 O5 O4 O11 Prof. Dr. Margarita Esponda O7 O12 O13 mit einem Vorfahren. 3. Es existiert genau ein Weg zwischen der Wurzel und O10 O9 O8 O6 haben genau eine Verbindung jedem beliebigen Knoten. O14 Eigenschaften von Bäumen Zwischen zwei beliebigen Knoten in einem Baum existiert genau ein Pfad, der sie verbindet. O1 Kanten O3 O2 Knoten O4 O6 O5 O8 O9 O7 O10 Blätter Ein Baum mit N Knoten hat N-1 Kanten. ALP I: Margarita Esponda, 11. Vorlesung, 16.07.2012 Eigenschaften von Bäumen? Nehmen wir an, wir haben einen Baum t, dann gilt: • |t| bezeichnet die Größe des Baumes t oder die gesamte Anzahl seiner Knoten. • Die Tiefe (Level) eines Knotens ist sein Abstand zur Wurzel. Die Tiefe der Wurzel ist gleich 0. • die Höhe h(t) ist der maximale Abstand zwischen der Wurzel und den Knoten. • Blätter sind Knoten ohne Kinder. • Die Pfadlänge des Baumes sei definiert als die Summe der Tiefen aller Knoten des Baumes. ALP I: Margarita Esponda, 11. Vorlesung, 16.07.2012 Eigenschaften von Bäumen |t| = gesamte Anzahl seiner Knoten = 10 h(t) = 3 Tiefe(n) = 1 O1 Pfadlänge(t) = 19 n O4 O6 O5 O8 ALP I: Margarita Esponda, 11. Vorlesung, 16.07.2012 O3 O2 O9 O7 O10 Funktionale Programmierung Binärbäume Bäume, in dem jeder Knoten höchstens zwei Kinder hat. Ein Binärbaum mit N inneren Knoten hat N+1 äußere Knoten oder Blätter. O5 Innere Knoten Blätter Prof. Dr. Margarita Esponda O10 O9 O11 O12 O13 O14 Funktionale Programmierung Binäre Suchbäume Binäre Suchbäume sind sortierte Binärbäume, d.h. die gespeicherten Elemente im Baum werden nach bestimmten Regeln einsortiert. Beispiel: 53 27 13 69 34 63 46 Prof. Dr. Margarita Esponda 95 Eigenschaften von Binär-Bäumen Rekursive Definitionen: Anzahl der inneren Knoten t = tl + t r + 1 Höhe des Baumes h(t) = 1 + max(h(tl ), h(t r )) Innere Pfadlänge des Baumes π (t) = π (tl ) + π (t r ) + t − 1 (Summe der Tiefen aller inneren Knoten) 22. ALP2-Vorlesung, M. Esponda Eigenschaften von Binär-Bäumen Rekursive Definitionen: t = tl + t r + 1 h(t) = 1 + max(h(tl ), h(t r )) O3 O2 =3 π (t) = π (tl ) + π (t r ) + t − 1 O4 = 10 O8 22. ALP2-Vorlesung, M. Esponda O1 =3+3+1=7 O9 O12 O9 O7 O5 O13 O14 O14 Funktionale Programmierung Balancierter Binärbaum Level 0 O1 O2 Level 1 O3 h O4 O8 O5 O9 O10 O6 O11 O12 O13 Wenn Prof. Dr. Margarita Esponda Level 2 O7 O14 O15 Level 3 h=3 1= 20 2= 21 2 . 2 = 22 2 . 2 . 2 = 23 dann n = 24 -1 Funktionale Programmierung Vollständige Binärbäume Ein vollständiger binärer Baum hat 2h – 1 innere Knoten und 2h Blätter n = 2h+1 - 1 root ⇓ Level 0 n + 1 = 2h+1 O1 O2 O3 O4 O5 O6 ⇓ Level 1 h Level 2 O7 log2(n+1) = log2(2h+1) ⇓ log2(n+1) = h+1 O8 O9 O10 O11 O12 O13 O14 O15 Level 3 ⇓ h = ⎡log2(n+1)⎤ -1 Prof. Dr. Margarita Esponda Funktionale Programmierung Suchen (Bäume vs. Listen) Ein vollständiger binärer Baum hat 2h – 1 innere Knoten und 2h Blätter n = 2h+1 - 1 ⇓ n+1= h ≈ log2(n) 2h+1 ⇓ log2(n+1) = n h log(n) log2(2h+1) ⇓ log2(n+1) = h+1 ⇓ h = ⎡log2(n+1)⎤ -1 Prof. Dr. Margarita Esponda n