Grundzüge DS & Alg (WS14/15) Lösungsvorschlag zu Aufgabenblatt 3. Aufgabe 1. (a) nicht-heap (b) Heap 25. (c) Beinahe-Heap 9.

Ähnliche Dokumente
8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Informatik II, SS 2014

Suchen und Sortieren Sortieren. Heaps

Informatik II, SS 2014

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

4. Lernen von Entscheidungsbäumen. Klassifikation mit Entscheidungsbäumen. Entscheidungsbaum

2. Lernen von Entscheidungsbäumen

Termine für Übungstests. Kap. 3 Sortieren HeapSort ff Priority Queues. Motivation. Überblick. Analyse SiftDown

14. Rot-Schwarz-Bäume

7. Sortieren Lernziele. 7. Sortieren

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)

Informatik II, SS 2014

Übungsklausur Algorithmen I

Priority Queues and Heapsort

Programmiertechnik II

Programmiertechnik II

Grundlagen: Algorithmen und Datenstrukturen

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

Der Alpha-Beta-Algorithmus

- k Maximalwerte aus Menge mit n >> k Elementen (Rangfolgebestimmung von Suchmaschinen!) Die typische Operationen:

Gierige Algorithmen Interval Scheduling

Informatik II Vorlesung am D-BAUG der ETH Zürich

Lösungsvorschlag Serie 2 Rekursion

Informatik II, SS 2014

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

11. Elementare Datenstrukturen

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

Algorithms & Datastructures Midterm Test 1

Customization (Zuschneiden)

Copyright, Page 1 of 8 AVL-Baum

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

Das Heiratsproblem. Definition Matching

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

16. All Pairs Shortest Path (ASPS)

Grundlagen der Programmierung 2. Sortierverfahren

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

13. Binäre Suchbäume

Algorithmentheorie Randomisierung. Robert Elsässer

8 Diskrete Optimierung

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Abschnitt: Algorithmendesign und Laufzeitanalyse

3. Übungsblatt zu Algorithmen I im SoSe 2017

Suchen und Sortieren

Vorlesung Algorithmische Geometrie. Streckenschnitte. Martin Nöllenburg

Einwegfunktionen. Problemseminar. Komplexitätstheorie und Kryptographie. Martin Huschenbett. 30. Oktober 2008

Sortierte Folgen 250

Algorithmen und Datenstrukturen Suchbaum

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

12.4 Traveling Salesman Problem

Zweizusammenhang und starker Zusammenhang

Informatik II. PVK Part1 Severin Wischmann n.ethz.ch/~wiseveri

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Quadtrees und Meshing

Programmieren in Haskell. Stefan Janssen. Strukturelle Rekursion. Universität Bielefeld AG Praktische Informatik. 10.

Tutoraufgabe 1 (2 3 4 Bäume):

Binäre lineare Optimierung mit K*BMDs p.1/42

3. Binäre Suchbäume. 3.1 Natürliche binäre Suchbäume. EADS 3.1 Natürliche binäre Suchbäume 78/598 ľernst W. Mayr

Informatik B Sommersemester Musterlösung zur Klausur vom

Informatik B von Adrian Neumann

Kapitel : Andere dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2013/14. Prof. Dr. Sándor Fekete

Übung: Algorithmen und Datenstrukturen SS 2007

3. Musterlösung. Problem 1: Heapsort

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Datenstrukturen und Algorithmen

8. Übung zu Algorithmen I 15. Juni 2016

Vorlesung Datenstrukturen

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Geordnete Binärbäume

Übung zur Vorlesung Berechenbarkeit und Komplexität

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

11.1 Grundlagen - Denitionen

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Resolutionsalgorithmus

WS 2009/10. Diskrete Strukturen

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Übungsblatt 8- Lösungsvorschlag

Algorithmen & Datenstrukturen 1. Klausur

Klausur Algorithmen und Datenstrukturen II 29. Juli 2013

Kapitel 2. Suche nach endlich vielen Wörtern. R. Stiebe: Textalgorithmen, Winter 2005/06 113

HEUTE. Datenstrukturen im Computer. Datenstrukturen. Rekursion. Feedback Evaluation. abstrakte Datenstrukturen

