¨Ubungen zur Vorlesung Datenstrukturen WS 1999/2000 Blatt 10

Werbung
Hanno Lefmann
S. Droste/M. Müller-Olm/H. Tatlıtürk/H. Yoo
Dortmund, den 13.12.1999
Abgabe bis 20.12.1999 um 14:00 Uhr
Übungen zur Vorlesung
Datenstrukturen
WS 1999/2000
Blatt 10
Aufgabe 10.1 (5 Punkte)
Es sei die erste UNION-FIND Datenstruktur gegeben, d. h. ein n-elementiges Array A, so
dass in A(i) die Menge steht, in der Element i ∈ {1, . . . , n} enthalten ist. Zusätzlich ist für
jede Menge ihre Größe und eine Liste der Elemente in der Menge gegeben.
Es wurde in der Vorlesung gezeigt, dass die Laufzeit für jede Folge von UNION-Befehlen
auf n Elementen höchstens O(n log(n)) ist. Geben Sie eine Folge von UNION-Befehlen auf
n Elementen an, deren Laufzeit wirklich Θ(n log(n)) beträgt, wobei Sie n als Zweierpotenz
annehmen können.
Aufgabe 10.2 (5 Punkte)
Es sei die zweite UNION-FIND Datenstruktur gegeben, d. h. für jede Menge ein Baum,
in dessen Knoten die Elemente stehen und in dessen Wurzel zusätzlich der Mengenname
vermerkt ist. Dabei wird jeder Baum durch ein Array dargestellt, so dass in dem i-ten
Arrayelement der Elter von Knoten i steht.
Betrachten Sie den Fall, dass eine Menge durch einen vollständigen binären Baum der Tiefe
k gegeben ist, an dessen Blättern von links nach rechts die Elemente 1 bis n = 2k stehen.
Welche Kosten erzeugt die Folge F IN D(1), . . . , F IN D(n) von Befehlen ohne bzw. mit PfadKompression? Beweisen Sie Ihre Antwort.
Hinweis: Überlegen Sie zu der Variante mit Pfad-Kompression, wie oft jeder Knoten bei der
Folge von FIND-Befehlen besucht wird.
Zeigen Sie zusätzlich, dass ein vollständiger binärer Baum der Tiefe k ≥ 2 nicht durch eine
Folge von UNION-Befehlen aus einelementigen Mengen entstehen kann.
Aufgabe 10.3 (5 Punkte)
Der Tiefensuchalgorithmus kann in Zeit O(|V |+|E|) entscheiden, ob ein ungerichteter Graph
G = (V, E) einen Kreis enthält. Zeigen Sie, dass - etwa durch eine kleine Modifikation des
Algorithmus - auch eine Laufzeit von O(|V |) erreicht werden kann.
Aufgabe 10.4 (5 Punkte)
Es sei ein gerichteter Graph G = (V, E) mit einer Längenfunktion c : E → N0 gegeben.
Das Problem der kürzesten Pfade besteht darin, zu einem gegebenen Startknoten a ∈ V
für alle von a aus erreichbaren Knoten v die Länge eines kürzesten gerichteten Pfades (d. h.
einfachen Weges) von a zu v zu berechnen. Dabei ist die Länge eines Pfades (v1 , . . . , vk )
(mit (vi , vi+1 ) ∈ E für alle i ∈ {1, . . . , k − 1}) gleich der Summe der c((vi , vi+1 )) (über alle
i ∈ {1, . . . , k − 1}), d. h. der Längen der Kanten des Pfades.
Betrachten Sie den folgenden Algorithmus von Dijkstra:
Dijkstra(a):
1.
Für alle v ∈ V : färbe v weiss und setze dist(v) := ∞.
2.
Färbe a grau und setze dist(a) := 0.
3.
Solange es einen grauen Knoten gibt:
3.1.
Wähle einen grauen Knoten w, der den kleinsten dist-Wert hat.
3.2.
Färbe w schwarz.
3.3.
Für alle v ∈ Adj(w):
3.3.1.
Setze dist(v) := min{dist(v), dist(w) + c((w, v))}.
3.3.2.
Falls v weiss ist, färbe v grau.
Zeigen Sie, dass dieser Algorithmus das Problem der kürzesten Pfade löst, d. h., dass am
Ende genau alle von a aus erreichbaren Knoten schwarz sind und der dist-Wert jeweils die
Länge der kürzesten Pfades von a aus ist.
Hinweis: Beweisen Sie per Induktion über die Zahl i der erfolgten Schleifendurchläufe 3. 3.3.2.:
a) Für alle i schwarzen Knoten v ist dist(v) die Länge des kürzesten Pfades von a nach v
in G.
b) Alle schwarzen Knoten haben nur schwarze oder graue Knoten als Nachbarn. Für jeden
grauen Knoten v ist dist(v) gleich der Länge des kürzesten Pfades von a zu v, der nur
über schwarze Knoten läuft.
Die Ausgabe der Übungszettel erfolgt immer montags in der Vorlesung. Die Bearbeitungen
müssen bis zum darauffolgenden Montag 14:00 Uhr in die gekennzeichneten Briefkästen im
Pav. 6 eingeworfen werden. Bitte Namen und die Gruppennummer nicht vergessen.
Herunterladen