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