Handouts zur Vorlesung

Werbung
Algorithmen, Sommersemester 2007 (Nina Lehmann)
Handouts zur Vorlesung
AVL-Bäume
1. Schreiben Sie an jeden Knoten seine Balance:
2. Fügen Sie die 30 ein.
(a) Wo geht die Balance kaputt?
(b) Führen Sie eine geeignete Rotationsoperation durch, um die Balance wiederherzustellen.
B-Bäume
Beweis zu Lemma 6.3.1:
1
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
1. Welchen Wert hat der Parameter k in dem hier angedeuteten Beispiel?
k=2
2. Geben Sie die minimale Anzahl von Blättern in Höhe h an.
2 · k h−1
3. Geben Sie die maximale Anzahl von Blättern in Höhe h an.
(2k − 1)h
Beispiel: Suchen im B-Baum
1. Suchen Sie den Eintrag “125”.
125 < 233 ⇒1. Kind
125 > 31 ∧ 125 > 97 ∧ 125 < 137 ⇒3. Kind
125 > 100 ∧ 125 > 120 ∧ 125 = 15 ⇒gefunden
Beispiel: Einfügen im B-Baum
2
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
Überschuss an Schlüsseln im Knoten muss ausgeglichen werden:
Nach dem Ausgleich durch zweifaches Aufsplitten von Knoten erhält man:
Beispiel: Löschen aus einem B-Baum
3
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
Nachdem die falsche Anzahl von Kindern korrigiert wurde, indem die beiden Kinder verknüpft wurden,
erhält man:
Tries
1. Malen Sie für das Alphabet Σ = {#, $, 0, +} einen Σ-markierten Baum mit Tiefe 2.
2. Geben Sie für den folgenden Baum ϕ(v) für jedes v an:
1
2
3
4
5
6
7
8
9
B
H
BA
HA
HO
HU
BAU
HAH
10
11
12
13
14
15
16
17
HAU
HOF
HUH
HUN
HAHN
HAUS
HUHN
HUND
3. In anderen Worten: Was beschreibt ϕ(v)?
Den Pfad von der Wurzel nach v bestehend aus der Konkatenation aller Kanten-Labels.
4. Geben Sie die Menge S der Wörter an, die im Trie in 2. gespeichert sind.
{Hahn, Haus, Huhn, Hund, Hof, Bau}
5. Fügen Sie ein Wort zu S hinzu, so dass es nicht mehr präfixfrei ist.
Bauernhof
6. Was könnte man tun, um auch für diese Menge wieder Präfixfreiheit zu erzielen?
Einfügen eines neuen Knotens für “Bau”, der über eine Kante mit einem Wortende-Zeichen (üblicherweise “#”) mit Knoten 8 verbunden ist.
7. Welche weitere Eigenschaft sollten Tries haben, damit man in ihnen effizient ein Wort suchen kann?
Sie müssen soritiert sein.
4
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
8. Wenn die Kinder sortiert sind, wie kann man dann alle Wörter der Menge S möglichst effizient
sortiert ausgeben?
Tiefensuche (DFS).
9. Sei T ein schwach besetzter Trie, d.h. die meisten Knoten haben deutlich weniger als |Σ| Söhne.
Diskutieren Sie für diesen Fall die Vor- und Nachteile, wenn die Söhne eines Knotens in einem
Array oder in einer Liste verwaltet werden:
Array
Liste
Vorteile
Zugriffszeit O(1)
Speicherverbrauch O(|Σ|)
Nachteile
Speicherverbrauch O(|Σ|)
Zugriffszeit O(n)
10. Bauen Sie den Trie für die Menge S = {ERBE, ERBAU ER, ERBET EN, ERBAU LICH}
11. Wie können Sie die Pfade überspringen?
Zusammenfassen aufeinanderfolgender Knoten mit nur einem Kind durch Verschmelzung der Kantenbeschriftungen.
Beispiel: E → R → B wird zusammengefasst zu ERB
12. Sei S = {T HIS, IS, T HE, HOU SE, T HAT, JACK, BU ILT }
und A = 00001, B = 00010, . . .
dann ist die Binärcodierung von S:
BUILT
HOUSE
IS
JACK
THAT
THE
THIS
00010 11000 01010 01101 10111
01000 10000 11000 10110 00101
01010 10110
01011 00001 00011 01100
10111 01000 00001 10111
10111 01000 00101
10111 01000 01010 10110
Trie:
5
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
PATRICIA-Baum:
Skiplists
1. Oben ist eine normale, verkettete Liste gezeigt. Nehmen Sie an, dass die Anzahl der Elemente in
dieser Liste fix ist, und mehrfach nach den in ihr enthaltenen Elementen gesucht wird. Wie können
Sie durch zusätzliche Zeiger eine binäre Suche auf einer solchen Liste ermöglichen?
Jedes Element enthält zwei Zeiger auf das mittlere Element der linken bzw. rechten Hälfte und der
header erhält einen Zeiger auf das mittlere Element der gesamten Liste.
2. Warum ist dieser Ansatz für eine dynamische Liste nicht möglich?
Die Laufzeit schießt in die Höhe, da bei jeder Operation, die die Liste verändert, die Zeiger neu
berechnet werden müssen.
6
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
3. Welche Laufzeit benötigen wir für das Suchen eines Elements, wenn jedes Element an Stelle i zusätzlich einen Zeiger auf das Element an Stelle i + 10 hat?
n
10 + 10
a ...
b ...
c ...
d ...
e ...
Liste
Jedes zweite Element hat einen Zeiger, der ein Element überspringt
zusätzlich hat jedes vierte Element einen Zeiger, das 3 Elemente überspringt
zusätzlich hat jedes achte Element einen Zeiger, der 7 Elemente überspringt
Skiplist mit randomisierten Zeigerleveln
4. Beschreiben Sie konkret, wie man am effizientesten das Element “21” finden kann.
Start im Header. Suche solange mit Zeigern des höchsten Levels bis ein Element > 21 gefunden wurde. Dann erniedrige Levelpointer und suche wieder bis ein Element > 21 gefunden wurde. Tue dies
bis 21 gefunden wurde oder der unterste Zeiger-Level erreicht ist und nur noch größere Elemente
gefunden werden.
5. Wie sucht man allgemein in Skiplists?
Beginne im Startknoten und suche auf dem höchsten Zeigerlevel nach dem ersten Knoten, dessen
Schlüssel größer ist als der des gesuchten Knotens. Dann gehe im vorherigen Knoten ein Zeigerlevel
runter. Dann suche wieder den erstern Knoten mit zu großem Schlüssel und so weiter.
Sobald der niedrigste Level erreicht wurde und ein Knoten mit zu großem Schlüssel gefunden wurde,
existiert der gesuchte Schlüssel nicht in der Skiplist.
6. Wie löscht man und wieviel kostet das Löschen, wenn man erstmal das richtige Element gefunden
hat?
Das zu löschende Element wird gesucht, und alle Zeiger aus allen Ebenen, die auf dieses Element
zeigen, werden auf das Element umgehängt, auf das das zu löschende Element in der entsprechenden Ebene gezeigt wird. Dann kann das Element problemlos gelöscht werden.
7
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
Graphentheorie
1. Geben Sie drei Beispiele an, welche Situationen oder Systeme sich als Netzwerk oder Graph darstellen lassen.
• Busfahrplan
• Straßennetzwerke
• Genealogie
• Phylogenie
2. Betrachten Sie folgenden Graph:
(a) Beschreiben Sie einen Weg von A nach G.
{(A, E), (E, G)}
(b) Beschreiben Sie einen Pfad von A nach G.
{(A, E), (E, G)}
(c) Welche Länge hat dieser Pfad?
2
(d) Beschreiben Sie einen Zykel beginnend bei G, der kein einfacher Zykel ist:
A, B, D, G, C, D, E, A
3. Euler-Tour-Beweis:
1 ⇒ 2, 2 ⇒ 3, 3 ⇒ 1
1 . . . Ein Graph hat eine Euler-Tour
2 . . . In diesem Graphen haben allen Knoten geraden Grad
3 . . . Die Kanten von G können in Zykel paritioniert werden
(a) Beweisen Sie, dass aus 1 2 folgt.
Angenommen ein Graph mit Knoten ungeraden Grades hat eine Euler-Tour. In einer EulerTour muss man in jeden Knoten unterschiedlich oft hinein und hinaus gehen. Das ist bei einer
ungeraden Anzahl von Kanten an einem Knoten nicht möglich.
8
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
(b) Beweisen Sie, dass aus 2 3 folgt.
Tip: Zeigen Sie zuerst, dass ein Graph ganz ohne Zykel sich “zerlegen” lässt (naja, per Definitionen ist auch eine leere Menge oder eine Menge mit einem Knoten ein Zykel). Zeigen Sie
dann, dass ein Graph mit k Zykeln sich in einen Graphen mit weniger Zyklen und einen Zyklus
zerlegen lässt.
(c) Beweisen Sie, dass aus 3 1 folgt.
(d) Wie findet man einen Zykel c in einem Graphen?
4. Welche Familie halten Sie aufgrund des Netzwerkes (präsentiert auf einer Projektor-Folie) für am
wichtigsten und warum?
Medici. Sie haben Beziehungen zu fünf Familien, die ihrerseits wieder mehr Verbindungen zu anderen Familien haben als die benachbarten Familien der Strozzi.
5. Wie hoch ist die Wahrscheinlichkeit, dass a und c in einem Zufallsgraphen miteinander verbunden
sind, wenn Sie wissen, dass es einen Knoten b gibt, der mit a und c verbunden ist?
6. Sei G(n, p) ein Zufallsgraph mit n Knoten und p der Wahrscheinlichkeit, dass jede beliebige Kante
(v, w) ∈ V × V existiert. Was ist die erwartete Anzahl von Kanten?
Maximale Anzahl ungerichteter Kanten in einem Graph mit n Knoten:
n(n−1)
2
(gerichtet: n(n − 1))
7. Sei G ein Graph mit n Knoten und m Kanten. Berechnen Sie den erwarteten Clusteringkoeffizienten
in einem Zufallsgraphen mit der selben Anzahl an Knoten und (erwartet) der selben Anzahl an
Kanten für die folgenden 3 Graphen.
Casting von
Filmschauspielern
Stromnetz
C. elegans (neurales
Netzwerk)
n
m
realer durchschnittlicher
Clusteringkoeffizient
225.226
675678
0.79
erwarteter
Clusteringkoeffizient in
Zufallsgraph
2, 7 · 10−4
4.941
282
30634
1974
0.08
0.28
0,005
0,05
Darstellung von Graphen
1.
(a) Ist der Graph zyklisch oder azyklisch?
azyklisch
(b) Füllen Sie die Adjazenzmatrix aus.
0 1 2 3 4
0 0 0 0 0 1
1 1 0 0 0 1
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 1 0 0
(c) Wie würde die Adjazenzmatrix aussehen, wenn der Graph ungerichtet ist?
symmetrisch
9
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
(d) Nennen Sie je eine Realwelt-Beziehung, die “gerichtet” dargestellt werden sollte und eine, die
ungerichtet dargestellt werden sollte.
gerichtet: Straßennetz, das ausschließlich aus Einbahnstraßen besteht
ungerichtet: Straßennetz ohne eine einzige Einbahnstraße
2. Geben Sie für das obige Beispiel InAdj und OutAdj für alle Kanten an.
3. Finden Sie für dieses Beispiel eine topologische Sortierung.
1, 0, 4, 2, 3
4. Gibt es für diesen Graphen eine topologische Sortierung?
nein, da zyklisch
5. Zeigen Sie, dass wenn G eine topologische Sortierung hat, G keinen Zykel enthalten kann.
Dann wäre die topologische Sortierung nicht mehr eindeutig, da es keine eindeutige hierarchische
Abfolge mehr gibt.
6. Zeigen Sie, dass ein azyklischer Graph immer einen Knoten mit indegree(v) = 0 hat.
Durchmusterungen
Allgemeiner Durchmusterungsalgorithmus
Gegeben: Startknoten s ∈ V
Gesucht: Menge S von Knoten, die von s aus erreichbar sind
1 S={s}
// Menge an erreichbaren Knoten
2 Z={s}
// Menge an Knoten mit bisher unbenutzten Kanten
3 Iterator[] pointer
// enthält an Stelle i den Zeiger auf die Kanten
4 Initialisiere pointer // der adjazenten Knoten
5 while Z ist nicht leer do
6
currentNode = Z.get(0)
7
if Iterator von currentNode hat noch weitere Kanten e=(v,w)
8
addiere w zu S, wenn noch nicht drin
9
addiere w zu Z an letzter Stelle
10
else
10
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
11
lösche currentNode aus Z
12
end if
13 end while
14 return S
Durchmusterungsalgorithmus
1. Gegeben der allgemeine Algorithmus. In welcher Reihenfolge werden die Knoten das erste Mal betreten? (Am Beispiel des obigen Baumes, beginnend an der Wurzel.)
2. Was passiert, wenn wir Zeile 9 ändern in: Z.add(0, next), also next vorne in Z einfügen?
Tiefensuche
3. In diesem Beispiel sind die ausgehenden Kanten jedes Knotens durchnummeriert. Starten Sie mit
einer DFS bei A, folgen Sie den Kanten in der angegebenen Reihenfolge und markieren Sie als T, B,
F und C.
4. Zeigen Sie, dass die Kanten aus T tatsächlich einen gerichteten Baum konstruieren.
11
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
1 void DFS(Node v)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
besucht[v.index()] = true
dfsnum[v.index()] = ++z1
for all (v,w)∈E do
if not besucht[w] then
T ← T∪{(v, w)}
DFS(w)
else
?
if v→w then F ← F∪{(v, w)}
T
else
?
if w→v then B ← {(v, w)}
T
else C ← {(v, w)}
endif
endif
endif
endwhile
compnum[v.index()] = ++z2
5. Geben Sie für jeden Knoten im mittleren Feld seine df snum an und im hinteren Feld seine compnum.
(Kanten sind “alphabetisch” geordnet)
Starke Zusammenhangskomponenten
1. Finden Sie die starken Zuammenhangskomponenten im obigen Graphen.
{{bc} , {bef g} , {bcef g}}
2. Wieviele starke Zusammenhangskomponenten gibt es in einem DAG?
keine
3. Geben Sie für das Beispiel die zu diesem Zeitpunkt gültige Menge SZKs an.
12
www.bioinfoblog.de
Algorithmen, Sommersemester 2007 (Nina Lehmann)
{{bc} , {b} , {c} , {e} , {f } , {g} , {h}}
4. Welche davon sind unfertig, was sind ihre Wurzeln? Welche sind abgeschlossen?
1 DFS(v)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
besucht[v] = true
dfsnum[v] = ++z1
push(v, unfertig)
push(v, W)
for all (v, w)∈E do
if not besucht[v] then DFS(w)
else if w∈unfertig then
while dfsnum[top(W)] > dfsnum[w] do
pop(W);
endwhile
endif
endfor
compnum[v] = ++z2
if v = top(W) then
repeat
w := pop(unfertig)
print(w)
until v = w
pop(W)
endif
5. Berechnen Sie für den unten stehenden Graphen die angegebenen Distanzen.
d(1, 2) = −1
d(2, 3) = 4
d(4, 2) = ∞
d(2, 4) = 6 (wenn d(3, 4) = 2)
d(4, 6) = −∞
13
www.bioinfoblog.de
Herunterladen