Effiziente Algorithmen (SS11)

Werbung
Effiziente Algorithmen (SS11)
Übungsblatt 7
Prof. A. Schulz
Thomas Kamps
Abgabe: 03.06.2011 14:00 Uhr
Briefkasten 96
Alle Antworten müssen begründet werden, bzw. der Lösungsweg muss nachvollziehbar sein. Quellen sind anzugeben (auch aus dem Internet). Wenn Aufgaben
in Gruppenarbeit gelöst wurden, geben Sie alle Mitarbeiter an. Alle Laufzeiten
müssen bewiesen werden. Finden Sie Algorithmen mit schlechterer Laufzeit als
die geforderte, kann es dennoch einen Teil der Punkte geben.
Aufgabe 21
Floyd-Warshall Modifikation (5 Punkte)
Sei G = (V, E, w) ein gewichteter, ungerichteter Graph mit positiven Kantengewichten.
Der Graph G modelliert ein Straßennetzwerk, wobei die Gewichtsfunktion w angibt, mit
welchem maximal zulässigem Gewicht eine Straße befahren werden darf. Berechnen Sie
zwischen allen Knotenpaaren v, u die Route, welche es erlaubt die maximale Last von u
nach v zu transportieren. Die Laufzeit des Algorithmus soll O(|V |3 ) betragen.
Tipp: Modifizieren Sie den Algorithmus von Floyd-Warshall.
Aufgabe 22
Schnelles Zahlenraten (5 Punkte)
Alice und Bob spielen folgendes Spiel. Bob denkt sich eine beliebige natürliche Zahl X,
welche Alice erraten soll. Alice darf mehrere Zahlen mit einmal abfragen, und Bob muss
dann angeben zwischen welchen der angefragten Zahlen X liegt. Alice darf aber nie mehr
als X Zahlen in einer solchen Anfrage benutzen, sonst verliert sie. Zeigen Sie, dass es eine
Strategie gibt, so dass Alice nach O(log∗ X) Antworten von Bob die Zahl X erraten“ hat.
”
Ein Beispiel eines solchen Spiels, sieht wie folgt aus. Bob denkt sich die Zahl X = 51.
Aufgabe 23
Alice’ Frage
Bobs Antwort
1
4,7
10,20,30,40,50,60,70
51,52,53,54,55,56,57,58,59
größer 1
größer 7
zwischen 50 und 60
Treffer: 51
Linking-by-weight (5 Punkte)
In der Vorlesung haben wir gesehen, wie wir eine Union-Find Datenstruktur konstruieren
können, welche n Union und m Find Anfragen in O(m log n) Zeit beantworten konnte.
Dazu haben wir die disjunkten Mengen als Wald abgespeichert, wobei die Knoten jeder
Menge einen Baum im Wald bildeten. Als Repräsentanten r[X] der Menge X wählte man
die Wurzel des Baumes von X. Bei einem Find lief man über die Vater-Zeiger zur Wurzel
und konnte so den Repräsentanten ausgeben. Bei einem Union(r[X], r[Y ]) Aufruf machte
Übungsblatt 7
2
man entweder r[Y ] zum Kind von r[X] oder umgekehrt. Welche der beiden Alternativen
man ausführte, wurde durch die linking-by-rank Strategie bestimmt. Wir führen nun eine
neue Strategie linking-by-weight ein, die wie folgt arbeitet: Wenn die Menge X größer ist
als die Menge Y mache r[Y ] zum Kind von r[X] sonst umgekehrt.
Zeigen Sie, dass auch mit linking-by-weight (ohne Pfadkompression) die Ausführung aller
Operationen O(m log n) Zeit benötigt.
Effiziente Algorithmen (SS11)
Übungsblatt 7
Herunterladen