Datenstrukturen und Algorithmen Beispiellösung zu Heimübung 6 20. Juni 2007 Martina Hüllmann Aufgabe 20 (Beispiellösung I): Behauptung: Ein AVL-Baum T besitzt auch nach Aufruf der Operation AVL-Einfügen(T, u) wieder die AVL-Eigenschaft. Beweis durch Induktion über die Länge n des Suchpfades P (startend vom eingefügten Blatt): (IA) n = 0: Der Suchpfad P hat die Länge 0, d.h., es ist zu zeigen, dass der Baum mit Wurzel u ein AVL-Baum ist, was aber offensichtlich erfüllt ist, da u nach dem Einfügen noch keine Kinder hat. (IV) Ein AVL-Baum T besitzt nach Aufruf der Operation AVL-Einfügen(T, u) auf Suchpfaden der Länge < n wieder die AVL-Eigenschaft. (IB) Ein AVL-Baum T besitzt nach Aufruf der Operation AVL-Einfügen(T, u) auf Suchpfaden der Länge n wieder die AVL-Eigenschaft. (IS) n − 1 → n Der Knoten u wird zunächst korrekt wie “früher” eingefügt. Da die AVL-Eingeschaft hierdurch verletzt worden sein könnte, wird durch Aufruf von Balance(t) in Zeile 7 der Suchpfad vom eingefügten Knoten beginnend bis zur Wurzel zurückgelaufen und an jedem Knoten ggf. balanciert. Wir betrachten nun den n-ten Knoten (mit y bezeichnet) auf dem Suchpfad P vom eingefügten Blatt ausgehend. O.B.d.A. sei der (n − 1)-te Knoten auf dem Suchpfad P das linke Kind von v (s. Abbildung 1). y u Abbildung 1: Baum nach Einfügen von u. (Die rote Linie kennzeichne den Suchpfad P .) Da T vor dem Einfügen von u ein AVL-Baum war, kann die AVL-Eigenschaft nur in einem Teilbaum aus dem linken Teilbaum von y verletzt worden sein. Der rechte Teilbaum von y ist also auch nach dem Einfügen von u noch ein AVL-Baum. 1 Bis zur Wurzel lc[y] des linken Teilbaums von y beträgt die Länge des Suchpfades n − 1. Nach Induktionsvoraussetzung wurde bis einschließlich Knoten lc[y] die AVL-Eigenschaft korrekt wiederhergestellt. D.h., dass es sich bei dem betrachteten Baum mit Wurzel y nun entweder um einen beinahe-AVL-Baum handelt oder um einen “echten” AVL-Baum. 1. Fall: Der Baum mit Wurzel y ist ein AVL-Baum. In diesem Fall gilt: |h[lc[y]] − h[rc[y]]| ∈ {0, 1}. T besitzt also auch nach dem Aufruf von AVL-Einfügen(T, u) auf Suchpfaden der Länge n die AVL-Eigenschaft. 2. Fall: Der Baum mit Wurzel y ist ein beinahe-AVL-Baum. In diesem Fall gilt: |h[lc[y]] − h[rc[y]]| = 2. Sei x = lc[y], A der linke Teilbaum von x, B der rechte Teilbaum von x und C der rechte Teilbaum von y. Da wir o.E. davon ausgehen, dass x = lc[y] der (n − 1)-te Knoten auf dem Suchpfad P ist, muss der linke Teilbaum von y höher als der rechte sein. Es gilt also h[x] > h[C] + 1.) Auch hier sind nun wieder 2 Fälle zu unterscheiden: Fall 2.1: h[A] = H, h[B] ∈ {H, H − 1}, h[C] = H − 1 (Abbildung 2) Abbildung 2: Fall 2.1 In diesem Fall gilt also: h[A] ≥ h[B]. Die Abfrage in Zeile 3 von Balance ergibt somit false und der Algorithmus führt eine Rechtsrotation um y aus (Zeile 5, Abbildung 3). Abbildung 3: Rechtsrotation in Fall 2.1 Neuer Wurzelknoten dieses Teilbaums wird dadurch x. Das linke Kind von x bleibt unverändert. Somit bleibt die Höhe des linken Teilbaums von x h[A] = H. y wird rechtes Kind von x. Durch die Rechtsrotation wird B linker Teilbaum von y und C rechter 2 Teilbaum. Somit gilt für die Höhe von y nun h[y] = max{h[lc[y]] + 1, +h[rc[y]] + 1} = max{h[B] + 1, h[C] + 1} ∈ {max{H − 1 + 1, H − 1 + 1}, max{H + 1, H − 1 + 1}} = {H, H + 1} Die Höhe des linken und rechten Teilbaums von x unterscheiden sich nun um höchstens 1. Somit ist nun der Teilbaum mit Wurzel x ein AVL-Baum. T besitzt in diesem Fall also auch nach dem Aufruf von AVL-Einfügen(T, u) auf Suchpfaden der Länge n die AVL-Eigenschaft. Fall 2.2: h[A] = H − 1, h[B] = H, h[C] = H − 1 (Abbildung 4) Abbildung 4: Fall 2.2 In diesem Fall gilt: h[A] < h[B]. Die Abfrage in Zeile 3 von Balance ergibt somit true und der Algorithmus führt eine Linksrotation um x aus (Zeile 4). Durch die Rotation erhalten wir den in Abbildung 5 dargestellten Baum. Dabei bezeichne z die Wurzel des Teilbaums B und B 0 und B 00 jeweils den linken und rechten Teilbaum von z. Dabei gilt für die Höhen von B 0 und B 00 : h[B 0 ] = H − 1 und h[B 00 ] = H − 1 oder 0 00 und h[B ] = H − 1 oder 0 00 oder h[B ] = H − 2 h[B ] = H − 1 und h[B ] = H − 2 Abbildung 5: Linksrotation in Fall 2.2 Im Anschluss daran, wird in Zeile 5 eine Rechtsrotation um x ausgeführt. Besitzt der entstandene Teilbaum nun die AVL-Eigenschaft? Dazu berechnen wir die Höhen der beiden Teilbäume der Wurzel z: 3 Abbildung 6: Rechtsrotation in Fall 2.2 Für die Höhe von x gilt: h[x] = max{h[A] + 1, h[B 0 ] + 1} ∈ {max{H − 1 + 1, H − 2 + 1}, max{H − 1 + 1, H − 1 + 1}} = {max{H, H − 1}, H} = {H} Für die Höhe von y gilt: h[y] = max{h[B 00 ] + 1, h[C] + 1} ∈ {max{H − 2 + 1, H − 1 + 1}, max{H − 1 + 1, H − 1 + 1}} = {max{H − 1, H}, H} = {H} Die Höhe des linken und rechten Teilbaums von z sind nun gleich. Somit ist der entstandene Teilbaum mit Wurzel z ein AVL-Baum. T besitzt also auch in diesem Fall nach dem Aufruf von AVL-Einfügen(T, u) auf Suchpfaden der Länge n die AVL-Eigenschaft. Hiermit haben wir gezeigt, dass ein AVL-Baum T nach Aufruf der Operation AVL-Einfügen(T, u) auf Suchpfaden der Länge n die AVL-Eigenschaft besitzt. Aufgabe 20 (Beispiellösung II): Behauptung: Ein AVL-Baum T besitzt auch nach Aufruf der Operation AVL-Einfügen(T, u) wieder die AVL-Eigenschaft. Wir beobachten dazu zunächst, dass folgendes Lemma gilt: Lemma: Nach Aufruf der Operation AVL-Einfügen(T, u) ohne Ausführung der Operation Balance wird die Höhe des AVL-Baumes T entweder nicht verändert oder um 1 erhöht. Beweis durch vollständige Induktion nach der Höhe h von T . (IA) h = 0: Klar. 4 (IV) Nach Aufruf der Operation AVL-Einfügen(T, u) ohne Ausführung der Operation Balance wird bei einem AVL-Baum T mit einer Höhe von < h diese entweder nicht verändert oder um 1 erhöht wird. (IB) Nach Aufruf der Operation AVL-Einfügen(T, u) ohne Ausführung der Operation Balance wird bei einem AVL-Baum T mit einer Höhe von h diese entweder nicht verändert oder um 1 erhöht wird. (IS) h − 1 → h Besitze der AVL-Baum T vor dem Einfügen die Höhe h. Bei Aufruf von AVL-Einfügen(T, u) wird der Knoten u nun in einen der beiden Teilbäume der Wurzel von T eingefügt. Diese Teilbäume (die nach Voraussetzung ebenfalls AVL-Bäume sind) haben jeweils eine Höhe von ≤ h − 1. Nach (IV) wird die Höhe des Teilbaumes, in den u eingefügt wird, entweder nicht verändert oder um 1 erhöht. Wird die Höhe nicht verändert, so verändert sich auch h nicht. Wird die Höhe des Teilbaumes hingegen um 1 erhöht, so wird h um 1 erhöht (falls die beiden Unterbäume der Wurzel von T zuvor die gleiche Höhe hatten) oder bleibt unverändert (falls der Unterbaum der Wurzel von T , in den u nicht eingefügt wurde, um 1 größer war als der Unterbaum, in den u eingefügt wurde). Nun können wir unsere obige Behauptung mit Hilfe des Lemmas durch vollständige Induktion nach der Höhe h von T beweisen: (IA) h = 0: Klar. (IV) Ein AVL-Baum T mit Höhe < h besitzt nach Aufruf der Operation AVL-Einfügen(T, u) wieder die AVL-Eigenschaft. (IB) Ein AVL-Baum T mit Höhe h besitzt nach Aufruf der Operation AVL-Einfügen(T, u) wieder die AVLEigenschaft. (IS) h − 1 → h: Besitze T vor dem Einfügen die Höhe h. Im folgenden sei y die Wurzel von T , x = lc[y], A der linke Teilbaum von x, B der rechte Teilbaum von x und C der rechte Teilbaum von y. Mit D bezeichnen wir den linken Teilbaum von y, also den Teilbaum mit Wurzel x. Der Knoten u wird zunächst an die korrekte Position in einen der beiden Unterbäume von y eingefügt. O.B.d.A. nehmen wir an, dass u im linken Teilbaum von y, also in D eingefügt wird. C und somit auch die Höhe von C bleiben daher unverändert (C bleibt ein AVL-Baum). Da die Höhe von D < h beträgt, ist D nach (IV) auch nach dem Einfügen von u weiterhin ein AVL-Baum. Nach obigem Lemma erhalten wir für die Höhe von D (unmittelbar vor Ausführung der Operation Balance) folgende Fälle: Fall 1: Die Höhe von D bleibt unverändert. Da T vor dem Einfügen ein AVL-Baum war und C nicht verändert wird, bleibt der Wurzelknoten von T ausbalanciert und T besitzt insgesamt weiterhin die AVL-Eigenschaft und in Balance wird nichts verändert. Fall 2: Die Höhe von D erhöht sich um 1. Wir erhalten folgende Fälle: Fall 2.1: h[D] ∈ {h[C], h[C] + 1} Die AVL-Eigenschaft ist auch in der Wurzel y von T erfüllt und T somit insgesamt ein AVLBaum. In Balance wird wiederum nichts verändert. Fall 2.2: h[D] > h[C] + 1 Da T vor dem Einfügen ein AVL-Baum war gilt: h[D] = h[C] + 2. Das bedeutet, dass die AVL-Eigenschaft nun in jedem Knoten von T , außer der Wurzel erfüllt ist. T ist also ein beinahe-AVL-Baum. Wir erhalten wiederum 2 Fälle: • h[A] = H, h[B] ∈ {H, H − 1}, h[C] = H − 1 5 • h[A] = H − 1, h[B] = H, h[C] = H − 1 Wie in Fall 2.1 und 2.2 in Beispiellösung I dieser Aufgabe kann man auch hier zeigen, dass durch den Aufruf von Balance(T ) T korrekt in einen AVL-Baum umgeformt wird. Somit besitzt T auch in diesen beiden Fällen nach dem Aufruf von AVL-Einfügen(T, u) weiterhin die AVLEigenschaft. Aufgabe 21: Wir berechnen zunächst die Wahrscheinlichkeiten für die einzelnen Augensummen. Gebe dazu die Zufallsvariable X die Augensumme der beiden Würfel an. Es handelt sich hierbei um die klassische Wahrscheinlichkeit, P r(X = k) (k ∈ {2, . . . , 12}) lässt sich also durch folgende Formel berechnen: P r(X = k) = Anzahl der Fälle, bei denen die Augensumme der Würfel k beträgt Anzahl aller möglichen Fälle P r(X = 2) = P r(X = 3) = P r(X = 4) = P r(X = 5) = P r(X = 6) = P r(X = 7) = P r(X = 8) = P r(X = 9) = P r(X = 10) = P r(X = 11) = P r(X = 12) = |{(1, 1)}| 1 = 36 36 |{(2, 1), (1, 2)}| 2 = 36 36 |{(1, 3), (2, 2), (3, 1)}| 3 = 36 36 |{(1, 4), (2, 3), (3, 2), (4, 1)}| 4 = 36 36 5 |{(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)}| = 36 36 6 |{(1, 6), (2, 5), (3, 4), (4, 3), (5, 2), (6, 1)}| = 36 36 5 |{(2, 6), (3, 5), (4, 4), (5, 3), (6, 2)}| = 36 36 |{(3, 6), (4, 5), (5, 4), (6, 3)}| 4 = 36 36 3 |{(4, 6), (5, 5), (6, 4)}| = 36 36 |{(5, 6), (6, 5)}| 2 = 36 36 |{(6, 6)}| 1 = 36 36 Die Zufallsvariable Y gebe den Gewinnwert eines Spielers bei einem Spiel an. 6 Es gilt dann: P r(Y = −1) P r(Y = 0) P r(Y = 1) P r(Y = 2) P r(Y = 4) = P r(X = 2) + P r(X = 3) + P r(X = 4) + P r(X = 5) + P r(X = 6) 2 3 4 5 1 + + + + = 36 36 36 36 36 15 = 36 = P r(X = 7) + P r(X = 8) + P r(X = 9) 6 5 4 = + + 36 36 36 15 = 36 = P r(X = 10) 3 = 36 = P r(X = 11) 2 = 36 = P r(X = 12) 1 = 36 Für den Erwartungswert von Y gilt nun: 15 3 2 1 15 · (−1) + ·0+ ·1+ ·2+ ·4 36 36 36 36 36 4 = − 36 E[X] = Der erwartete Gewinnwert eines Spielers ist also negativ, was bedeutet, dass das Spiel die Bank bevorteilt. Aufgabe 22: Jury 1: Die Jury besteht aus drei Mitgliedern, von denen zwei Mitglieder unabhängig voneinander mit einer Wahrscheinlichkeit von p für ja stimmen und das dritte Mitglied eine Münze wirft, um seine Entscheidung zu treffen. Seien j1 , j2 , j3 die Mitglieder der Jury, wobei j1 und j2 die Mitglieder sind, die mit einer Wahrscheinlichkeit von p für ja stimmen und j3 das Mitglied ist, das zum Treffen seiner Entscheidung eine Münze wirft. Desweiteren bezeichne Mi das Ereignis, dass Mitglied ji mit “ja” gestimmt hat und entsprechend M̄i das Ereignis, dass Mitglied ji mit “nein” gestimmt hat (i = 1, 2, 3). Nach Aufgabenstellung ist Ereignis Mi unabhängig von Mj und M̄j (i ∈ {1, 2, 3}, j ∈ {1, 2, 3}, j 6= i). Es gibt nun folgende Möglichkeiten dafür, dass die Jury mit “ja” stimmt: 1. A1 := M1 ∩ M2 ∩ M3 P r(A1 ) = p · p · 1 2 (j1 , j2 und j3 stimmen mit “ja”) = 21 p2 2. A2 := M̄1 ∩ M2 ∩ M3 P r(A2 ) = (1 − p) · p · (j2 und j3 stimmen mit “ja”, j1 stimmt mit “nein”) 1 2 = 12 (p − p2 ) 7 3. A3 := M1 ∩ M̄2 ∩ M3 P r(A3 ) = p · (1 − p) · (j1 und j3 stimmen mit “ja”, j2 stimmt mit “nein”) 1 2 = 12 (p − p2 ) 4. A4 := M1 ∩ M2 ∩ M̄3 P r(A4 ) = p · p · 1 2 (j1 und j2 stimmen mit “ja”, j3 stimmt mit “nein”) = 21 p2 Bei der Berechnung der Wahrscheinlichkeiten wurde verwendet, dass die Ereignisse Mi unabhängig von Mj und M̄j (i = 1, 2, 3, j = 1, 2, 3, j 6= i) sind1 und dass das dritte Mitglied keine gezinkte Münze wirft und somit P r(M3 ) = 21 gilt. Gesucht ist nun die Wahrscheinlichkeit, dass eines der Ereignisse Ai (i = 1, 2, 3, 4) eintritt. Diese berechnet sich durch: P r( 4 [ Ai ) (∗) = i=1 4 X P r(Ai ) i=1 = 1 1 2 · p2 + 2 · (p − p2 ) 2 2 p2 + (p − p2 ) = p = (Anmerkung: In (∗) wurde verwendet, dass Ai disjunkte Ereignisse sind.) Jury 2: Die Jury besteht aus einer Person, die mit einer Wahrscheinlichkeit von p für ja stimmt. Fazit: Es entscheiden sich beide Juries mit der gleichen Wahrscheinlichkeit für “ja”. 1 Für zwei voneinander unabhängige Ereignisse X und Y gilt: P r[X ∩ Y ] = P r[X] · P r[Y ]. 8