• Keine Ergebnisse gefunden

Übungen Algorithm Engineering - Blatt 2 Abgabe 3.5.2010, Besprechung 6.5.2010

N/A
N/A
Protected

Academic year: 2021

Aktie "Übungen Algorithm Engineering - Blatt 2 Abgabe 3.5.2010, Besprechung 6.5.2010"

Copied!
1
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übungen Algorithm Engineering - Blatt 2

Abgabe 3.5.2010, Besprechung 6.5.2010

1. (Spezielle Vorrangwarteschlangen) Geben Sie die (a) 1-level-Bucket, (b) 2-level Bucket, und (c) Radix-heap Datenstruktur für die Elemente 31, 8, 71, 4, 6, 24, 7, 73 an. Wählen SieC= 80.

2. (Dynamische Vektoren)

(a) Zeigen Sie, dass eine Verdopplungsstrategie von dynamischen Arrays zur amortisiert konstan- ten Zeit führt.

(b) Wie sollte verkleinert werden, damit Oszillierungseffekte vermieden werden?

(c) (*) Recherchieren Sie, wie ein dynamischer Vektor verwaltet werden kann, der nicht nur amor- tisiert, sondern auch worst-case konstante Zeit benötigt.

(d) Implementieren Sie so Array-basierte amortisiert/worst-case logarithmische Heaps als Vorrang- warteschlange (zumindest im Pseudo-Code). Beachten Sie dabei die Validität von Iteratoren.

3. (Bitvektormengen)

Berechnen Sie das höchst- oder niedrigst-signifikante Bit einer 32-bitunsigned integerZahl in nahe- zu konstanter Zeit, durch ein Computerprogramm durch mindestens zwei der folgenden Methoden:

(a) Einer Tabelle von216Zahlen; (b) Umwandlung in eine Fließkommazahl; (c) Betrachtung und Verarbeitung vonx&−x; (d) Alternative Bithacks (Stichwörter: mult,mod,deBruijn); oder (e) Rückgriff auf Prozessordirektiven (z.B. in SSE4.2). Nutzen Sie diese Umwandlungsmöglichkeit, um eine effiziente Mengenimplementierung von max. 32 Elementen zu implementieren, die das Einfü- gen (eines gegebenen) und das Löschen (deserstenElements) in konstanter Zeit unterstützt.

4. (Redundante Zahlensysteme)

Ein Heap-Speicher ist eine Sequenz von perfekten Weak-Heaps, geordnet nach ansteigender Baum- höhe. Um einen worst-case effizienten Heap-Speicher mit maximal zwei perfekten Weak-Heaps ei- ner Höhe zu bauen, benötigt man ein redundantes Zahlensystem, in dem Einfügungen von Weak- Heaps der Größe 1 nur konstant viele Join-Operationen nach sich ziehen. Eine redundante Zahl r = (r0, . . . , rk)∈ {0,1,2}k+1ist regulär, wenn jede Zahl 2 von einer Zahl 0 angeführt wird; mit möglichen Einsen dazwischen. So enthältr= (1011202012)drei Blöcke der Form(01l2).

(a) Zeigen Sie: Die redundante Darstellung bleibt durch stete Einfügeoperation (+1) regulär.

(b) Finden Sie (effiziente) Vorschriften, die die redundanten Darstellung von Zahlen in die binäre Darstellung und umgekehrt abbilden.

(c) (*) Funktioniert das Verfahren auch für perfekte Heaps? Recherche!

5. (Allgemeine Vorrangwarteschlangen)

Führen Sie in einer initial leeren Binomial Queue die folgenden Operationen aus:

(a) Insert(65), Insert(43), Insert(38), Insert(31), Insert(27), Insert(21), (b) Insert(12), Insert(9), Insert(7), Insert(4), DeleteMin,

(c) DecreaseKey(43,24), Delete(31), DecreaseKey(38,3), DeleteMin.

Geben Sie die Zwischenergebnisse nach jeder Teilaufgabe an.

1

Referenzen

ÄHNLICHE DOKUMENTE

(b) Gegeben sei eine linienförmige Ladungsverteilung der Länge 2 und der Ge- samtladung Q, die sich entlang der z-Achse von z = −1 bis z = 1 erstreckt.. Wie sieht die

f¨ur Dijkstras Algorithmus zum Finden k¨urzester Pfade zeigen, dass dieser eine Laufzeit von O(|E| + |V | log |V |) erreichen kann, wenn die Priority Queue durch einen

Finden Sie alle Vorkommen (absolute Indizes) des Wortes love in fortune (a) mit dem naiven O(nm) Algorithmus zur Mustererkennung in Texten.. (b) mit dem Algorithmus von

(c) Beschreiben Sie, wie man in einem Suffixbaum nach allen Teilzeichen- ketten suchen kann, die lexikographisch zwischen zwei Zeichenketten m 1?. und m 2 fallen, z.B., liegt

(a) Abhängigkeitsgraphen für die approximative Zeichenkettensuche (b) Spurgraphen für die

Tips zum Debugging für diejenigen, die mit einem ASCII-Editor ihre Programme schreiben, und in der Shell ausführen: An der Stelle, an der man das Programm anhalten möchte, fügt man

 verschiebe das (neue) Element der Wurzel in einen ihrer Unterbäume, damit das Array wieder ein Heap wird (DownHeap).  wiederhole Schritt 2 bis das Array

 verschiebe das (neue) Element der Wurzel in einen ihrer Unterbäume, damit das Array wieder ein Heap wird (DownHeap)G.  wiederhole Schritt 2 bis das Array