09.02.2013 Aufrufe

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 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!