Grundzüge von Algorithmen und Datenstrukturen, WS 15/16: Lösungshinweise zum 13. Übungsblatt

Ähnliche Dokumente
\ E) eines Graphen G = (V, E) besitzt die gleiche Knotenmenge V und hat als Kantenmenge alle Kanten des vollständigen Graphen ohne die Kantenmenge E.

3. Musterlösung. Problem 1: Boruvka MST

Quicksort ist ein Divide-and-Conquer-Verfahren.

5. Bäume und Minimalgerüste

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

Algorithmen & Komplexität

Algorithmen und Datenstrukturen 2. Stefan Florian Palkovits, BSc Juni 2016

Datenstrukturen und Algorithmen Beispiellösung zu Heimübungsblatt 7. Abbildung 1: Das Array A als Baum (vgl. Foliensatz 16, Folie 3)

Wie wird ein Graph dargestellt?

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

3. Minimale Spannbäume. Definition 99 T heißt minimaler Spannbaum (MSB, MST) von G, falls T Spannbaum von G ist und gilt:

Vorlesung Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

Kap. 3: Sortieren (3)

18. Natürliche Suchbäume

Algorithmen und Datenstrukturen

Informatik II, SS 2018

Suchen und Sortieren Sortieren. Heaps

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Kürzeste-Wege-Algorithmen und Datenstrukturen

Kapitel IV Minimale Spannbäume

Algorithmen und Datenstrukturen Heapsort

9. Natürliche Suchbäume

Informatik II, SS 2014

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

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Algorithmen II Vorlesung am

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

Abgabe: (vor der Vorlesung) Aufgabe 7.1 (P) Binomial Heap

Musterlösungen zu Datenstrukturen und Algorithmen SS 2005 Blatt 2, Aufgabe 3 Wir schreiben zunächst alle Funktionen zur Basis 2.

Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 2006 Blatt 13

Heapsort, Quicksort, Mergesort. 8. Sortieren II

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

Heapsort, Quicksort, Mergesort. 8. Sortieren II

ADS: Algorithmen und Datenstrukturen 2

Sortieren II / HeapSort Heaps

Kapitel IV Minimale Spannbäume

Informatik B Sommersemester Musterlösung zur Klausur vom

21. Greedy Algorithmen. Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3

markiert, 0: unmarkiert.)

Kap. 6.5: Minimale Spannbäume ff

4.2 Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition 4.2.1

Übungsblatt 2 - Lösung

Aufgabe 4.2 Sei G = (V, E, l) ein ungerichteter, gewichteter und zusammenhängender Graph.

3.2 Generischer minimaler Spannbaum-Algorithmus

Algorithmen und Datenstrukturen

3. Musterlösung. Problem 1: Heapsort

24. Minimale Spannbäume

25. Minimale Spannbäume

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

7. Sortieren Lernziele. 7. Sortieren

Datenstrukturen und Algorithmen SS07

Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

Lernmodul 7 Algorithmus von Dijkstra

1. Klausur zur Vorlesung Algorithmentechnik Wintersemester 2008/2009

ÜBUNGSKLAUSUR Studienhalbjahr: 2. Semester. Datum: 20. Juli 2016 Bearbeitungszeit: 90 Minuten. Modul: T2INF Dozent: Stephan Schulz

Algorithmen & Komplexität

Kapitel 8 Graphenalgorithmen. Minimaler Spannbaum Union-find-Problem Kürzeste Wege

Funktioniert der Greedy-Algorithmus auch für Briefmarken aus Manchukuo?

Informatik B Sommersemester Musterlösung zur Klausur am

4.2 Fibonacci-Heaps Aufbau Potenzialfunktion. Knoten v hat folgende Felder:

Graphalgorithmen II. Sebastian Ehrenfels Sebastian Ehrenfels Graphalgorithmen II / 44

Übung Algorithmen und Datenstrukturen

Algorithmen 1 Tutorium

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

9 Minimum Spanning Trees

Algorithmen für Planare Graphen

Algorithmen II Vorlesung am

Tutoraufgabe 1 (Suchen in Graphen):