1.4 Die Ackermannfunktion

9. Übung Algorithmen I

Algorithmen und Datenstrukturen SS09

Klausur Datenstrukturen und Algorithmen SoSe 2012

Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Definition Gerichteter Pfad. gerichteter Pfad, wenn. Ein gerichteter Pfad heißt einfach, falls alle u i paarweise verschieden sind.

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

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

Transkript:

Lösungsvorschlag zu Aufgabenblatt Aufgabe 1 (a) nicht-heap 1 1 5 5 1 1 (b) Heap 5 1 1 14 5 10 4 (c) Beinahe-Heap 1 1 4 1 10 Heapify 1. Iteration. Iteration. Iteration 1 1 1 1 1 1 10 4 1 10 4 1 10 4 1 1

Lösungsvorschlag zu Aufgabenblatt Aufgabe Erwartete Lösung in h + log h Wir bauen den Pfad der Größten, wobei für jedes Element garantiert wird: Wenn es einen Sibling hat, so ist es größer als dieser, und wenn es ein Kindknoten hat, so ist es nicht das Ende des Pfades. Wenn wir den Pfad schon hätten, müssten wir nur noch heraus finden, wo in dieser Liste wir einfügen müssen, und sind prinzipiell fertig. Also: procedure Sift-Down(H) path PathOfBiggest(H) position PositionInSorted(H[1], path[...h], H) InsertPushUp(H[0], path[position], H) // Return the path of the biggest elements in the heap PathOfBiggest(H): path new array of size h path[1] = 1 // Der Pfad beginnt immer bei der Wurzel parent = 1 // Der aktuelle Parent ist die Wurzel for i from through h do if RightChild(parent) < LeftChild(parent) nextparent LeftChild(parent) else nextparent RightChild(parent) path[i] = nextparent // Pfad führt durch das größere Kind parent = nextparent return path // Find where value would be inserted in given path // Can return any value from a 1 through b PositionInSorted(value, path[a...b], H) if a > b return b m a+b // Heap ist von groß nach klein, also der Pfad auch if value > H[path[m]] return PositionInSorted(value, path[a...m], H) else return PositionInSorted(value, path[m + 1...b], H) // Insert at the specified position, pushing everything // upwards in the heap, popping out the root

