Übungsklausur Algorithmen I

Ähnliche Dokumente
Übungsklausur Algorithmen I

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

7. Übung zu Algorithmen I 1. Juni 2016

Übung Algorithmen I

12. Hashing. Hashing einfache Methode um Wörtebücher zu implementieren, d.h. Hashing unterstützt die Operationen Search, Insert, Delete.

Algorithmen und Datenstrukturen

13. Hashing. AVL-Bäume: Frage: Suche, Minimum, Maximum, Nachfolger in O(log n) Einfügen, Löschen in O(log n)

3. Übungsblatt zu Algorithmen I im SoSe 2017

NAME, VORNAME: Studiennummer: Matrikel:

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

Übung Algorithmen und Datenstrukturen

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Informatik II, SS 2014

Informatik II, SS 2014

1. Übungsblatt zu Algorithmen II im WS 2011/2012

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Grundlagen: Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

Karlsruher Institut für Technologie Institut für Theoretische Informatik. Klausur Algorithmen I

Kapitel 2: Analyse der Laufzeit von Algorithmen Gliederung

Muster. Informatik 3 (Februar 2004) Name: Matrikelnummer: Betrachten Sie den folgenden Suchbaum. A G H J K M N

Amortisierte Analyse

Beweis: Die obere Schranke ist klar, da ein Binärbaum der Höhe h höchstens

Algorithm Engineering. Amortisierung. Stefan Edelkamp


Hashing. Überblick Aufgabe Realisierung

Algorithmen und Datenstrukturen

Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:

Algorithmen und Datenstrukturen

Klausur Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

Tutoraufgabe 1 (Sortieralgorithmus):

Vorlesung Datenstrukturen

Datenstrukturen und Algorithmen

2. Übung Algorithmen I

Untersuchen Sie, inwiefern sich die folgenden Funktionen für die Verwendung als Hashfunktion eignen. Begründen Sie Ihre Antwort.

Denition: Rang eines Elements e einer Folge s = Position von e in sort(s) (angefangen bei 1). Frage: warum ist r nicht notwendig eindeutig?

Inhaltsverzeichnis. Teil 1 Grundlagen 21. Teil 2 Datenstrukturen 85

Datenstrukturen & Algorithmen Lösungen zu Blatt 5 FS 14

Grundlagen: Algorithmen und Datenstrukturen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen D-INFK

Lösungsvorschlag 1. Vorlesung Algorithmentechnik im WS 09/10

Algorithmen und Datenstrukturen VO 3.0 Vorlesungsprüfung 19. Oktober 2007

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Konvexe Hülle. Abbildung: [Wikipedia]: Nicht-konvexe Menge (links), konvexe Menge (rechts) KIT Institut für Theoretische Informatik 510

Teil VII. Hashverfahren

Algorithmen und Datenstrukturen I Grundlagen

3. Übung Algorithmen I

Kap. 4.7 Skiplisten. 14./15. VO DAP2 SS /16. Juni 2009

3. Übungsblatt zu Algorithmen I im SS 2010

Übung: Algorithmen und Datenstrukturen SS 2007

Hashing Hashfunktionen Kollisionen Ausblick. Hashverfahren. Dank an: Beate Bollig, TU Dortmund! 1/42. Hashverfahren

Probeklausur Computerorientierte Mathematik II

Übung Algorithmen und Datenstrukturen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Bucketsort. Korrektheit. Beispiel. Eingabe: Array A mit n Elementen im Bereich [0,1) Annahme: die Elemente sind in [0,1) gleichverteilt.

11. Elementare Datenstrukturen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Informatik II Prüfungsvorbereitungskurs

Algorithmen und Datenstrukturen

Asymptotische Laufzeitanalyse: Beispiel

DATENSTRUKTUREN UND ALGORITHMEN

5. Übungsblatt zu Algorithmen I im SoSe 2016

a) Geben Sie für die folgenden Paare von Mengen jeweils die Teilmengenbeziehung mit Hilfe der Symbole, und = an. lässt sich wie folgt umformen:

Algorithmen und Datenstrukturen 1 VL Übungstest WS Januar 2011

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 12

Suchen und Sortieren Sortieren. Heaps

Robert Sedgewick. Algorithmen in Java. »il 1-4 Grundlagen Datenstrykturen Sortleren Suchen. java-beratung durch Michael Schidlowsky

Kapitel 3. Speicherhierachie. Beispiel für Cache Effekte. Motivation Externspeicheralgorithmen. Motivation Für Beachtung von Cache Effekten

Inhaltsverzeichnis. Teil 1 Grundlagen 23

Kollision Hashfunktion Verkettung Offenes Hashing Perfektes Hashing Universelles Hashing Dynamisches Hashing. 4. Hashverfahren

Fibonacci-Suche. Informatik I. Fibonacci-Suche. Fibonacci-Suche. Einführung. Rainer Schrader. 24. Mai 2005

12 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

Transkript:

