blatt wiederholung 02.pdf - am Institut für Theoretische Informatik ...
blatt wiederholung 02.pdf - am Institut für Theoretische Informatik ...
blatt wiederholung 02.pdf - am Institut für Theoretische Informatik ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Karlsruher <strong>Institut</strong> für Technologie<br />
<strong>Institut</strong> für <strong>Theoretische</strong> <strong>Informatik</strong><br />
Prof. Dr. Peter Sanders<br />
T. Bingmann, C. Schulz<br />
2. Wiederholungs<strong>blatt</strong> zu Algorithmen I im SS 2013<br />
Aufgabe 1<br />
(Bellman-Ford)<br />
http://algo2.iti.kit.edu/AlgorithmenI2013.php<br />
{sanders,bingmann,christian.schulz}@kit.edu<br />
Bestimmen Sie für folgenden Graphen den Baum der kürzesten Wege mit Startknoten s, und bestimmen<br />
Sie die Distanzen aller Knoten von s. Tragen Sie das Endergebnis in die Zeichnung ein.<br />
−1<br />
4<br />
−2 3<br />
3 −2<br />
−2 6<br />
6<br />
5<br />
−1<br />
s<br />
7<br />
−1 4<br />
1<br />
Aufgabe 2<br />
(Schnelles Potenzieren)<br />
Gegeben ist der Algorithmus power(a : R; n 0 : N) aus der Vorlesung (siehe Folie 51 der Vorlesungsfolien).<br />
Führen Sie den Algorithmus für a = 2, n 0 = 15 aus und geben Sie die Belegung der Variablen<br />
p, r, n zu Beginn des Progr<strong>am</strong>ms und jeweils <strong>am</strong> Ende der Whileschleife an. Nutzen Sie dafür die<br />
folgende Tabelle!<br />
Aufgabe 3<br />
(Anwendungsproblem)<br />
Durchlauf n r p<br />
Start<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
Ein Staat möchte seine Internet-Infrastruktur erneuern. Es gibt n Städte die alle angebunden werden<br />
sollen, wobei indirekte Verbindungen ausreichen. Eine symmetrische Matrix C = ((c ij )) ∈ R n×n<br />
>0 informiert<br />
darüber, wieviel Einheiten der einheimischen Währung es jeweils kosten würde, eine Leitung<br />
zwischen je zwei Städten zu bauen.<br />
1
a) Entwickeln Sie einen Algorithmus, der eine kostenminimale Netzinfrastruktur berechnet, die alle<br />
n Städte direkt oder indirekt anbindet. Ihr Algorithmus darf höchsten O ( n 2 log n ) Zeit brauchen.<br />
b) Begründen Sie kurz, warum Ihr Algorithmus das gewünschte Laufzeitverhalten aufweist.<br />
Aufgabe 4<br />
(Minimale Spannbäume)<br />
a) Sei G = (V, E) ein zus<strong>am</strong>menhängender ungerichteter gewichteter Graph und T ein MST in G.<br />
Für V ′ ⊆ V sei G ′ der von V ′ induzierte Teilgraph von G und T ′ der von V ′ induzierte Teilgraph<br />
von T . Zeigen Sie: Wenn T ′ zus<strong>am</strong>menhängend ist, dann ist T ′ ein MST in G ′ .<br />
b) Sei G = (V, E) ein zus<strong>am</strong>menhängender ungerichteter gewichteter Graph mit Gewichtsfunktion<br />
c : E → R >0 . Sei T ein MST in G bzgl. der Gewichtsfunktion c.<br />
Sei e 0 eine Kante in T und q 0 ∈ R mit c(e 0 ) ≥ q 0 ≥ 0. Wir definieren nun eine weitere Gewichtsfunktion<br />
c 0 : E → R >0 mit c 0 (e) := c(e) für e ≠ e 0 und mit c 0 (e 0 ) := c(e 0 ) − q 0 .<br />
Zeigen Sie: T ist auch bzgl. der Gewichtsfunktion c 0 ein MST in G.<br />
Aufgabe 5 (MST )<br />
Gegeben sei ein ungerichteter, zus<strong>am</strong>menhängender Graph ohne Mehrfachkanten und Schleifen. Die<br />
Kanten seien gewichtet und o. B. d. A. nach Gewicht sortiert: w(e 1 ) ≤ w(e 2 ) ≤ . . . ≤ w(e m ). Zeigen<br />
Sie, dass e 2 in diesem Fall immer Teil eines minimalen Spannbaums sein kann.<br />
Aufgabe 6<br />
(Durchmesser eines Graphen)<br />
Skizzieren Sie einen Algorithmus, der den Durchmesser eines ungerichteten, zus<strong>am</strong>menhängenden Graphen<br />
G = (V, E) berechnet und dabei höchstens O(nm) Zeit benötigt (n := |V |, m := |E|). Sie können<br />
dazu einen bekannten Algorithmus modifizieren und verwenden. Begründen Sie, warum Ihr Algorithmus<br />
das gewünschte Laufzeitverhalten hat.<br />
Anmerkung: Der Durchmesser D eines Graphen G ist der maximale Abstand zwischen zwei Knoten<br />
in G. Der Abstand zweier Knoten sei dabei die minimale Kantenanzahl eines Pfades zwischen diesen<br />
Knoten in G.<br />
Mathematisch: D := max u,v∈V min P ∈P(u,v) |P |, wobei P(u, v) die Menge aller Pfade zwischen u und<br />
v ist, und |P | die Anzahl der Kanten in Pfad P .<br />
Aufgabe 7<br />
(Hashing)<br />
Gegeben sei eine leere Hash-Tabelle mit linearem Suchen ( ”<br />
open hashing with linear probing“). Als<br />
Hashfunktion werde h(x) := x mod 10 verwendet.<br />
a) Nun werde die Operationsfolge<br />
insert(13), insert(16), insert(4), insert(14), insert(3)<br />
ausgeführt. In welchen Zustand befindet sich die Hashtabelle nach der Ausführung? Tragen Sie<br />
die Lösung in die folgende Tabelle ein:<br />
2
0<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
b) Gegeben sei nun eine weitere Hash-Tabelle mit linearem Suchen ( ”<br />
open hashing with linear<br />
probing“). Die Operation remove sei dabei so implementiert, dass keine Löschmarkierungen<br />
gesetzt werden (verwenden Sie den Algorithmus aus der Vorlesung). Als Hashfunktion werde<br />
wieder h(x) := x mod 10 verwendet.<br />
Die Hashtabelle befinde sich in dem wie folgt skizzierten Zustand:<br />
0<br />
1 21<br />
2 1<br />
3 12<br />
4 14<br />
5 2<br />
6 13<br />
7<br />
8<br />
9<br />
Nun werde die Operation remove(12) ausgeführt. In welchen Zustand befindet sich die Hashtabelle<br />
nach der Ausführung? Tragen Sie die Lösung in die folgende Tabelle ein:<br />
Aufgabe 8<br />
(Prioritätswarteschlangen)<br />
0<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9<br />
a) Beschreiben Sie, wie man eine adressierbare Prioritätswarteschlange mittels einer doppelt verketteten<br />
Liste implementiert. Ein Listenglied repräsentiere dabei ein Element in der Schlange,<br />
ein Handle sei ein Handle eines Listenglieds. Es gelte die Invariante, dass die Liste vor und nach<br />
jeder Operation sortiert ist. Skizzieren Sie alle Operationen der Schnittstelle und geben Sie die<br />
asymptotischen Laufzeiten an.<br />
b) Beschreiben Sie, wie man eine adressierbare Prioritätswarteschlange mittels einer sortierten Folge<br />
(z. B. (a, b)-Baum) implementiert. Skizzieren Sie alle Operationen der Schnittstelle und geben<br />
Sie die asymptotischen Laufzeiten an.<br />
3
Aufgabe 9<br />
(O-Notation)<br />
a) Zeigen Sie: g(n) = O(f(n)) =⇒ O(f(n) + g(n)) = O(f(n)).<br />
b) Zeigen Sie: O(f(n)) · O(g(n)) = O(f(n) · g(n)).<br />
c) Für o(f(n)) wird auch die folgende, alternative Definition verwendet:<br />
g(n) = o(f(n)) :⇐⇒ lim<br />
n→∞ |g(n)/f(n)| = 0 .<br />
Es soll nun bewiesen werden, dass beide Definitionen äquivalent sind für g : N ≥0 → R ≥0 und<br />
f : N ≥0 → R >0 . Zeigen Sie also:<br />
g(n)<br />
lim<br />
n→∞ f(n) = 0 ⇐⇒ ∀c ∈ R >0 : ∃n 0 ∈ N >0 : ∀n ≥ n 0 : g(n) ≤ cf(n)<br />
Aufgabe 10<br />
(Geldwechselproblem und dyn<strong>am</strong>isches Progr<strong>am</strong>mieren)<br />
Angenommen, Sie haben die Aufgabe, eine Wechselgeldrückgabe für Getränkeautomaten zu progr<strong>am</strong>mieren.<br />
Ziel ist es dabei, immer die optimale (d. h. kleinstmögliche) Anzahl von Münzen zurückzugeben.<br />
Für viele Münzwertsysteme (z. B. auch für den Euro) wird diese Aufgabe durch das Greedy-<br />
Verfahren in Abbildung 1 optimal gelöst.<br />
a) Im Fall des Euro ist die Menge der Münzwerte M = {1, 2, 5, 10, 20, 50, 100, 200} (alle Werte in<br />
Cent). Zeigen Sie: Der Greedy-Algorithmus aus Abbildung 1 liefert nicht immer ein optimales<br />
Ergebnis, wenn eine zusätzliche Münze im Wert von 4 Cent eingeführt wird.<br />
Nun soll mit Hilfe von dyn<strong>am</strong>ischem Progr<strong>am</strong>mieren eine Algorithmus entwickelt werden, der für<br />
jedes beliebige Münzsystem M mit 1 ∈ M stets eine optimale Lösung liefert (wäre 1 ∉ M, so könnten<br />
manche Beträge nicht dargestellt werden).<br />
b) Identifizieren Sie die optimalen Teillösungen einer optimalen Lösung. Die Optimalität dieser<br />
Teillösungen muss dabei bewiesen werden. Was sind die trivialen Teilprobleme und deren trivialoptimale<br />
Lösungen?<br />
c) Geben Sie die optimale Lösung als Rekurrenz an.<br />
d) Geben Sie den fertigen Algorithmus in Pseudo-Code an.<br />
1: procedure Geldrueckgabe(rueckbetrag : N 0 , M : Set of N)<br />
2: rest := rueckbetrag : N 0<br />
3: while rest > 0 do<br />
4: wähle m ∈ M sodass m maximal ist mit m ≤ rest<br />
5: print Gib eine Münze im Wert von m zurück.<br />
6: rest := rest − m<br />
7: end while<br />
Abbildung 1: Ein Greedy-Verfahren zur Bestimmung der verwendeten Münzen bei der Geldrückgabe.<br />
Alle Werte sind natürliche Zahlen und werden z. B. in Cent angegeben. Die Menge M umfasst die<br />
möglichen Münzwerte.<br />
Aufgabe 11<br />
(Listen)<br />
In unserer einfachen Listen-Datenstruktur ist die Bestimmung der Listenlänge in konstanter Zeit nicht<br />
möglich. Das kann durch die Einführung einer Objektvariable size behoben werden, die aktualisiert<br />
wird, sobald sich die Anzahl der Elemente verändert. Operationen, die mehrere Listen betreffen,<br />
müssen nun über diese Listen Bescheid wissen, obwohl Low-Level-Funktionen wie splice nur Handles<br />
auf die betreffenden Elemente benötigen. Der Code, um ein Element a aus Liste L in Liste L ′ nach a ′<br />
zu verschieben, wäre beispielsweise:<br />
4
1: procedure moveAfter(a, a ′ : Handle; L, L ′ : List)<br />
2: splice(a, a, a ′ )<br />
3: L.size – –<br />
4: L ′ .size++<br />
Modifizieren Sie die Operationen remove, insertAfter und concat so, dass size korrekt aktualisiert<br />
wird.<br />
Aufgabe 12<br />
(Branch-and-Bound)<br />
Implementieren Sie einen Branch-and-Bound Algorithmus aus der Vorlesung (z.B. in Java oder C++)<br />
und/oder implementieren Sie einen Algorithmus der alle Permtationen der Zahlen {1, . . . , n} ausgibt.<br />
(ohne Lösung)<br />
T U T O R E N<br />
O-Phase 2013<br />
G E S U C H T<br />
!!! Werde selbst O-Phasen-Tutor !!!<br />
Seminar vom 30. September bis 2. Oktober, Tutorentag <strong>am</strong> 12. Oktober,<br />
O-Phase vom 14. bis 19. Oktober<br />
Weitere Infos über die Fachschaft Mathe/Info oder unter https://www.o-phase.com/o13/tutor<br />
Ausgabe: Mittwoch, 10.7.2013<br />
Abgabe keine<br />
5