Datenstrukturen und Algorithmen Aufgabe 20 (Beispiellösung I):

Werbung
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
Herunterladen