Jun.-Prof. Hofheinz, Jun.-Prof. Meyerhenke (ITI, KIT) 08.06.2015 Übungsklausur Algorithmen I Aufgabe 1. (Algorithm Engineering) Nennen Sie zwei Konzepte, die Algorithm Engineering im Gegensatz zu theoretischer Algorithmik ausmachen. Implementierung, Experimente, reale Eingaben, realistische Maschinenmodelle, konstante Faktoren berücksichtigen Aufgabe 2. (Listen) [4 Punkte] Nennen Sie zwei Operationen, die doppelt verkettete Listen in konstanter Worst-Case- Zeit unterstützen, einfach verkettete Listen jedoch nicht. Nennen Sie zwei Nachteile von verketteten Listen gegenüber beschränkten Feldern. insert, remove, popback kein beliebiger Elementzugriff in konstanter Zeit Speicheraufwand für Zeiger kein cache-effizientes Iterieren Aufgabe 3. (Hashing mit Kollisionen) Nennen Sie einen Vorteil und einen Nachteil von Hashing mit verketteten Listen gegenüber Hashing mit linearer Suche. Vorteile: insert in O(1), für dichte Hashtabellen besser, referentielle Integrität, Leistungsgarantien mit universellem Hashing Nachteile: nicht so platz-effizient, nicht so cache-effizient, nicht so einfach

svorschlag Aufgabe 4. (Dynamische Arrays) [6 Punkte] Welche der folgenden Operationen eines unbeschränkten/dynamischen Arrays haben im schlimmsten Fall (ohne Amortisierung) Θ(n) Zeitkomplexität? pushback, Folge von n pushback, Elementzugriff, Abfrage der Größe Geben Sie die amortisierte Laufzeit der Operation pushback an und zeigen Sie dies per amortisierter Analyse mit der Bankkontomethode. Nehmen Sie an, dass die Kapazität des Arrays verdoppelt wird, sobald sie nicht mehr ausreichend ist, und dass nur pushback- Operationen ausgeführt werden. pushback, Folge von n pushback Korrekturhinweis: Insbesondere sind [ ] (Elementzugriff) und (Größe) falsche Antworten. Die Operation pushback hat amortisiert konstante Laufzeit (O(1)). Beweis mit der Bankkontomethode: Zu zeigen ist, dass man der Operation ein konstantes Gehalt g zuweisen kann, sodass für die Kosten T (n) für eine Folge von n Operationen gilt: T (n) n g. Wir zeigen per Induktion, dass mit einem Gehalt von 3 Tokens für die pushback- Operation der Kontostand nach jeder pushback-operation 0 ist. Dazu zeigen wir, dass nach jeder Reallokation das Konto nicht überzogen wird. Basisfall n = 1: Gegeben ist ein einzufügendes Element. Das Array wird auf Kapazität 1 alloziert (Kosten 0). Das Element wird per pushback eingefügt (Kosten 1). Auf dem Konto verbleiben 2 von 3 Tokens, was 0 ist. Induktionsschritt: Wir nehmen an, dass nach dem Einfügen des n + 1-ten Elements der Kontostand 0 war. Jetzt ist das Array der Kapazität 2n voll belegt und wir wollen ein weiteres Element einfügen. Inzwischen wurden 3 n Tokens als Gehalt für das Einfügen der n Elemente Nummer n + 2 bis 2n + 1 ausgezahlt. Bisher wurden n 1 Tokens für das Einfügen dieser Elemente bezahlt, 2n+1 Tokens verbleiben also auf dem Konto. Wir führen eine Reallokation auf Kapazität 4n durch und bezahlen das Umkopieren von 2n Elementen (Kosten 2n Tokens) und das Einfügen des 2n + 1-ten Elements (Kosten 1 Token). Der Kontostand ist danach 0 0, q.e.d.

svorschlag Aufgabe 5. (Sortieren) [4 Punkte] Nennen Sie einen Vorteil von Radixsort gegenüber Mergesort (bei geeigneten Schlüsseln) und einen Vorteil von Mergesort gegenüber Quicksort. Warum wird Quicksort in der Praxis trotzdem sehr häufig eingesetzt? Vorteil Radixsort gegenüber Mergesort: Zeit in O(n) statt Θ(n log n) bei ganzzahligen Schlüsseln Vorteile Mergesort gegenüber Quicksort: stabil, O(nlogn) bzw. nlogn + O(n) Vergleiche im worst-case average-case-laufzeit n log n bei Randomisierung, praktisch meist der schnellste Algorithmus, inplace Aufgabe 6. (Lösen von Rekurrenzen) Bestimmen Sie die en der folgenden Rekurrenzen im Θ-Kalkül mit der einfachen Form des Master-Theorems: T (1) = 1, T (n) = 16T (n/4) + 4n, n = 4 k, k N S(1) = 55, S(n) = n + 3S(n/3), n = 3 k, k N T (n) Θ ( n log 4 16) = Θ ( n 2), S(n) Θ(nlogn) Aufgabe 7. (O-Kalkül) [5 Punkte] a. Zeigen Sie: log(n!) O(nlogn). Es gilt n! n n log(n!) log(n n ) = nlogn log(n!) = O(nlogn). b. Zeigen Sie: log(n!) Ω(n log n). [3 Punkte] n! n 2 ( + 1)... n n/2 ( ) n/2 log(n!) n 2 log( n 2 ) = n 2 (log(n) log(2)) n 2 2 : log(n!) ( log(n) 2 1 log(n)) = n 4 logn log(n!) = Ω(nlogn)