Algorithmen und Datenstrukturen 1

12. Graphen. Königsberg Zyklen. [Multi]Graph

5. Übungsblatt zu Algorithmen I im SoSe 2016

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Kap. 6.5: Minimale Spannbäume

Informatik II, SS 2016

Datenstrukturen und Algorithmen

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.2 Quicksort. A7.

ADS: Algorithmen und Datenstrukturen 2

Breitensuche BFS (Breadth First Search)

Diskrete Mathematik 1

Bipartites Matching. Gegeben: Ein bipartiter, ungerichteter Graph (V 1, V 2, E). Gesucht: Ein Matching (Paarung) maximaler Kardinalität.

Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 07 Beispiellösung Blatt 5

12. Graphen. Notation, Repräsentation, Traversieren (DFS, BFS), Topologisches Sortieren, Ottman/Widmayer, Kap ,Cormen et al, Kap.

Klausur Algorithmen und Datenstrukturen

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

ADS: Algorithmen und Datenstrukturen 2

Algorithmen I - Tutorium 28 Nr. 11

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

Graphalgorithmen Netzwerkalgorithmen. Laufzeit

Rückblick: Starke Zusammenhangskomponenten

Algorithmen & Datenstrukturen Midterm Test 2

Graphalgorithmen Minimale Spannbäume. Kruskal: Minimaler Spannbaum

Algorithmen und Datenstrukturen

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

5. Musterlösung. Problem 1: Vitale Kanten * ω(f) > ω(f ). (a) Untersuchen Sie, ob es in jedem Netzwerk vitale Kanten gibt.

Algorithmen und Datenstrukturen Tutorium Übungsaufgaben

Transkript:

U N S A R I V E R S A V I E I T A S N I S S Grundzüge von Algorithmen und Datenstrukturen, WS /6: Lösungshinweise zum 3. Übungsblatt Christian Hoffmann, Fabian Bendun Aufgabe 3. (a) Sei j i + = n die Größe des zu sortierenden Bereichs des Arrays. Wir zeigen durch Induktion über n, dass Crazy-Sort a[i..j] sortiert. Als Induktionsanfang haben wir bei n = 0, also i = j, die Beobachtung, dass nichts zu tun ist und der Algorithmus auch nichts tut. Ähnliches gilt für n =, also j = i + : entweder ist schon a[i] a[i + ] oder die ersten beiden Anweisungen stellen die richtige Reihenfolge dieser beiden Array-Einträge her. Sei nun n und die Aussage gezeigt für i j + < n (Induktionsvoraussetzung). Wir zeigen sie für i j + = n (Induktionsbehauptung). Nach Induktionsvoraussetzung sortieren die drei rekursiven Aufrufe den jeweiligen Teilbereich des Arrays. Wir betrachten die drei Bereiche A = a[i..i + k ], B = [i + k..i + k ] und C = [i + k..j]. Als As bezeichnen wir solche Elemente von a[i..j], die im Bereich A sein müssen, wenn a[i..j] sortiert ist. Analog sind Bs und Cs definiert. Als ABs bezeichnen wir solche Elemente von a[i..j], die im Bereich A oder im Bereich B stehen müssen, wenn a[i..j] sortiert ist. Wir zeigen nun: Nach dem ersten rekursiven Aufruf können im A-Bereich keine Cs stehen. Beweis: Es gibt insgesamt 3n ABs. Davon werden im ersten rekursiven Aufruf höchstens 3n nicht betrachtet. Also stehen nach dem ersten rekursiven Aufruf mindestens 3n Elemente links jedes Cs und füllen somit den kompletten A-Bereich. Also kann dort kein C-Element stehen. Analog zeigt man: Nach dem ersten rekursiven Aufruf können im B-Bereich keine As stehen. Damit wird im zweiten rekursiven Aufruf ein Bereich sortiert, der alle As enthält. Diese werden folglich in den A-Bereich einsortiert und füllen ihn komplett und nach Induktionsvoraussetzung in der richtigen Reihenfolge aus. Daher stehen in dem Bereich, der im dritten rekursiven Aufruf sortiert wird, nur Bs und Cs, die dann nach Induktionsvoraussetzung an die richtigen Plätze befördert werden. Die Bepunktung ist eine Orientierungshilfe, für was Punkte vergeben werden können. Insgesamt gibt es aber höchstens Punkte. Für volle Punktzahl muss insgesamt schlüssig und lückenlos argumentiert werden, die Details dürfen von dieser Musterlösung abweichen.

