7. Übung zu Algorithmen I

Werbung
7. Übung zu Algorithmen I
Institut für Theoretische Informatik, Prof. Sanders
1
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
KIT – die Kooperation von7.Forschungszentrum
GmbH und Universität Karlsruhe (TH)
Übung zu Algorithmen Karlsruhe
I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Organisatorisches
Raumverlegung:
Tutorium 10 von 131 nach -102 (Hörsaal) am 30.6. und 14.7.
Mittsemesterklausur: Name fehlt bei IDs 228, 313, 346;
bitte vorbeikommen und Schriftprobe abgeben
Übungsschein:
insgesamt 5 Übungsblätter im zweiten Teil ⇒ 120 Pflichtpunkte
Hälfte der überschüssigen Punkte des 2. Teils können
für den 1. Teil verwendet werden.
Das 2. Programmier-Übungsblatt wird 24 Punkte
+ 8 Zusatzpunkte haben.
2
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Demos (a, b )-Baum
Vorbemerkung
Elemente können nur in Blättern oder auch in inneren
Knoten/Wurzel gespeichert werden.
hier: nur in Blättern
sonst auch oft: in inneren Knoten/Wurzel
(2, 4)-Baum (Elemente auch in inneren Knoten):
http://www.cs.unm.edu/~rlpm/499/ttft.html
B-Baum (ähnlich):
http://slady.net/java/bt/view.php?w=800&h=600
3
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Rot-Schwarz-Bäume
Binärbaum
Kanten entweder rot oder schwarz
Invarianten
a) gleiche Anzahl schwarzer Kanten von Wurzel zu jedem Blatt
b) Blätter haben schwarze Eingangskanten.
c) Kein Pfad von Wurzel nach Blatt enthält
zwei aufeinanderfolgende rote Kanten.
Eigenschaften
balanciert: Höhe garantiert nur logarithmisch in #Elemente
logarithmische Laufzeit für Operationen
4
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Isomorphie von (2, 4)-Bäumen und
Rot-Schwarzen-Bäumen
(2, 4)-Bäume und Rot-Schwarz-Bäume sind isomorph.
a
a··
a
b
a
⇔
b
a
b
a
ab·
a
c
b
a
⇔
c
b
a
b
b
oder
c
b
a
abc
a
b
c
d
⇔
a
c
b
c
d
entspricht Mini-Baum in jedem (2, 4)-Baum-Knoten
5
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Höhe eines (a, b )-Baums
Obere und untere Schranken j
Aus der Vorlesung: Höhe h ≤ 1 + loga
n +1
2
k
Auf dem letzten Übungsblatt: Minimale und maximale Anzahl
Elemente bei gegebener Höhe h?
In dieser Übung: Höhe h ≥ dlogb (n + 1)e
Wozu die Abschätzung der Höhe?
Alle Operationen garantieren, dass alle Blätter gleich tief sind.
Erlaubt Laufzeitschranken für Operationen:
locate, insert, remove, . . .
in O(log n) für {a, b } ⊆ O(1)
6
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Höhe eines (a, b )-Baums
Zu zeigen: h ≥ dlogb (n + 1)e
Beweis:
Fall n = 1: h = 1
Fall n > 1:
Jeder innere Knoten hat Grad ≤ b.
⇒≤ bh Blätter.
Es gibt n + 1 Blätter.
Also n + 1 ≤ bh
⇒ h ≥ logb (n + 1)
Rundung folgt weil h eine ganze Zahl ist.
7
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Scharfe Schranken
j
h = 1 + loga
n +1
2
k
1
∞
1
j
n = 1, h = 1 + loga
8
17. Juni 2009
n +1
2
k
= 1 + bloga 1c = 1
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Scharfe Schranken
j
h = 1 + loga
n +1
2
k
a
1 2 ···a−1
1
2
3
···
j
n = 2a − 1, h = 1 + loga
8
17. Juni 2009
a + 1 a + 2 · · · 2a − 1
a
n +1
2
a+1 a+2 a+3
k
···
2a − 1
∞
= 1 + bloga ac = 2
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Scharfe Schranken
j
h = 1 + loga
n +1
2
k
a
1 2 ···a−1
1
2
3
···
j
n = 2a − 1, h = 1 + loga
a + 1 a + 2 · · · 2a − 1
a
n +1
2
a+1 a+2 a+3
k
···
2a − 1
∞
= 1 + bloga ac = 2
Induktionsschritt h à h + 1 : Statt einem Blatt hänge einen
weiteren Knoten mit a Blättern an. Spezialbehandlung für ∞.
8
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Scharfe Schranken
h = dlogb (n + 1)e
1 2 ···b −2
1
2
3
···
b−1
∞
n = b − 1, h = dlogb (n + 1)e = dlogb (b )e = 1
9
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Scharfe Schranken
h = dlogb (n + 1)e
1 2 ···b −2
1
2
3
···
b−1
∞
n = b − 1, h = dlogb (n + 1)e = dlogb (b )e = 1
Induktionsschritt h à h + 1 : Statt einem Blatt hänge einen
weiteren Knoten mit b Blättern an. Spezialbehandlung für ∞.
9
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Terminologie
adjazent
Zwei Knoten eines Graphen sind adjazent, wenn sie durch eine
gemeinsame Kante verbunden sind.
inzident
Einen Knoten und eine Kante eines Graphen sind inzident, wenn
der Knoten ein Endpunkt der Kante ist.
1
2
3
10
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Adjazenzfelder
2
3
1
4
5
V
E
11
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Teilgraphen
Teilgraph
Sei G = (V , E ) ein Graph.
Ein Graph G 0 = (V 0 , E 0 ) ist Teilgraph von G :⇔ V 0 ⊆ V und E 0 ⊆ E.
4
5
3
5
3
6
2
6
2
1
1
ist Teilgraph von
12
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Teilgraphen
Teilgraph
Sei G = (V , E ) ein Graph.
Ein Graph G 0 = (V 0 , E 0 ) ist Teilgraph von G :⇔ V 0 ⊆ V und E 0 ⊆ E.
4
5
3
5
3
6
2
6
2
1
1
ist kein Teilgraph von
12
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Knoteninduziertere Teilgraphen
Knoteninduzierter Teilgraph
Sei G = (V , E ) ein Graph.
Ein Graph G 0 = (V 0 , E 0 ) ist knoteninduzierter Teilgraph von G :⇔
V 0 ⊆ V und E 0 = {(v , w ) ∈ E | v , w ∈ V 0 }.
4
5
3
5
3
6
2
6
2
1
1
ist knoteninduzierter Teilgraph von
13
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Knoteninduziertere Teilgraphen
Knoteninduzierter Teilgraph
Sei G = (V , E ) ein Graph.
Ein Graph G 0 = (V 0 , E 0 ) ist knoteninduzierter Teilgraph von G :⇔
V 0 ⊆ V und E 0 = {(v , w ) ∈ E | v , w ∈ V 0 }.
4
5
3
5
3
6
2
6
2
1
1
ist kein knoteninduzierter Teilgraph von
13
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
K -core
K -core
Der größte knoteninduzierte Teilgraph G 0 = (V 0 , E 0 ) von G mit
∀v ∈ V 0 : Grad(v ) ≥ K ist der K -core von G.
4
4
5
3
5
3
6
2
6
2
1
1
ist 2-core von
14
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
K -core
K -core
Der größte knoteninduzierte Teilgraph G 0 = (V 0 , E 0 ) von G mit
∀v ∈ V 0 : Grad(v ) ≥ K ist der K -core von G.
4
5
3
5
3
6
2
6
2
1
ist 3-core von
14
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
K -core
K -core
Der größte knoteninduzierte Teilgraph G 0 = (V 0 , E 0 ) von G mit
∀v ∈ V 0 : Grad(v ) ≥ K ist der K -core von G.
4
5
3
6
2
1
ist 4-core von
14
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Einfacher Algorithmus zur
Berechnung des K -cores
Procedure core(G = (V , E ), K : N)
G 0 = (V 0 , E 0 ) : = G
while (∃v ∈ V 0 with GradG0 (v ) < K )
Remove v from V 0 and all its incident edges from E 0
return G 0
Frage: Laufzeit für diesen Algorithmus?
a) O(n + m )
b) O(n log n + m )
¡
¢
c) O n2 + m
15
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Einfacher Algorithmus zur
Berechnung des K -cores
Procedure core(G = (V [1..n + 1], E [1..m ]), K : N) // Adjazenzfeld
Q : FIFO
d : Array[1..n] of N
for (v := 1; v ≤ n; + + v )
d [v ] : = V [v + 1] − V [v ]
if (d [v ] < K ) Q.pushBack(v )
while (!Q.empty())
v := Q.popFront()
for (e := V [v ]; e < V [v + 1]; + + e)
w : = E [e ]
d [w ] − −
if (d [w ] = K − 1) Q.pushBack(w)
return subgraph induced by the nodes v with d [v ] ≥ K
16
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Einfacher Algorithmus zur
Berechnung des K -cores
Procedure core(G = (V [1..n + 1], E [1..m ]), K : N) // Adjazenzfeld
Q : FIFO
d : Array[1..n] of N
for (v := 1; v ≤ n; + + v )
d [v ] : = V [v + 1] − V [v ]
if (d [v ] < K ) Q.pushBack(v )
while (!Q.empty())
v := Q.popFront()
for (e := V [v ]; e < V [v + 1]; + + e)
w : = E [e ]
d [w ] − −
if (d [w ] = K − 1) Q.pushBack(w)
return subgraph induced by the nodes v with d [v ] ≥ K
Laufzeit: O(n + m )
16
17. Juni 2009
Robert Geisberger, Johannes Singler – Institut für Theoretische Informatik, Prof. Sanders
7. Übung zu Algorithmen I
KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
Herunterladen