svorschlag Aufgabe 8. (Entwurf einer Datenstruktur) [8 Punkte] Eine Datenstruktur D soll Paare der Form (Schluessel, Wert) speichern (sowohl Schluessel und Wert seien Zahlen aus Z). Paare (x,c) und (y,c ) mit x = y dürfen in D nicht gleichzeitig vorkommen. Weiter soll D folgende Operationen mit jeweils gegebenem Laufzeitverhalten unterstützen (n bezeichne dabei die Anzahl der in D enthaltenen Paare): insert(x : Schluessel, c : Wert) fügt (x,c) in D ein. Ist schon ein Paar (y,c ) mit y = x in D vorhanden, so wird D nicht verändert. Der Zeitbedarf sei erwartet O(logn). removemin : Schluessel Wert entfernt aus D ein Paar (x,c) mit minimalem Wert c und liefert das entfernte Paar als Ergebnis zurück. Der Zeitbedarf sei erwartet O(logn). contains(x : Schluessel) : boolean stellt fest, ob D ein Paar (y,c) mit y = x enthält. Der Zeitbedarf sei erwartet O(1). Anwendungsbedingt sei bekannt, dass in D zu jedem Zeitpunkt höchstens m Paare gleichzeitig vorhanden sind, d. h. es gilt stets n m. Über die Beschaffenheit der auftretenden Paare wisse man im Voraus aber nichts. a. Skizzieren Sie, wie Sie diese Datenstruktur und die drei beschriebenen Operationen realisieren würden. [6 Punkte] Man realisiere D mit Hilfe eines binären Heaps B mit maximaler Größe m und einer Hashtabelle H mit Kollisionsauflösung mittels linearer Listen, die über 2m Slots verfügt. Bei jedem Systemstart werde für H eine Hashfunktion aus einer universellen Familie zufällig gewählt. Für jedes (x,c) in D müssen B und H einen Eintrag enthalten, c ist Key bzgl. des binären Heap B und x ist Key bzgl. der Hashtabelle H. Beim insert von (x,c) führt man zuerst H.find(x) aus. Ist für x bereits ein Eintrag vorhanden, so tut man nichts weiter. Sonst führe man noch B.insert(x,c) und H.insert(x) aus. Bei removemin führt man zuerst B.deleteMin() aus und gibt das vormals minimale Element x und seinen Heap-Schlüssel c als (x,c) zurück. Danach führt man dann H.remove(x) aus. Bei contains(x : Schluessel) führe man H.find(x) aus um herauszufinden, ob es ein Paar (y, c) mit y = x gibt in D. b. Begründen Sie kurz, warum die drei Operationen in Ihrer Realisierung das geforderte Laufzeitverhalten aufweisen. Verwendete Heap-Operationen: Benötigen alle O(logn) Worst-Case-Zeit. Hashtable-Operationen: Da H über 2m 2n = Ω(n) Slots verfügt und eine Hashfunktion aus einer universellen Familie zufällig gewählt wurde, dauern find und remove erwartet konstante Zeit, insert braucht sowieso deterministisch konstante Zeit. Datenstruktur D: insert und removemin brauchen erwartete Zeit O(1) plus Worst-Case-Zeit O(log n), also insgesamt erwartet O(log n) Zeit. Die Operation contains braucht nur erwartet O(1) Zeit, da ja nur H.find(x) ausgeführt wird.

svorschlag Aufgabe 9. (Hashing) [4 Punkte] Betrachten Sie die folgende Hashtabelle: 05 01 27 37 44 34 19 71 99 Zur Kollisionsauflösung wird Hashing mit linearer Suche (mit Puffer m = 1) verwendet. Die Hashfunktion h(x) = x DIV 10 bildet eine zweistellige Zahl x {01,...,99} auf ihre höchstwertige Ziffer ab. Beispiel: h(62) = 6, h(06) = 0. a. Sei die Tabelle in dem oben angegebenen Zustand. Geben Sie den Zustand der Tabelle nach dem Entfernen von 37 an. 05 01 27 34 44 19 71 99 b. Sei die Hashtabelle nun leer. Fügen Sie die Zahlen 12, 17, 88, 89, 05, 22, 48, 49, 50 in dieser Reihenfolge in die Hashtabelle ein. 05 12 17 22 48 49 50 88 89