Lösungsvorschlag zu Aufgabenblatt InsertPushUp(what, where, H) popped H[where] H[where = what if where!= 0 InsertPushUp(popped, Parent(where), H) Dieser Ansatz braucht für den Fall h = maximal 4 Vergleiche, für h = maximal. Die Komplexität der Vergleiche bei diesem Ansatz beträgt h + log h < fü h. Etwas schnellere Lösung in h + log (h) + O(1) < fü h + log h Anstatt den gesamten Pfad von Anfang an zu berechnen, können auch die ersten h log (h) Elemente des Pfades berechnet werden, gefolgt von einem Vergleich mit dem letzten Element: Pfad: Dann sind nur noch log (h log (h)) Vergleiche (zur Binärsuche) notwendig. Die Vergleiche zur Festlegung des restlichen Pfades entfallen. / Pfad: In diesem Fall kann der Algorithmus rekursiv absteigen, und das Ende des Pfades als neue Wurzel betrachten. Selbst wenn hier der obige langsame Algorithmus verwendet wird, wurden einige Vergleiche gespart. Dieses Verhalten führt zu folgender Rekurrenz-Gleichung bei den Kosten: C(h) h log (h) + 1 + max{log (h log (h)), C(log (h))} Wir definieren 1 log (h) = 0, wenn h 1, und log (h) = 1 + log (log(h)), wenn h > 1. Dann C(h) = h + log (h) + O(1) Diese Optimierung ist aber eher marginal. Kurz ausgerechnet: Für 8000000 (und C(0) = 0) ergibt diese Rekurrenz 8000005. Der obige langsame Ansatz braucht 80000. Heaps dieser Höhe (also mit 8Mio. Elementen) haben da ganz andere Probleme. Optimierungen werden an anderen Stellen eher gebraucht. Zu schnelle Lösungen Sublineare Ansätze sind grundsätzlich falsch: Damit ließe sich ein Heapsort in o(n log n) basteln, Widerspruch. 1 http://en.wikipedia.org/wiki/iterated_logarithm

Lösungsvorschlag zu Aufgabenblatt Aufgabe (a) 1 4 5 (b) 8 1 10 14 1 Wir zeigen dies durch Induktion über die Höhe des Baumes: 11 15 IA: Für einen Baum der Höhe ist die Bedingung offensichtlich erfüllt (siehe Skizze aus a). IV: Für ein Baum der Höhe h gilt: jeder Position im Array 1... n mit n < h ist genau eine Position im Baum zugeordnet. IS: h h + 1 : Alle Positionen der Werte im Array sind auf Ebene h des ergebenden Baumes nach IV eindeutig. Sie lassen sich als v h 1 bis v h 1 darstellen. Nach Definition von t(x) ist damit v : t(v) = Anzahl der Knoten auf Ebene von Element v und v i, v j : t(v i ) = t(v j ) mit i, j [ h 1, h 1]. Sei a = log t(v h 1). Die Knoten der Höhe h + 1 erhalten die Positionen a bis a + a, somit können maximal a Knoten adressiert werden, was genau der maximalen Anzahl an Knoten in der Höhe h + 1 entspricht. Da jeder Knoten in der Höhe h eindeutig zugeordnet ist, und wir jeweils nur a oder a aufaddieren, erhalten wir wieder eine eindeutige Zuordnung. Damit ist der entstehende Baum der Höhe h + 1 ebenfalls ein gültiger, eindeutiger Baum. (c) parent(v) = if v t(v) < t(v) then return v t(v) else return v t(v) (d) wenn v + t(v) > n gilt, dann ist v Blatt des Baumes in 1... n (e) Ja kann man, es müssen lediglich ein paar Funktionen angepasst werden: leftchild(v) = v + t(v) rightchild(v) = v + t(v) parent(v) = siehe (c) 4

Lösungsvorschlag zu Aufgabenblatt Als Vorteil ergibt sich, das zuerst alle rechtseitigen und danach erst die linkseitigen Blätter wegfallen. Dadurch gibt es mehr Knoten, die nur ein Kind haben. Somit entfällt in diesen Fällen der Verglich zwischen den Kindern eines Knotens, z.b. bei heapify. Nachteilig ist, dass die oben genannten Funktionen nun etwas komplexer sind. Aufgabe 4 a) 1 Input : x1, x, x, x4 Output : Das z w e i t k l e i n s t e Element. 4 i f ( x1>x ) 5 swap ( x1, x ) ; // In x1 und x werden nun immer // d i e zwei k l e i n s t e n b i s h e r b e t r a c h t e t e n 8 // Elemente e i n g e t r a g e n. 10 11 i f ( x<x ){ 1 x = x ; 1 // Hier wird x g g f. e i n s o r t i e r t. 14 i f ( x<x1 ) 15 swap ( x1, x ) ; 1 } 1 i f ( x4<x ){ 1 x = x4 ; // Hier wird x4 g g f. e i n s o r t i e r t. 1 i f ( x<x1 ) swap ( x1, x ) ; } 4 5 // Da in x immer der z w e i t k l e i n s t e // b e t r a c h t e t e Wert e i n g e t r a g e n i s t, 8 // und da a l l e Werte schon b e t r a c h t e t wurden, // i s t x der Rueckgabewert. 0 return x ; 5

Lösungsvorschlag zu Aufgabenblatt b) Mit b1/b ist das Element gemeint, das an der Stelle von x1/x zu diesem Zeitpunkt steht. Die Vertauschungen sind wie in Aufgabenteil a) vorgenommen. c) Das Programm macht im schlechtesten Fall 5 Vergleiche. Das Programm macht im besten Fall Vergleiche. Unter der Annahme, dass die Elemente zufällig Verteilt sind, ist die Durchschnittliche Anzahl der vergleiche 4 + 1. Es gibt auch Algorithmen, bei denen in jedem Fall 4 Vergleiche durchgeführt werden.

Lösungsvorschlag zu Aufgabenblatt d) Nein. Man muss auch nichts ändern. Nur im Entscheidungsbaum muss in einem der beiden Fälle ein Kleiner- bzw. Größergelichzeichen eingefügt werden.