blatt 03.pdf - am Institut für Theoretische Informatik, Algorithmik II - KIT
blatt 03.pdf - am Institut für Theoretische Informatik, Algorithmik II - KIT
blatt 03.pdf - am Institut für Theoretische Informatik, Algorithmik II - KIT
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Karlsruher <strong>Institut</strong> <strong>für</strong> Technologie<br />
<strong>Institut</strong> <strong>für</strong> <strong>Theoretische</strong> <strong>Informatik</strong><br />
Prof. Dr. Peter Sanders<br />
T. Bingmann, C. Schulz<br />
3. Übungs<strong>blatt</strong> zu Algorithmen I im SS 2013<br />
http://algo2.iti.kit.edu/AlgorithmenI2013.php<br />
{sanders,bingmann,christian.schulz}@kit.edu<br />
Aufgabe 1 (Amortisierte Analyse, 2 + 4 + 1)<br />
Auf einer Datenstruktur wird eine Sequenz σ = (σ 1 , · · · , σ n ) von Operationen ausgeführt. Die Operation<br />
σ i kostet i, wenn i eine Potenz von zwei ist, sonst 2. Mit anderen Worten:<br />
a) Berechnen Sie die Kosten <strong>für</strong> 16 Operationen T (16).<br />
b) Geben Sie eine geschlossene Form T (n) <strong>für</strong> die Kosten von n Operationen an. Nehmen Sie dabei<br />
vereinfachend an, dass n = 2 m <strong>für</strong> ein m ∈ N ist.<br />
c) Wie groß sind dann die <strong>am</strong>ortisierten Kosten pro Operation? Schätzen Sie die <strong>am</strong>ortisierten<br />
Kosten auch in O-Notation ab.<br />
Hinweis: 2 0 = 1.<br />
Aufgabe 2<br />
(Doppelt-verkettete Listen, 3 + 2 Punkte)<br />
a) Sie sollen eine unbeschränkte Queue mittels einer doppelt-verketteten Liste konstruieren. Geben<br />
Sie hierzu Pseudocode ”<br />
Implementierungen“ eines Listen-Elements sowie von pushBack und<br />
popFront an, so dass die Operationen jeweils nur konstante Zeit benötigen. Dabei darf keine<br />
bereits fertig ”<br />
implementierte“ Datenstruktur oder splice aus der Vorlesung verwendet werden,<br />
d.h. Sie müssen alles selbst bauen.<br />
b) Untersuchen Sie was mit einer doppelt-verketteten Liste passiert, wenn die in der Vorlesung<br />
vorgestellte Funktion splice(a, b, t : Handle) fälschlicherweise mit t ∈ 〈a, . . . , b〉 aufgerufen wird,<br />
wobei weiter a vor b in der Liste vorkommt. Zeichnen oder beschreiben Sie alle Fälle.<br />
Aufgabe 3<br />
(XOR Listen, 1 + 1 + 2 + 1 Punkte)<br />
In der Vorlesung wurden doppelte verkettete Listen L mit zwei Zeigern pro Listenelement, x.prev<br />
und x.next, implementiert. Nehmen Sie an, dass alle Zeigerwerte als k-bit Integer-Zahlen interpretiert<br />
werden können. Nehmen Sie weiter <strong>für</strong> die Aufgabenstellung an, dass jedes Listenelement ein Feld key<br />
hat, dass die eindeutige Identifizierung des Elements ermöglicht.<br />
Hinweis: ⊕ ist die bitweise XOR-Operation<br />
a) Gegeben sind zwei k-Bit-Integer I und J. Zeigen Sie: (I ⊕ J) ⊕ J = I<br />
b) Erklären Sie, wie eine doppelt verkettete Liste mit nur einem Zeiger x.np pro Listenelement<br />
implementiert werden kann. Hinweis: mit der Datenstruktur müssen nur die Funktionen aus<br />
Teilaufgabe c) und d) effizient implementieren können.<br />
c) Implementieren Sie die Funktion Search in O(|L|) und insertFront in O(1).<br />
d) Beschreiben Sie, wie die Liste in O(1) gespiegelt werden kann.<br />
1
Aufgabe 4<br />
(Unbounded Arrays, 2 Punkte)<br />
Im Unterschied zur Vorlesung und zur Übung sei hier α = β = 2. Das bedeutet die Größe des<br />
unbounded Arrays wird sofort halbiert, wenn er nur noch zur Hälfte gefüllt ist.<br />
Geben Sie eine Folge von n Operationen an, so dass ein derart schlecht implementierter unbounded<br />
Array mit diesen Operationen einen Aufwand von Θ ( n 2) verursacht. Zur Vereinfachung sei n eine<br />
Zweierpotenz.<br />
Zusatzaufgabe<br />
(Speicherverwaltung, 5 Punkte)<br />
Gegeben sei ein Progr<strong>am</strong>m, das zus<strong>am</strong>menhängende Speicherpakete der Größe 1 Block, 2 Blöcke und<br />
4 Blöcke anfordern kann. Das Progr<strong>am</strong>m kann in jedem Schritt von ihm schon belegte Speicherpakete<br />
freigeben und neue Speicherpakete anfordern. Dabei wird bei einer Freigabe immer das ganze Paket<br />
freigegeben (bei einem 4 Blöcke großen Paket werden also immer alle 4 Blöcke gleichzeitig freigegeben).<br />
Die Summe der angeforderten Speicherblöcke ist dabei nie größer als n. Einmal an das Progr<strong>am</strong>m<br />
übergebene Blöcke dürfen nie geändert oder verschoben werden (es sei denn, das Progr<strong>am</strong>m gibt sie<br />
frei).<br />
Beispiel:<br />
Sei n = 8 und seien 15 Speicherblöcke verfügbar, die anfangs alle leer sind.<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14<br />
Schritt 1: Das Progr<strong>am</strong>m fragt 8 Speicherpakete der Größe 1, 0 Speicherpakete der Größe 2 und 0<br />
Speicherpakete der Größe 4 an.<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14<br />
Schritt 2: Das Progr<strong>am</strong>m gibt die Speicherpakete mit den Startadressen 0,2,4,6 frei und fragt 0 Speicherpakete<br />
der Größe 1, 2 Speicherpakete der Größe 2 und 0 Speicherpakete der Größe 4 an.<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14<br />
Schritt 3: Das Progr<strong>am</strong>m gibt die Speicherpakete mit den Startadressen 1,5,8 frei.<br />
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14<br />
Schritt 4: Das Progr<strong>am</strong>m fragt 1 Speicherpaket der Größe 4 an. Diese Anfrage kann jedoch nicht<br />
befriedigt werden.<br />
Sei nun ein Speicher der Größe 2n gegeben. Geben Sie eine Strategie zur Befriedigung von Speicheranfragen<br />
an, und zeigen Sie, dass jede mögliche Folge von Speicheranfragen und Freigaben mit dieser<br />
Strategie und mit 2n Speicher befriedigt werden kann. Das Progr<strong>am</strong>m weiß natürlich welches Speicherpaket<br />
an welcher Stelle liegt. Gehen Sie davon aus, dass falls Ihre Strategie eine Schwachstelle hat,<br />
diese durch das Progr<strong>am</strong>m gefunden wird. n sei durch 8 teilbar.<br />
Wichtig: Da es sehr schwer ist zu entscheiden, ob eine Strategie in allen Fällen das Richtige tut, sollte<br />
zu jeder Strategie auch ein Beweis geliefert werden.<br />
Ausgabe: Mittwoch, 1.5.2013<br />
Abgabe: Freitag, 10.5.2013, 12:45 im Briefkasten im Untergeschoss von Gebäude 50.34<br />
2