(b) T (n) sei die maximale Laufzeit von Crazy-Sort(a, i, j), wenn j i + n. Wenn n = 0 oder n =, wird nur eine feste Anzahl von Schritten ausgeführt. Also ist T (0), T () O(). Die Größe des dem ersten rekursiven Aufruf übergebenen Teilbereichs ist (j k) i + = n n 3 = 3n. Ähnlich zeigt man auch, dass die Größen der den beiden anderen rekursiven Aufrufen übergebenen Array-Teilbereiche 3n sind und dass die beiden zu tauschenden Teilbereiche 3 n Elemente umfassen. Also gilt ( ) T (n) = 3T 3 n + O(n). Wir wenden nun das Master-Theorem an. Wir haben b = 3 und a = 3. Es ist log b a =.09... und O(n) O(n log b a ). Also gilt T (n) O(n log b a ) O(n. ).

0 6 3 8 0 Abbildung : Original 6 - - 3 8 Abbildung : After insert 0-6 - 3 8 Abbildung 3: After double rotation 0-6 - 3-8 - 9 Abbildung : Nach einfügen 9 0-6 - 3 8 9 Abbildung : Nach rotation 0-3 8 9 0 Abbildung 6: Nach löschen von 6 3-3 9 Abbildung : Nach löschen von 8

Aufgabe 3. Aufgabe 3.3 a) Entfernt man von einem Binomial-Baum mit i Knoten die Wurzel, so zerfällt dieser in i Binomial-Bäume mit jeweils,,,..., i Elementen. Ist T heap-geordnet, so ist sind auch diese Bäume heap-geordnet. Falls m = i, so ist nichts zu tun. Sonst sei m = i j= b j j die Binärdarstellung von m. Die eine Menge besteht aus den Bäumen mit b i =, die andere aus den übrigen plus die entfernte Wurzel.. Nur der Baum mit einem Knoten kommt zweimal vor.. b) Der Algorithmus ergibt sich aus der Aufteilung aus a). Dies sind fast schon Binomialheaps. Falls in einer Menge zweimal der Baum mit einem Knoten vorkommt, so kann dies mit BH-union bereinigt werden. Für die Aufteilung werden i = log n viele Bäume je einmal betrachtet. BH-Union braucht ebenfalls O(log n) Zeit. c) Wir gehen die Bäume im Heap der Reihe nach durch und summieren die Anzahl der Knoten auf, bis wir mehr als r haben. Sei m die erreichte Anzahl und i die Anzahl der Knoten im letzten Baum T. T teilen wir in zwei Heaps B und B mit s := r (m i ) bzw. i s Knoten auf. Die Bäume vor T vereinigen wir mit B, die danach mit B. (3 Punkte) Insgesamt sind log n Bäume im Heap. Das Aufteilen von T braucht O(log n) Zeit nach b), das Vereinigen ebenfalls. Aufgabe 3. a) Ein optimales Schedule von I,..., I j verwendet entweder I j oder nicht. Dann ist Opt(j) = Opt(j ). Oder es verwendet I j. Dann ist dieses Schedule ohne I j ein optimales Schedule von I,..., I p(j). Also gilt Opt(j) = Opt(p(j)) + w j. Insgesamt gilt Opt(j) = max{opt(j ), Opt(p(j)) + w j }. b) Eine For-Schleife. ( Punkte) Korrektheit unmittelbar aus b), Laufzeit ist O(n) c) Setze ein Flag a[j] =, falls Opt(j) = Opt(p(j)) + w j. Gehe nun durch a rückwärts. Falls a[j] = 0, gehe zu a[j ]. Falls a[j] =, gebe j aus und mache mit a[p(j)] weiter. Aufgabe 3. (a) Sei T ein minimaler Spannbaum von G. Wir nehmen an, dass alle Kanten minimalen Gewichts, die V und V verbinden, nicht zu T gehören und konstruieren einen Spannbaum T mit kleinerem Gewicht als T, was ein Widerspruch ist. Sei dazu e = {x, y} eine Kante minimalen Gewichts unter denen, die V und V

