17.01.2014 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!