12.01.2014 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!