2. Übung -- Algorithmen II - Johannes Singler - am Institut für ...
2. Übung -- Algorithmen II - Johannes Singler - am Institut für ...
2. Übung -- Algorithmen II - Johannes Singler - am Institut für ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
<strong>Johannes</strong> <strong>Singler</strong><br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik, Prof. Sanders<br />
1 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik<br />
KIT – Universität des Landes Baden-Württemberg und<br />
nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Organisatorisches<br />
Musterlösung des ersten <strong>Übung</strong>sblatts steht seit heute online.<br />
Das zweite <strong>Übung</strong>sblatt erscheint <strong>am</strong> Dienstag, 9.11.<br />
2 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Inhalt heute<br />
1 Wiederholung zum<br />
Beweis durchschnittliche Anzahl decreaseKeys<br />
2 Radix Heaps konzeptuell<br />
3 Anwendung Kürzeste Wege: Mitfahrgelegenheiten<br />
3 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Durchschnittliche Anzahl decreaseKeys<br />
<strong>für</strong> Jarník-Prim<br />
Motivation<br />
Algorithmus zur Berechnung minimaler Spannbäume<br />
(siehe <strong>Algorithmen</strong> I)<br />
Beweis analog zum Algorithmus von Dijkstra<br />
Wie viele decreaseKeys im Durchschnitt?<br />
beliebiger Graph G<br />
beliebiger Startknoten s<br />
Menge {1, . . . , m} von Kantengewichten<br />
eigentlich ausreichend: verschieden<br />
Gemittelt wird über alle Zuteilungen von Kantengewichten<br />
4 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Durchschnittliche Anzahl decreaseKeys<br />
<strong>für</strong> Jarník-Prim<br />
zu beweisen: E[#decreaseKey-Operationen] = O � n log m �<br />
n<br />
d[v] ist Abstand zum vorläufigen Spannbaum S,<br />
zu Beginn ∞<br />
decreaseKey wird aufgerufen,<br />
wenn neuer Knoten u zu S hinzugenommen wird<br />
mit c((u, v)) < d[v] (und v /∈ S, ignorieren wir)<br />
<strong>für</strong> einen Knoten v:<br />
decreaseKey bei Bearbeitung von Kante<br />
e i = (u i, v) nur wenn<br />
5 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
c(e i) < min<br />
j
Durchschnittliche Anzahl decreaseKeys<br />
<strong>für</strong> Jarník-Prim<br />
zu beweisen: E[#decreaseKey-Operationen] = O � n log m �<br />
n<br />
Reihenfolge der Kanten unabhängig vom<br />
Gewicht ⇒ zufällig<br />
Wie oft findet man ein neues Minimum?<br />
6 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
S<br />
u 1<br />
u<br />
i<br />
e i<br />
e 1<br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik<br />
v
Präfixminima einer Zufallsfolge<br />
Definiere Zufallsvariable Mn als Anzahl Präfixminima einer Folge von n<br />
verschiedenen Zahlen (in Abhängigkeit von einer Zufallspermutation).<br />
Definiere Indikatorzufallsvariable Ii = 1 gdw. die i-te Zahl ein<br />
Präfixminimum ist.<br />
7 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
E(Mn) = E(<br />
=<br />
n<br />
∑<br />
i=1<br />
I i) Lin.E(·)<br />
=<br />
n<br />
∑ E(Ii) i=1<br />
n<br />
1<br />
∑ i<br />
i=1<br />
= Hn wegen P [Ii = 1] = 1<br />
i<br />
x1, . . . , xi−1, xi, xi+1, . . . , xn<br />
� �� �<br />
Durchschnittliche Anzahl decreaseKeys<br />
<strong>für</strong> Jarník-Prim<br />
erstes Minimum führt zu insert(v)<br />
also <strong>für</strong> Knoten v:<br />
≤ Hk − 1 ≤ ln k erwartete decreaseKeys mit k = indegree(v)<br />
insges<strong>am</strong>t<br />
∑ ln indegree(v) ≤ n ln<br />
v∈V<br />
m<br />
n<br />
wegen Jensens Ungleichung<br />
8 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
n<br />
∑ f (xi) ≤ n · f<br />
i=1<br />
� n �<br />
∑i=1 xi n<br />
mit f = ln und x i = indegree(v) und ln konkav<br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Jensens Ungleichung<br />
<strong>für</strong> konvexe Funktionen:<br />
jede Verbindungsgerade<br />
zwischen zwei Funktionspunkten<br />
liegt überhalb der Funktion<br />
9 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
n<br />
∑ f (xi) ≥ n · f<br />
i=1<br />
f(y)<br />
t f(x) + (1-t) f(y)<br />
f(xt + y(1-t))<br />
f(x)<br />
� ∑ n i=1 x i<br />
n<br />
x xt + y(1-t) y<br />
analog <strong>für</strong> konkave Funktionen:<br />
jede Verbindungsgerade zwischen zwei Funktionspunkten<br />
liegt unterhalb der Funktion<br />
n<br />
∑ f (xi) ≤ n · f<br />
i=1<br />
�<br />
� n �<br />
∑i=1 xi n<br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Radix-Heaps konzeptuell<br />
konzeptuell: Radix Heap fasst eine Ebene eines Binären Heaps in<br />
einem Bucket zus<strong>am</strong>men.<br />
10 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
2<br />
10 8<br />
Binary Heap<br />
0<br />
4<br />
13 5<br />
Radix Heap<br />
0<br />
2, 4<br />
10, 8, 13, 5<br />
(Heap-)Baum entartet zu einer Liste (Unärbaum), da<strong>für</strong> mit vielen<br />
Elementen pro Knoten<br />
⇒ Buckets werden nach unten exponentiell größer<br />
Tiefe analog<br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Radix-Heaps konzeptuell<br />
11 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
2<br />
10 8<br />
Binary Heap<br />
0<br />
4<br />
13 5<br />
Radix Heap<br />
0<br />
2, 4<br />
10, 8, 13, 5<br />
Was ist die Abstraktion? (Was stimmt nicht wirklich?)<br />
Füllgrad der Buckets ist variabel<br />
bei Sprüngen in der Schlüsselwerten sind viele obere Buckets leer<br />
Schlüssel einer Ebene im Binären Heap nicht unbedingt<br />
konsistent in Buckets packbar<br />
Einteilung hängt von konkretem Wert ab,<br />
nicht nur von (vergleichendem) Rang<br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Radix-Heaps konzeptuell<br />
Vorteile<br />
keine iteratives siftUp/siftDown über volle Höhe mehr nötig<br />
zur Aktualisierung von min,<br />
Ziel-Bucket kann in konstanter Zeit gefunden werden<br />
vgl. Bucketsort: wahlfreier Zugriff statt (mehrere) Vergleiche<br />
Bedingungen<br />
Schlüssel sind Ganzzahlen<br />
um Bucket direkt ausrechnen zu können<br />
Wertebereich ist beschränkt<br />
um Anzahl Buckets beschränken zu können<br />
deleteMin muss ggf. jedes Mal alle Buckets überprüfen,<br />
bis es den ersten nicht-leeren gefunden hat.<br />
nur effizient wenn beschränkt<br />
12 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Radix-Heaps konzeptuell<br />
Warum die ganze Bit-Fummelei?<br />
Könnte man nicht viel anschaulicher<br />
nehmen?<br />
13 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
i := ⌈log 2 (d[v] − min)⌉<br />
erstmal okay: Anzahl Verschiebungen würde sich nicht erhöhen<br />
Jedes Element durchwandert jeden Bucket höchstens einmal.<br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Radix-Heaps konzeptuell<br />
Warum die ganze Bit-Fummelei?<br />
Könnte man nicht viel anschaulicher<br />
nehmen?<br />
13 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
i := ⌈log 2 (d[v] − min)⌉<br />
erstmal okay: Anzahl Verschiebungen würde sich nicht erhöhen<br />
Jedes Element durchwandert jeden Bucket höchstens einmal.<br />
Problem:<br />
Änderung von min ändert alle d[v] − min und d<strong>am</strong>it potentiell alle i.<br />
Das müsste bei zu vielen Elementen überprüft werden.<br />
⇒ schlechtere Laufzeit<br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Anwendung von schneller<br />
Kürzeste-Wege-Berechnung<br />
aus der aktuellen Forschung<br />
nicht prüfungsrelevant<br />
Mitfahrgelegenheiten<br />
das Wort hat Robert Geisberger<br />
14 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik
Umfrage nach gewünschten Inhalten<br />
in der <strong>Übung</strong><br />
Was hätten Sie <strong>am</strong> liebsten in der <strong>Übung</strong>?<br />
Wiederholung mittels ähnlichem Stoff, konzeptuell/Vergleiche<br />
(wie heute)?<br />
Blick über den Tellerrand (nicht prüfungsrelevant, auch wie heute)?<br />
(Weitere) Beispiele?<br />
Applets mit <strong>Algorithmen</strong>-Demos (wie letztes Mal)?<br />
Vorrechnen des <strong>Übung</strong>sblatts?<br />
Was wäre Ihnen heute <strong>am</strong> liebsten gewesen<br />
(Meinungen ins Diskussionsforum, bitte!)?<br />
Elektronische Umfrage im ILIAS-System (Link auf Homepage)<br />
Mehrfachnennung möglich<br />
15 <strong>Johannes</strong> <strong>Singler</strong>:<br />
<strong>2.</strong> <strong>Übung</strong> – <strong>Algorithmen</strong> <strong>II</strong><br />
Fakultät <strong>für</strong> Informatik<br />
<strong>Institut</strong> <strong>für</strong> Theoretische Informatik