verbinden, ohne Einschränkung sei x V und y V. G sei G eingeschränkt auf die Kanten aus T. Da G zusammenhängend ist, gibt es dort einen Weg von x nach y. Mindestens eine Kante, sagen wir f = {a, b}, dieses Weges verbindet V mit V. Wir behaupten, dass T = (T \ {f}) {e} ebenfalls ein Spannbaum von G ist. Dann ist dies der Widerspruch: w(t ) = w(t ) w(f) + w(e) < w(t ) (da w(f) > w(e), weil e minimales Gewicht unter den V und V verbindenden Kanten hat, aber keine solche minimale Kante in T ist, aber f T ). Zu zeigen bleibt also, dass T ein Spannbaum von G ist. Dazu zeigen wir, dass a und b in T verbunden sind. Damit kann dann jeder Weg in T, der f benutzt, durch einen Weg in T ersetzt werden. Sei xv... v l abu... u r y der Weg von x nach y in T. Dann ist v l... v xyu r... u b ein Weg von a nach b in T. (3 Punkte) (b) Wir betrachten den Kreis mit vier Knoten und vier Kanten e, e, e 3, e, die alle Gewicht haben. Dann ist T = {e, e, e 3 } ein minimaler Spannbaum. Wenn wir das Gewicht von e auf ändern, ist T nicht mehr minimal, weil {e, e 3, e } kleineres Gewicht hat. (c) Hier funktioniert jedes Beispiel, in dem e eine Schnittkante ist, also eine Kante, so dass G ohne e nicht mehr zusammenhängend ist. Dann muss jeder Spannbaum von G, e enthalten. Beispiel: Graph, der nur aus einer Kante e und ihren Endknoten besteht. (d) Seien V und V die zwei Komponenten, in die G zerfällt, wenn wir auf Kanten von T einschränken und e entfernen. Nach Aufgabe (a) bleibt T bei Gewichtsänderung von e ein minimaler Spannbaum dann und nur dann, wenn e unter den von V nach V führenden Kanten eine Kante minimalen Gewichts bleibt. ( : Wenn T minimaler Spannbaum bleibt, muss e, da es die einzige V -V -Kante in T ist, nach (a) minimales Gewicht unter den V -V -Kanten haben. : Sei T ein Spannbaum. Wenn er e enthält, gilt sowohl vor als auch nach der Gewichtsänderung w(t ) w(t ). Wenn er e nicht enthält, enthält er eine andere V -V -Kante f. Es gilt w(t \{f}) w(t \{e}), weil T minimaler Spannbaum vor der Gewichtsänderung war. Also gilt nach der Gewichtsänderung, da dann immer noch w(f) w(e): w(t ) = w(t \{f})+w(f) w(t \ {e}) + w(e).) ( Punkte) Wenn es keine Kante außer e gibt, die V mit V verbindet, bleibt T bei jeder Gewichtsänderung von e ein minimaler Spannbaum. Ansonsten gilt: T ist kein minimaler Spannbaum mehr genau dann, wenn das Gewicht von e um mehr als min w(f) w(e) f E, f e f verbindet V und V erhöht wird. Diesen Wert bestimmt der folgende Algorithmus. (3 Punkte für den Algorithmus)

: Bestimme mit Breitensuche die Komponenten V, V, in die G zerfällt, wenn die Kantenmenge auf die Kanten von T ohne e eingeschränkt wird : := 3: for f E do : if f e f verbindet V und V w(f) w(e) < then : := w(f) w(e) 6: if = then return T bleibt minimaler Spannbaum bei jeder Gewichtsänderung von e : elsereturn T nicht mehr minimaler Spannbaum, sobald w (e) > w(e) + 6