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

Größe: px
Ab Seite anzeigen:

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

Transkript

1 Prof. Dr. Johannes Blömer Paderborn, den. August 005 Musterlösungen zu Datenstrukturen und Algorithmen SS 005 Blatt, Aufgabe 3 Wir schreiben zunächst alle Funktionen zur Basis. Dann erhalten wir 3 n log(n) = log(3)n log(n), n log(n) = log(n) /, n 10 = 10 log(n), 5 n/ = log(5)n/. Benutzten wir nun die Sätze.10 und.11 aus der Vorlesung so sehen wir, dass von den Funktionen im Exponenten log(3)n log(n) am schnellsten wächst. Dann kommt log(5)n/, dann log(n) / und schließlich 10 log(n). Damit wächst von den ursprünglichen Funktionen 3 n log(n) am schnellsten. Gefolgt von 5 n/, n log(n) und n 10, in dieser Reihenfolge. Blatt, Aufgabe 4. Diese Aussage ist falsch. Um dieses einzusehen, betrachten wir das Beispiel f(n) = n und g(n) = n/. Damit gilt dann f(n) = O(g(n)). Würden nun c, n 0 N existieren, so dass f(n) c g(n) für alle n n 0, so würde hieraus folgen, dass n/ c für alle n n 0. Dieses trifft sicherlich nicht zu. Blatt 3, Aufgabe 1(c) Hier sind zunächst die beiden Invarianten. Invariante Zeilen 3-5: Vor Durchlauf der Schleife mit Index j (und äußerem Index i) ist A[k] ein Minimum der im Teilarray A[i..j 1] gespeicherten Zahlen. Invariante Zeilen 1-6: Vor Durchlauf der Schleife mit Index i stehen in A[1..i 1] die i 1-kleinsten Eingabezahlen in aufsteigend sortierter Reihenfolge. Die restlichen Eingabezahlen stehen in A[i..length[A]]. Für beide Invarianten zeigen wir Initialisierung, Erhaltung und Terminierung. Dabei werden wir die Terminierung der Invariante für die Zeilen 3-5 benutzen, um die Erhaltung der Invariante in Zeilen 1-6 zu zeigen. Die Terminierung der Invariante in Zeilen 1-6 wird dann die Korrektheit des Algorithmus Selection-Sort beweisen. Initialisierung Invariante Zeilen 3-5: Vor dem ersten Durchlauf mit Index j = i + 1 ist k = i. Weiter ist A[i] sicherlich das Minimum der im Teilarray A[i..i] gespeicherten Zahlen. Erhaltung Invariante Zeilen 3-5: Angenommen die Invariante gilt vor Durchlauf der Schleife mit Index j. Dann ist also A[k] das Minimum der im Teilarray A[i..j 1] gespeicherten Zahlen. Nun wird aber in den Zeilen 4,5 dieses Minimum mit dem nächsten Element A[j] verglichen und im Fall A[j] < A[k] der Index k durch j ersetzt. Damit ist sicher gestellt, dass vor Durchlauf der Schleife mit Index j + 1 in A[k] das Minimum der Zahlen im Teilarray

2 A[i..j] gespeichert ist. Terminierung Invariante Zeilen 3-5: Am Ende der Schleife ist in A[k] das Minimum der Zahlen im Teilarray A[i..length(A)] gespeichert. Nun zur Invariante für Schleife in den Zeilen 1-6. Initialisierung Invariante Zeilen 1-6: Der erste Index ist i = 1. Vor dem Durchlauf mit diesem Index ist das Array A[1..i 1] leer. Die Aussage der Invariante ist damit korrekt. Erhaltung Invariante Zeilen 1-6: Angenommen die Invariante gilt vor Durchlauf der Schleife mit Index i. Damit stehen in A[1..i 1] die i 1-kleinsten Eingabezahlen in aufsteigend sortierter Reihenfolge. Die restlichen Eingabezahlen stehen in A[i..length[A]]. Nun wissen wir aber aus der Terminierung der Schleife in den Zeilen 3-5, dass in A[k] nun das Minimum der Zahlen im Array A[i..length[A]] gespeichert ist. Dieses wird nun in Zeile 6 mit dem Eintrag in Position i getauscht. Damit enthält vor Durchlauf mit Index i + 1 das Array A[1..i] die i-kleinsten Eingabezahlen in aufsteigend sortierter Reihenfolge. Außerdem stehen die restlichen Eingabezahlen im Teilarray A[i + 1..length(A)]. Terminierung Invariante Zeilen 1-6: Vor Durchlauf der Schleife mit Index length(a)+1 stehen nun die Eingabezahlen im Array A[1..length(A)], also des ganzen Arrays, aufsteigend sortiert in A[1..length(A)]. Damit ist Selection-Sort ein korrekter Sortieralgorithmus. Blatt 4, Aufgabe 3(a) Wie in der Aufgabe gefordert, führen wir einen Induktionsbeweis. Für n = 1, folgt die Korrektheit des Algorithmus sofort aus den Zeilen 1-4, insbesondere Zeilen 1 und. Dies ist der Induktionsanfang. Nun zum Induktionsschluss. Die Induktionsvoraussetzung ist, dass Stooge-Sort für alle Eingabegrößen m < n korrekt arbeitet. Nun wollen wir zeigen, dass Stooge-Sort auch für Eingabegröße n korrekt ist. Die Menge I j, j = 1,, 3 enthalte nun alle Eingabezahlen, die bei einer korrekten Sortierung im j-ten Drittel der sortierten Folge stehen. Wir zeigen für j = 1,, 3, dass Stooge-Sort die Zahlen in I j an die richtige Position bringt. Dabei können wir nach Induktionsvoraussetzung annehmen, dass jeder der rekursiven Aufrufe von Stooge-Sort in den Zeilen 6-8 eine korrekte Sortierung der entsprechenden Teilfolge liefert. Sie zunächst j = 1. Alle Elemente aus I 1 die zu Beginn im ersten oder zweiten Drittel von A stehen werden durch den Aufruf von Stooge-Sort in Zeile 6 in das erste Drittel verschoben. Durch den Aufruf von Stooge-Sort in Zeile 7 werden alle Elemente aus I 1, die zu Beginn im letzten Drittel von A standen in das zweite Drittel verschoben. Schließlich werden diese Elemente dann durch den letzten Aufruf von Stooge-Sort in Zeile 8 in das erste Drittel verschoben. Außerdem sind beim Aufruf von Stooge-Sort in Zeile 8 alle Elemente aus I 1 im ersten oder zweiten Drittel. Damit wird Stooge-Sort in Zeile 8 die Elemente aus I 1 nicht nur alle ins erste Drittel verschieben, sondern die Elemente aus I 1 werden auch in der richtigen Reihenfolge im ersten Drittel stehen. Für j =, 3 argumentiert man ähnlich. So stehen nach dem ersten Aufruf von Stooge-Sort in Zeile 6, alle Element aus I 3 im zweiten oder dritten Drittel. Diese werden dann durch den Aufruf von Stooge-Sort in Zeile 7 richtig sortiert in das letzte Drittel des Arrays A geschoben. Weiter stehen nach den ersten beiden Aufrufen von Stooge-Sort alle Elemente aus I in den ersten beiden Dritteln. Wie bei den Elementen aus I 1 werden diese Elemente dann durch den Aufruf von Stooge-Sort in Zeile 8 richtig sortiert in das zweite Drittel des Arrays A

3 geschoben. Blatt 4, Aufgabe 4 Es gilt T (n) 3T (n/) + n für n > 1. Gemäß der Rekursionsgleichung können wir T (n/) abschätzen durch 3T (n/4) + (n/). Damit erhalten wir T (n) 3(3T (n/4) + n /4) + n = 9T (n/4) + 3n /4 + n. Nun können wir T (n/4) abschätzen durch 3T (n/8) + (n/4) und erhalten T (n) 9(3T (n/8) + n /16) + n /4n = 7T (n/8) + 9n /16 + 3n /4 + n. Fahren wir so fort, erhalten wir für allgemeines i die Abschätzung i 1 T (n) 3 i T (n/ i ) + n (3/4) j. Nun nehmen wir zur Vereinfachung an, dass n eine Zweierpotenz ist. Dann ist log(n) eine natürliche Zahl. Setzen wir dann in der Abschätzung oben i = log(n), so erhalten wir Nun gilt T (1) = c. Außerdem gilt T (n) 3 log(n) T (1) + n j=0 log(n) 1 j=0 (3/4) j. log(n) 1 j=0 (3/4) j = 1 (3/4)log(n) 1/4 4, da es sich um eine geometrische Summe handelt. Da 3 log(n) = n log(3) < n folgt T (n) cn log(3) + 4n = O(n ). Blatt 5, Aufgabe Wir zeigen durch vollständige Induktion, dass für jedes beliebige a c die Abschätzung T (n) an 3 gilt. Für n = 1 ist Nichts zu zeigen. Nun zum Induktionsschluss. Induktionsvoraussetzung ist, dass T (k) ak 3 für alle k < n gilt. Wir wollen zeigen, dass T (n) an 3 für n. Wir betrachten nun für 1 k n 1 den Ausdruck T (k 1) + T (n k) + cn. sowohl auf T (k 1) als auch auf T (n k) können wir unsere Induktionsvoraussetzung anwenden. damit erhalten wir T (k 1) + T (n k) + n a(k 1) 3 + a(n k) 3 + cn. Nun benutzen wir, dass für alle s, t > 1 gilt (s + t) 3 s 3 + t 3. Damit ist Nun gilt für n a(k 1) 3 + a(n k) 3 + cn a(n 1) 3 + cn. a(n 1) 3 + cn = an 3 3an + 3an a + cn = an 3 an an + 3an a + cn an 3 4an + 3an an 3.

4 Wobei wir n und a c im Übergang von der. zur 3. Zeile ausgenutzt haben. Damit gilt T (n) max {T (k 1) + T (n k) + 1 k n 1 cn } an 3. Damit ist T (n) = O(n 3 ). Blatt 5, Aufgabe 4 Wir betrachten den folgenden Algorithmus General-Median, der den Algorithmus Median als Unteralgorithmus benutzt. General-Median(A, i): 1. Berechne mit Hilfe von Median den Median A[z] des Arrays A.. Partitioniere die Elemente des Arrays A um A[z] herum. 3. Falls i = n+1 n+1, Ausgabe A[z]. Falls i <, finde rekursiv den i-ten Median in den Einträgen < A[z]. Falls i > n+1 n+1 finde rekursiv den (i )-ten Median in den Einträgen > A[z]. Für den zweiten Schritt nehmen wir hierbei den Algorithmus Partition, den wir bei Quicksort kennen gelernt haben. Zunächst zeigen wir die Korrektheit von General-Median. Dabei gehen wir natürlich davon aus, dass der Algorithmus Median korrekt arbeitet. Damit ist das im ersten Schritt berechnete Element A[z] der Median des Eingabearrays A. Wir zeigen die Korrektheit nun mit vollständiger Induktion über die Länge n des Arrays. Ist n = 1, so wird im 3. Schritt immer A[1] ausgegeben. Dies ist für n, i = 1 auch die korrekte Antwort. Sei nun n. Als Induktionsvoraussetzung haben wir, dass für alle m < n und alle i, 1 i m der Algorithmus General-Median korrekt ist. Wir wollen zeigen, dass dann General- Median für alle Arrays der Größe n und alle 1 i n ebenfalls korrekt ist. Die Korrektheit für diese Fälle folgt nun aus den folgenden Beobachtungen: Ist i = n+1, so folgt die Korrektheit unmittelbar aus der Korrektheit von Median und der ersten Abfrage im 3. Schritt. Ist i < n+1, so ist der i-te Median von A der i-te Median des im. Schritt umsortierten Teilarrays A[1.. n+1 ]. Dies folgt unmittelbar aus der Definition des i-ten Medians. In diesem Fall folgt die Korrektheit von General-Median aus der Korrektheit von Median, der zweiten Abfrage im 3. Schritt und der Induktionsvoraussetzung. Ist i > n+1 n+1, so ist der i-te Median von A der i -te Median des im. Schritt umsortierten Teilarrays A[ n n]. Dieses gilt, denn alle Elemente im umsortierten Teilarray A[1.. n+1 ] sind dann auf jeden Fall kleiner als dieser Median. In diesem Fall folgt die Korrektheit von General-Median wiederum aus der Korrektheit von Median, der zweiten Abfrage im 3. Schritt und der Induktionsvoraussetzung. Nun noch die Laufzeitanalyse. Sei cn eine obere Schranke für die Laufzeit von Median bei einem Array der Länge n. Auch für Partition aus dem Abschnitt über Quicksort wissen wir, dass es lineare Laufzeit besitzt. Wir nehmen an, dass cn auch eine obere Schranke für die

5 Laufzeit von Partition bei einem Array der Größe n ist. Dann gilt für die Laufzeit T (n) von General-Median die folgende Rekursionsformel T (n) T (n/) + cn. Dabei haben wir zur Vereinfachung angenommen, dass n durch teilbar ist. Die Formel gilt, da im 3. Schritt der Algorithmus rekursiv entweder mit dem Array A[1.. n+1 ] 1] oder mir dem Array A[ n+1 ] + 1..n] aufgerufen wird. Beide Arrays habe Größe höchstens n/. Schließlich gilt T (1) = a für eine Konstante a. Damit erhalten wir für T (n) folgende Kette von Ungleichungen (wir nehmen zur Vereinfachung an, dass n eine Zweierpotenz ist): T (n) T (n/) + cn. T (n/4) + cn + cn T (n/8) + c/n + cn + cn log(n) 1 T (1) + cn (1/) i. i=0 Nun ist die Summe in der letzten Abschätzung eine geometrische Summe, die durch beschränkt ist. Außerdem war T (1) a für eine Konstante a. Damit ist T (n) = O(n). Blatt 6, Aufgabe a) Für den Algorithmus k-merge benutzen wir einen min-heap H, der immer genau k Elemente speichert. Jedes der sortierten Teilarrays T j, j = 1,..., k, erweitern wir um eine Dummyelement mit Wert. Der min-heap enthält zu jedem Zeitpunkt genau ein Element aus jedem der Teilarrays. Zu jedem Teilarray speichern wir noch einen Index n j, der zu Beginn für alle Teilarrays mit 1 initialisiert wird. Zu jedem Element im min-heap H speichern wir jeweils noch den Index j des Arrays, aus dem das Element stammt. Initialisiert wird der min-heap mit den ersten Elementen der Teilarrays. Dann wiederholen wir folgenden Schritte für i = 1,..., n. 1. Kopiere das minimale Element H[1] des min-heaps H in A[i].. Stammt H[1] aus dem Teilarray T j und ist n j = l, so ersetze H[1] durch T j [l + 1] und erhöhe n j um Benutze min-heapify(h, 1), um aus H wieder einen min-heap zu machen. Dabei ist min-heapify das Analogon von max-heapify für min-heaps. Mit diesem Algorithmus wird jeweils das i-kleinste Element der Eingabezahlen gefunden. Damit löst der so beschriebene Algorithmus unser Merge-Problem für k Teilarrays. Für jedes i müssen dabei zwei Elemente kopiert werden. Außerdem muss einmal min- Heapify aufgerufen werden. Da der Heap immer k Element besitzt, kostet jeder Aufruf von min-heapify Zeit O(log(k)) (wie bei max-heapify). Da außerdem die Initailisierung in Zeit O(k) erfolgen kann (durch Build-Min-Heap wie bei Build-Max-Heap), ist die Gesamtlaufzeit des oben beschriebenen Algorithmus O(log(k)n).

6 b) Für die Laufzeit T (k, n) von k-merge-sort bei einem Array der Größe n erhalten wird die folgende Rekursion T (k, n) kt (k, n/k) + c log(k)n. Dabei ist c eine Konstante, groß genug, um die Laufzeit von k-merge durch c log(k)n abschätzen zu können. Außerdem gilt T (k, 1) a, für eine Konstante a. Lösen wir nun die Rekursionsgleichung auf unsere übliche Art und nehmen wir zur Vereinfachung an, dass n eine Potenz von k ist, erhalten wir T (k, n) k log k (n) T (k, 1) + c log(k)n(log k (n) 1) an + cn log(n). Wir erhalten als Abschätzung für die Laufzeit T (n) = O(n log(n)). Blatt 7, Aufgabe Wir zeigen durch einen Widerspruchsbeweis, dass es einen solchen Algorithmus A nicht geben kann. Der Widerspruch wird dabei zur unteren Schranke von Ω(n log(n)) für Vergleichssortierer sein. Angenommen wir haben ein zu sortierendes Array B der Größe n. Um dieses mit Hilfe des angenommenen Algorithmus A zu sortieren, gehen wir folgendermaßen vor. 1. Mit Build-Max-Heap errichte auf B einen max-heap.. Lege ein Hilfsarray C der Größe n an. 3. Für i = n,..., 1 wiederhole folgende Aktion. Wende auf B den Algorithmus A an und schreibe das entfernte Element in C[i]. 4. Kopiere C nach A. Nach Annahme über A ist dieses ein korrekter Sortieralgorithmus. Er ist sogar ein Vergleichssortierer, da auch Build-Max-Heap nur die für einen Vergleichssortierer zulässigen Operationen benutzt. Schauen wir uns nun die Laufzeit dieses Vergleichssortierers an. Build-Max-Heap benötigt wie in der Vorlesung gezeigt Zeit O(n). Das Anlegen von C und das abschließende kopieren von C nach A benötigen ebenfalls Zeit O(n). Schließlich benötigen wir nach Annahmen über die Laufzeit von A auch für die Schleife im 3. Schritt des Algorithmus insgesamt nur Zeit O(n), für jedes i nämlich Zeit O(1). Damit haben wir mit Hilfe von A einen Vergleichssortierer mit Laufzeit O(n) konstruiert. Da es einen solchen Algorithmus aufgrund der unteren Schranke von Ω(n log(n)) für die Laufzeit von Vergleichssortierern nicht gibt, kann ein Algorithmus A mit den in der Aufgabe beschriebenen Eigenschaften nicht existieren. Blatt 8, Aufgabe 1 Man kann z.b. die folgende Lösung verwenden. Ein leerer Stack S wird als eine leeren Queue Q initialisiert. Eine Push-Operation des Stacks wird an ein Enqueue-Operation der Queue delegiert, d.h.: push(s, x): 1 enqueue(q, x)

7 Da die Queue-Operationen Laufzeit O(1) haben, hat somit auch push Laufzeit O(1). Die Delegation der Pop-Operation an die Queue benötigt dann aber einen größeren Aufwand. Dazu kann zunächst ein spezielles Dummy-Element in die Queue eingefügt werden. Anschliessend werden so lange die Elemente der Queue entnommen und und direkt wieder eingefügt, bis das Dummy-Element am Kopf der Schlange auftaucht. Das zuletzt entnommene Element wird dann nicht wieder eingefügt, sondern ausgegeben. pop(s): 1 if empty(q) then return Nil enqueue(q, Dummy) 3 x dequeue(q) 4 while front(q) Dummy 5 do enqueue(q, x) 6 x dequeue(q) 7 dequeue(q) 8 return x Da jedes der n Elemente maximal einmal entnommen und eingefügt wird, ergibt sich eine Laufzeit von O(n). Selbstverständlich kann der Stack auch analog zum oben beschriebenen implementiert werden, so dass push Laufzeit O(n) und pop Laufzeit O(1) hat. Blatt 9, Aufgabe 3 Wir beweisen die Aussage durch einen Widerspruchsbeweis. Wir nehmen also an, dass es keine Teilmenge K des Universums der Größe mindestens n/m gibt, die alle auf denselben Hashwert abgebildet werden. Dieses bedeutet, dass es zu jedem der m möglichen Hashwerte höchstens n/m 1 viele Urbilder im Universum gibt. Damit gibt es dann aber höchstens m(n/m 1) < n Elemente im Universum. Dieses ist es ein Widerspruch zur Voraussetzung, dass U Größe n besitzt. Blatt 10, Aufgabe Als Datenstruktur bietet sich ein Rot-Schwarz-Baum oder ein ähnlicher balancierter binärer Suchbaum mit Höhe O(log n) an. Die Operationen Insert und Delete werden bereits wie in der Vorlesung definiert in Laufzeit O(log n) unterstützt. Als zusätzliches Satellitendatum wird zu jedem Knoten ein Wert left-size[x] gespeichert. Dieser Wert soll stets die Anzahl der Knoten im linken Teilbaum von x enthalten. Dazu werden neue Knoten welche ja stets Blätter sind mit dem Wert left-size[x] = 0 initialisiert. Da Änderungen von left-size nur die Knoten auf dem Suchpfad zur Einfüge- bzw. Löschposition betreffen, kann die Aktualisierung mit konstantem Aufwand in jedem der O(log n) Pfadknoten in die Operationen Insert und Delete eingebaut werden. Die Modifikationen ändern die asymptotische Laufzeit von Insert und Delete also nicht. Auch die Rotation des Rot-Schwarz-Baums, die in RB-Insert-Fixup auftaucht, lässt sich leicht so abändern, dass left-size erhalten bleibt und sich die Laufzeit von RB-Insert-Fixup asymptotisch nicht ändert. Schließlich muss noch Count in Laufzeit O(log n) realisiert werden. Bezeichne LessThan einen rekursiven Algorithmus, welcher die Anzahl der Elemente im Rot-Schwarz-Baum bestimmt, die kleiner k sind.

8 LessThan(k, x): 1 if x = Nil then return 0 else if k < key[x] then return LessThan(k,left(x)) 3 else return left-size[x] LessThan(k,right(x)) Dann kann Count wie folgt realisiert werden. Count(a, b): 1 x LessThan(a, root[t ]) y LessThan(b, root[t ]) 3 return y x Da LessThan den Rot-Schwarz-Baum maximal einmal von der Wurzel bis zu einem Blatt durchläuft, beträgt dessen Laufzeit O(log n). Count verwendet nun im wesentlichen nur zwei Aufrufe von LessThan, womit eine Laufzeit von O(log n) für Count folgt. Blatt 11, Aufgabe Um diese Aufgabe zu lösen, definieren wir zunächst zu jedem gerichteten Graphen G = (V, E) den Graphen G wie folgt. Die Knotenmenge von G ist die Knotenmenge V von G. Weiter ist die Kantenmenge E von G definiert durch E := {(u, v) : (v, u) E}. Wir erhalten also G aus G, in dem wir die Richtung aller Kanten in G umdrehen. Wir können auch G effizient aus G berechnen. Hierzu legen wir zunächst für jeden Knoten u V eine neue Adjazenzliste Adj[u] an. Dann durchlaufen wir die Adjazenzlisten Adj[v] für den Graphen G. Ist nun u Adj[v], so fügen wir v zur Adjazenzliste Aadj[u] hinzu. Man sieht, dass auf diese Weise die Adjazenzlistendarstellung von G in Zeit O( V + E ) aus der Adjazenzlistendarstellung von G berechnet werden kann. Als nächstes erinnern wir uns, dass wir mit Hilfe einer Breitensuche in einem (gerichteten) Graphen G alle von einem Knoten v des Graphen aus erreichbaren Knoten berechnen können. Insbesondere können wir mit einer Breitensuche feststellen, ob alle Knoten eines Graphen von einem Knoten v aus erreichbar sind. Die Zeit, die hierfür benötigt wird, ist die Laufzeit für eine Breitensuche, also O( V + E ), wobei G = (V, E). Nun können wir den Algorithmus Senkensuche beschreiben, der feststellt, ob ein gerichteter Graph eine Senke besitzt. Eingabe für den Algorithmus ist ein gerichteter Graph G = (V, E) in Adjazenzlistendarstellung. 1. Konstruiere aus G den Graphen G.. Für alle u V Senkensuche a) Entscheide mit einer in v gestarteten Breitensuche in G, ob jeder Knoten u V im Graphen G von v aus erreichbar ist. b) Ist jeder Knoten u von v aus erreichbar, return G besitzt Senke, nämlich v. 3. return G besitzt keine Senke.

9 Zunächst zeigen wir die Korrektheit des Algorithmus. Hierzu beobachten wir zunächst, dass v genau dann eine Senke in G ist, wenn jeder Knoten u in G von v aus erreichbar ist. Dieses folgt unmittelbar aus der Definition von G. Wir müssen daher noch zeigen, dass die Schritte und 3 von Algorithmus Senkensuche korrekt entscheiden, ob es in G einen Knoten v gibt, von dem aus alle Knoten u erreichbar sind. Gibt es nun einen solchen Knoten v, so wird diese beim Durchlauf des zweiten Schritts mit v als Startknoten der Breitensuche festgestellt. Dann ist die Ausgabe in Schritt b), dass G eine Senke besitzt. Besitzt hingegen G keinen Knoten, von dem aus alle Knoten erreichbar sind, so wird es in Schritt b) für keinen Knoten v zu einer Ausgabe kommen. Die Ausgabe ist dann im 3. Schritt, dass G keine Senke besitzt. Die Ausgabe ist also in jedem Fall korrekt. Nun zur Laufzeit. Der erste Schritt benötigt, wie oben angemerkt, Zeit O( V + E ). Der dritte Schritt benötigt konstante Zeit. Nach den Bemerkungen, die wir oben über die Breitensuche gemacht haben, benötigen wir für jeden Knoten v für die Schritte a) und b) Zeit O( V + E ). Damit benötigt der. Schritt für alle Knoten zusammen Zeit O( V ( V + E )) = O( V + V E ). Insgesamt also ist die Laufzeit durch O( V + V E ) gegeben. Dies beweist die Aussage der Aufgabe. Blatt 1, Aufgabe Wir zeigen die drei Aussagen jeweils durch einen Widerspruchsbeweis. a) Wir zeigen, dass G einen Kreis besitzt, falls jeder Knoten Ausgangsgrad > 0 oder jeder Knoten Eingangsgrad > 0 hat. Da die Beweise für Ausgangs- bzw. Eingangsgrad sehr ähnlich sind, führen wir den Beweis nur für den Ausgangsgrad. Sei hierzu V = n und v 1 ein beliebiger Knoten des Graphen. Da v 1 Ausgangsgrad > 0 hat, gibt es einen Knoten v, so dass (v 1, v ) E. Dann gibt es weiter einen Knoten v 3, so dass (v, v 3 ) E. Dabei muss v 3 v 1, denn sonst haben wir einen Kreis. Allgemein können wir unter der Voraussetzung, dass jeder Knoten Ausgangsgrad > 0 besitzt, zu jedem i eine Folge von Knoten v 1, v, v 3,... konstruieren, so dass (v i 1, v i ) E. Ist aber i > n, so muss es zwei Indizes k, l, l > k, geben mit v k = v l. Dann aber ist (v k, v k+1 ), (v k+1, v k+ ),..., (v l 1, v l ) ein Kreis in G. b) Wir zeigen die Aussage sogar für jeden Spannbaum, nicht nur minimalen Spannbaum. Sei also T ein Spannbaum, der die Kante e nicht enthält. Sei e = (u, v). Da T ein Spannbaum ist, gibt es in T einen Pfad P von u nach v. Der Pfad enthält die Kante e nicht, da T die Kante e nicht enthält. Dann aber ist P zusammen mit e ein Kreis in G. Dieses widerspricht der Annahme, dass e auf keinem Kreis in G enthalten ist. Also kann es den Spannbaum T, der e nicht enthält, nicht geben. c) Angenommen, es gibt zwei unterschiedliche Spannbäume T 1, T mit den Kanten e 1,..., e n 1 und f 1,..., f n 1. Wir nehmen, dass die Kanten so nummeriert sind, dass w(e 1 ) < w(e ) < < w(e n 1 ) und analog für die Kanten f i von T. Sei nun k der kleinste Index, für den e k f k gilt. Weiter nehmen wir an, dass w(f k ) > w(e k ). Nach Definition von k kann es keinen Index j < k mit f j = e k geben. Für alle Indizes j > k gilt w(f j ) > w(f k ) > w(e k ). Also gilt auch für alle Indizes j > k, dass f j e k. Damit kann e k nicht unter den kanten in T auftauchen. Wir betrachten nun den Spannbaum T erweitert um die Kante e k. In diesem Teilgraphen von G muss es nun einen Kreis geben. Da T alleine keinen Kreis enthält, muss an diesem Kreis e k beteiligt sind. Da T 1 keinen Kreis enthält, kann der Kreis nicht ausschließlich Kanten aus e j = f j, j = 1,..., k 1 enthalten. Also gibt es in dem Kreis eine Kante f j, j > k. Wir entfernen nun aus T

10 diese Kante f j und fügen e k hinzu. Dieses liefert einen neuen Spannbaum der echt kleineres Gewicht als T hat, denn w(e k ) < w(f j ) (wegen j > k und w(f k ) > w(e k )). Dieses ist aber ein Widerspruch zur Annahme, dass T ein minimaler Spannbaum ist. Damit kann es keine zwei unterschiedlichen minimalen Spannbäume geben. Blatt 13, Aufgabe 1 Sei I = {i 1,..., i r } die Indexmenge der angefahrenen Tankstellen bei einer optimalen Lösung. Sei J = {j 1,..., j s } die Indexmenge der angefahrenen Tankstellen bei einer gierigen Lösung. Wir müssen zeigen r = s. Da I zu einer optimalen Lösung gehört, gilt natürlich r s. Wir müssen also den Fall s > r ausschließen. Im Fall I = J, folgt natürlich sofort r = s. Wir können also annehmen, dass I J. Dann sei k, 1 k r, der kleinste Index mit i k j k. Das heisst, beim k-ten Tankstopp weichen die optimale und die gierige Lösung zum ersten Mal voneinander ab. Aufgrund der Definition der gierigen Strategie muss dann i k < j k gelten, denn vom k 1-ten Tankstopp t ik 1 = t jk 1 kann nicht weiter als bis zu t jk gefahren werden. Mit demselben Argument sieht man dann aber, dass i l j l fü alle l > k gilt. Insbesondere gilt i r j r. Das aber heisst, dass vom Tankstopp t jr das Ziel bereits erreicht werden kann. Denn dieses gilt für t ir und diese Tankstelle liegt vor t jr, da i r j r. Damit kann der Fall s > r nicht auftreten. Blatt 13, Aufgabe 3 Wir betrachten den Graphen in Abbildung 1. Abbildung 1: Graph für Aufgabe 13.3 Der Algorithmus Gierige-Überdeckung wird hier als erstes den Knoten c auswählen. Dann muss er aber noch aus jeder der drei Kanten (a, 1), (b, ), (d, 3) jeweils einen Knoten auswählen. Gierige-Überdeckung liefert also eine Überdeckung der Größe 4. Nun ist aber die Knotenmenge {1,, 3} bereits eine Überdeckung der Größe 3. Für diesen Fall liefert Gierige-Überdeckung also keine optimale Lösung.

11 Blatt 14, Aufgabe 1. Wir zeigen die Aussagen durch vollständige Induktion über l. Der Induktionsbeginn ist für l = 0. Erlauben wir auf einem Pfad von u nach v keine Kante, so ist nur u selber überhaupt erreichbar. Der einzige Pfad der Länge 0 von u nach u ist dann der leere Pfad, also der Pfad ohne Kanten. Damit ist für l = 0 die Aussage bewiesen. Nun zum Induktionsschluss für l > 0. Nach Induktionsvoraussetzung liefert die Formel in Teil b) dieser Teilaufgabe für l 1 und alle w V die korrekte Anzahl von Pfaden der Länge l 1 von u nach w. Für jeden Knoten v V können wir nun jeden Pfad der Länge l von u nach v eindeutig in zwei Teile aufteilen. Zunächst führt ein solcher Pfad auf einem Teilpfad der Länge genau l 1 zu einem Knoten w V, so dass (w, v) E. Der zweite Teil des Pfades der Länge l von u nach v besteht dann nur noch aus der Kante (w, v). Aus dieser Beobachtung und der Induktionsvoraussetzung folgt nun sofort die Gleichung d l (u, v) = d l 1 (u, w) für l > 0. {w V :(w,v) E}. Der folgende Algorithmus PathCount berechnet die im ersten Teil der Aufgabe aufgestellten Gleichungen. Dabei benutzt der Algorithmus ein zweidimensionales Array d mit k + 1 Zeilen und V Spalten. Der Eintrag d[l][v], 0 l k, v V, soll dabei am Ende des Algorithmus die Anzahl der Pfade der Länge l von u nach v speichern. Die gewünschte Antwort ist dann die k + 1-te Zeile d[k] des Arrays. Initialisiert werden alle Werte d[l][v] mit 0 (Zeilen 1-3). Dann wird d[0][u] auf 1 gesetzt. Damit sind dann schon alle Werte für l = 0 korrekt. Diese werden im weiteren Verlauf des Algorithmus auch nicht mehr geändert. Die Schleifen in den Zeilen 5-8 bestimmen dann iterativ die Werte d[l][v] für l = 1,..., k, mit Hilfe der im ersten Teil aufgestellten und eben bewiesenen Gleichung. PathCount(G, u, k): 1 for l 0 to k do for alle v V 3 do d[l][v] 0 4 d[0][u] 1 5 for l 1 to k 6 do for alle w V 7 do for alle v Adj[w] 8 do d[l][v] d[l][v] + d[l 1][w] 9 return d[k] Schließlich noch die Laufzeit des Algorithmus PathCount. Der ersten vier Zeilen benötigen Zeit O(k V ), da für jeden Knoten in V genau (k + 1) Werte gesetzt werden. In den Zeilen 5-8 durchlaufen wir für jeden Wert von l alle Adjazenzlisten genau einmal. Damit benötigen wir für jeden Wert von l in den Zeilen 6-8 Zeit O( V + E ). Damit ist die Laufzeit für die Zeilen 5-8 O(k( V + E )). Dieses ist dann auch die Gesamtlaufzeit von PathCount.

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

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können. 8. A & D - Heapsort Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können. Genauer werden wir immer wieder benötigte Operationen durch Datenstrukturen unterstützen.

Mehr

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

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5 Robert Elsässer Paderborn, den 15. Mai 2008 u.v.a. Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5 AUFGABE 1 (6 Punkte): Nehmen wir an, Anfang bezeichne in einer normalen

Mehr

Aufgabe 8. 1 Arbeitsweise illustrieren. 2 Korrektheitsbeweis führen. 3 Laufzeitanalyse durchführen.

Aufgabe 8. 1 Arbeitsweise illustrieren. 2 Korrektheitsbeweis führen. 3 Laufzeitanalyse durchführen. Aufgabe 8 Betrachten Sie den folgenden Algorithmus namens Bubble-Sort. Bubble-Sort(A[1..n]): 1 for i 1 to length(a) 1 2 do for j length(a) downto i + 1 3 do if A[j 1] > A[j] 4 then A[j 1] A[j] 1 Arbeitsweise

Mehr

Algorithmen und Datenstrukturen Heapsort

Algorithmen und Datenstrukturen Heapsort Algorithmen und Datenstrukturen 2 5 Heapsort In diesem Kapitel wird Heapsort, ein weiterer Sortieralgorithmus, vorgestellt. Dieser besitzt wie MERGE-SORT eine Laufzeit von O(n log n), sortiert jedoch das

Mehr

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

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)). 8. Untere Schranken für Sortieren Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)). Werden nun gemeinsame Eigenschaften dieser Algorithmen untersuchen. Fassen gemeinsame

Mehr

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten. 2. Grundlagen Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten. Laufzeitverhalten beschreiben durch O-Notation. 1 Beispiel Minimum-Suche Eingabe bei Minimum

Mehr

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

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 8.1 Heapsort [Ottman/Widmayer, Kap. 2.3, Cormen et al, Kap. 6] 9 210 Heapsort [Max-]Heap 6 Inspiration von Selectsort: Schnelles Einfügen Binärer Baum mit

Mehr

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Heapsort, Quicksort, Mergesort. 8. Sortieren II 209 Heapsort, Quicksort, Mergesort 8. Sortieren II 210 8.1 Heapsort [Ottman/Widmayer, Kap. 2.3, Cormen et al, Kap. 6] 211 Heapsort Inspiration von Selectsort: Schnelles Einfügen Inspiration von Insertionsort:

Mehr

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

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] Heapsort / 1 Heap: Ein Array heißt Heap, falls A [i] A [2i] und A[i] A [2i + 1] (für 2i n bzw. 2i + 1 n) gilt. Beispiel: A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] Heapsort / 2 Darstellung eines Heaps als

Mehr

9 Minimum Spanning Trees

9 Minimum Spanning Trees Im Folgenden wollen wir uns genauer mit dem Minimum Spanning Tree -Problem auseinandersetzen. 9.1 MST-Problem Gegeben ein ungerichteter Graph G = (V,E) und eine Gewichtsfunktion w w : E R Man berechne

Mehr

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1 Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1 Aufgabe 1. / 16 P Instruktionen: 1) In dieser Aufgabe sollen Sie nur die Ergebnisse angeben. Diese können Sie direkt bei den Aufgaben notieren. 2) Sofern

Mehr

3. Musterlösung. Problem 1: Heapsort

3. Musterlösung. Problem 1: Heapsort Universität Karlsruhe Algorithmentechnik Fakultät für Informatik WS 05/06 ITI Wagner 3. Musterlösung Problem : Heapsort ** 2 3 4 5 Algorithmus : Heapsort (A) Eingabe : Array A der Länge n Ausgabe : Aufsteigend

Mehr

Datenstrukturen und Algorithmen 2. Klausur SS 2001

Datenstrukturen und Algorithmen 2. Klausur SS 2001 UNIVERSITÄT PADERBORN FACHBEREICH 7 (MATHEMATIK INFORMATIK) Datenstrukturen und Algorithmen 2. Klausur SS 200 Lösungsansätze Dienstag, 8. September 200 Name, Vorname:...................................................

Mehr

Quicksort ist ein Divide-and-Conquer-Verfahren.

Quicksort ist ein Divide-and-Conquer-Verfahren. . Quicksort Wie bei vielen anderen Sortierverfahren (Bubblesort, Mergesort, usw.) ist auch bei Quicksort die Aufgabe, die Elemente eines Array a[..n] zu sortieren. Quicksort ist ein Divide-and-Conquer-Verfahren.

Mehr

14. Rot-Schwarz-Bäume

14. Rot-Schwarz-Bäume Bislang: Wörterbuchoperationen bei binären Suchbäume effizient durchführbar, falls Höhe des Baums klein. Rot-Schwarz-Bäume spezielle Suchbäume. Rot-Schwarz-Baum mit n Knoten hat Höhe höchstens 2 log(n+1).

Mehr

Übung zur Vorlesung Diskrete Strukturen I

Übung zur Vorlesung Diskrete Strukturen I Technische Universität München WS 00/0 Institut für Informatik Aufgabenblatt 10 Prof. Dr. J. Csirik 7. Januar 00 randt & Stein Übung zur Vorlesung Diskrete Strukturen I Abgabetermin: Tutorübungen am 16.

Mehr

Lernmodul 7 Algorithmus von Dijkstra

Lernmodul 7 Algorithmus von Dijkstra Folie 1 von 30 Lernmodul 7 Algorithmus von Dijkstra Quelle: http://www.map24.de Folie 2 von 30 Algorithmus von Dijkstra Übersicht Kürzester Weg von A nach B in einem Graphen Problemstellung: Suche einer

Mehr

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

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist. Prof. aa Dr. Ir. Joost-Pieter Katoen Christian Dehnert, Jonathan Heinen, Thomas Ströder, Sabrina von Styp Aufgabe 1 (O-Notation): Beweisen oder widerlegen Sie die folgenden Aussagen: (3 + 3 + 4 = 10 Punkte)

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Universität Innsbruck Institut für Informatik Zweite Prüfung 16. Oktober 2008 Algorithmen und Datenstrukturen Name: Matrikelnr: Die Prüfung besteht aus 8 Aufgaben. Die verfügbaren Punkte für jede Aufgabe

Mehr

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen Grundlagen: Algorithmen und Datenstrukturen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Sommersemester 00

Mehr

5. Übungsblatt zu Algorithmen I im SoSe 2016

5. Übungsblatt zu Algorithmen I im SoSe 2016 Karlsruher Institut für Technologie Institut für Theoretische Informatik Prof. Dr. Dennis Hofheinz Lukas Barth, Lisa Kohl 5. Übungsblatt zu Algorithmen I im SoSe 2016 https://crypto.iti.kit.edu/index.php?id=algo-sose16

Mehr

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min TU Ilmenau, Fakultät für Informatik und Automatisierung FG Komplexitätstheorie und Effiziente Algorithmen Univ.-Prof. Dr. M. Dietzfelbinger, Dipl.-Ing. C. Mattern Klausur Algorithmen und Datenstrukturen

Mehr

13. Binäre Suchbäume

13. Binäre Suchbäume 1. Binäre Suchbäume Binäre Suchbäume realiesieren Wörterbücher. Sie unterstützen die Operationen 1. Einfügen (Insert) 2. Entfernen (Delete). Suchen (Search) 4. Maximum/Minimum-Suche 5. Vorgänger (Predecessor),

Mehr

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array Das Suchproblem Gegeben. Suchen Lineare Suche, Binäre Suche, Interpolationssuche, Untere Schranken [Ottman/Widmayer, Kap. 3.2, Cormen et al, Kap. 2: Problems 2.-3,2.2-3,2.3-] Menge von Datensätzen. Beispiele

Mehr

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen Technische Universität München Fakultät für Informatik Lehrstuhl für Effiziente Algorithmen Dr. Hanjo Täubig Tobias Lieber Sommersemester 2011 Übungsblatt 1 16. September 2011 Grundlagen: Algorithmen und

Mehr

NAME, VORNAME: Studiennummer: Matrikel:

NAME, VORNAME: Studiennummer: Matrikel: TU Ilmenau, Fakultat IA Institut für Theoretische Informatik FG Komplexitätstheorie und Effiziente Algorithmen Prof. Dr. (USA) M. Dietzfelbinger Klausur Algorithmen und Datenstrukturen SS08, Ing.-Inf.

Mehr

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle 122 4. Suchen Lineare Suche, Binäre Suche, Interpolationssuche, Untere Schranken [Ottman/Widmayer, Kap. 3.2, Cormen et al, Kap. 2: Problems 2.1-3,2.2-3,2.3-5] 123 Das Suchproblem Gegeben Menge von Datensätzen.

Mehr

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

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6 Robert Elsässer u.v.a. Paderborn, 29. Mai 2008 Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6 Aufgabe 1 (6 Punkte): Zunächst sollte klar sein, daß ein vollständiger Binärer

Mehr

Sortieren II / HeapSort Heaps

Sortieren II / HeapSort Heaps Organisatorisches VL-07: Sortieren II: HeapSort (Datenstrukturen und Algorithmen, SS 2017) Vorlesung: Gerhard Woeginger (Zimmer 4024 im E1) Email: dsal-i1@algo.rwth-aachen.de Webseite: http://algo.rwth-aachen.de/lehre/ss17/dsa.php

Mehr

10. Übungsblatt zu Algorithmen I im SS 2010

10. Übungsblatt zu Algorithmen I im SS 2010 Karlsruher Institut für Technologie Institut für Theoretische Informatik Prof. Dr. Peter Sanders G.V. Batz, C. Schulz, J. Speck 0. Übungsblatt zu Algorithmen I im SS 00 http//algo.iti.kit.edu/algorithmeni.php

Mehr

15. Elementare Graphalgorithmen

15. Elementare Graphalgorithmen Graphen sind eine der wichtigste Modellierungskonzepte der Informatik Graphalgorithmen bilden die Grundlage vieler Algorithmen in der Praxis Zunächst kurze Wiederholung von Graphen. Dann Darstellungen

Mehr

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle 119 4. Suchen Lineare Suche, Binäre Suche, Interpolationssuche, Exponentielle Suche, Untere Schranken [Ottman/Widmayer, Kap. 3.2, Cormen et al, Kap. 2: Problems 2.1-3,2.2-3,2.3-5] 120 Das Suchproblem Gegeben

Mehr

Algorithmen & Komplexität

Algorithmen & Komplexität Algorithmen & Komplexität Angelika Steger Institut für Theoretische Informatik steger@inf.ethz.ch Breitensuche, Tiefensuche Wir besprechen nun zwei grundlegende Verfahren, alle Knoten eines Graphen zu

Mehr

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss. (a, b)-bäume / 1. Szenario: Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss. Konsequenz: Kommunikation zwischen Hauptspeicher und Festplatte - geschieht nicht Byte für Byte,

Mehr

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

3. Minimale Spannbäume. Definition 99 T heißt minimaler Spannbaum (MSB, MST) von G, falls T Spannbaum von G ist und gilt: 3. Minimale Spannbäume Sei G = (V, E) ein einfacher ungerichteter Graph, der o.b.d.a. zusammenhängend ist. Sei weiter w : E R eine Gewichtsfunktion auf den Kanten von G. Wir setzen E E: w(e ) = e E w(e),

Mehr

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Fortgeschrittene Netzwerk- und Graph-Algorithmen Fortgeschrittene Netzwerk- und Graph-Algorithmen Prof. Dr. Hanjo Täubig Lehrstuhl für Effiziente Algorithmen (Prof. Dr. Ernst W. Mayr) Institut für Informatik Technische Universität München Wintersemester

Mehr

Abschnitt 19: Sortierverfahren

Abschnitt 19: Sortierverfahren Abschnitt 19: Sortierverfahren 19. Sortierverfahren 19.1 Allgemeines 19.2 Einfache Sortierverfahren 19.3 Effizientes Sortieren: Quicksort 19.4 Zusammenfassung 19 Sortierverfahren Informatik 2 (SS 07) 758

Mehr

Informatik B Sommersemester Musterlösung zur Klausur vom

Informatik B Sommersemester Musterlösung zur Klausur vom Informatik B Sommersemester 007 Musterlösung zur Klausur vom 0.07.007 Aufgabe : Graphen und Graphalgorithmen + + + () Punkte Für eine beliebige positive, ganze Zahl n definieren wir einen Graphen G n =

Mehr

2. Klausur zur Vorlesung Algorithmentechnik Wintersemester 2006/ April 2007

2. Klausur zur Vorlesung Algorithmentechnik Wintersemester 2006/ April 2007 2. Klausur zur Vorlesung Algorithmentechnik Wintersemester 2006/2007 12. April 2007 Hier Aufkleber mit Name und Matrikelnr. anbringen Vorname: Nachname: Matrikelnummer: Beachten Sie: Bringen Sie den Aufkleber

Mehr

5. Bäume und Minimalgerüste

5. Bäume und Minimalgerüste 5. Bäume und Minimalgerüste Charakterisierung von Minimalgerüsten 5. Bäume und Minimalgerüste Definition 5.1. Es ein G = (V, E) ein zusammenhängender Graph. H = (V,E ) heißt Gerüst von G gdw. wenn H ein

Mehr

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14 Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 2. April

Mehr

Algorithmen & Komplexität

Algorithmen & Komplexität Algorithmen & Komplexität Angelika Steger Institut für Theoretische Informatik steger@inf.ethz.ch Kürzeste Pfade Problem Gegeben Netzwerk: Graph G = (V, E), Gewichtsfunktion w: E N Zwei Knoten: s, t Kantenzug/Weg

Mehr

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

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

Mehr

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

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Entscheidungsbäume Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen? Definition Entscheidungsbaum Sei T ein Binärbaum und A = {a 1,..., a n } eine zu sortierenden Menge. T ist ein Entscheidungsbaum

Mehr

Wir wollen nun die Behauptung beweisen, dass die Laufzeit von SELECT linear ist, also dass T (n) = O(n) gilt.

Wir wollen nun die Behauptung beweisen, dass die Laufzeit von SELECT linear ist, also dass T (n) = O(n) gilt. Abschätzung für die Rekursion von SELECT Wir wollen nun die Behauptung beweisen, dass die Laufzeit von SELECT linear ist, also dass T (n) = O(n) gilt. Wir nehmen erst einmal an, dass eine Konstante d existiert,

Mehr

Datenstrukturen & Algorithmen Lösungen zu Blatt 4 FS 15

Datenstrukturen & Algorithmen Lösungen zu Blatt 4 FS 15 Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik 18. März

Mehr

4 Greedy-Algorithmen (gierige Algorithmen)

4 Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen (gierige Algorithmen) Greedy-Algorithmen werden oft für die exakte oder approximative Lösung von Optimierungsproblemen verwendet. Typischerweise konstruiert ein Greedy-Algorithmus eine

Mehr

Kürzeste-Wege-Algorithmen und Datenstrukturen

Kürzeste-Wege-Algorithmen und Datenstrukturen Kürzeste-Wege-Algorithmen und Datenstrukturen Institut für Informatik Universität zu Köln SS 2009 Teil 1 Inhaltsverzeichnis 1 Kürzeste Wege 2 1.1 Voraussetzungen................................ 2 1.2

Mehr

11. Elementare Datenstrukturen

11. Elementare Datenstrukturen 11. Elementare Datenstrukturen Definition 11.1: Eine dynamische Menge ist gegeben durch eine oder mehrer Mengen von Objekten sowie Operationen auf diesen Mengen und den Objekten der Mengen. Dynamische

Mehr

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

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8 ETH Zürich Institut für Theoretische Informatik Prof. Dr. Angelika Steger Florian Meier, Ralph Keusch HS 2017 Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8 Lösungsvorschlag zu Aufgabe 1

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2016 Patrick Schäfer, Humboldt-Universität zu Berlin Organisation Vorlesung: Montag 11 13 Uhr Marius Kloft RUD 26, 0 115 Mittwoch 11 13 Uhr Marius Kloft

Mehr

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)

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) Stand der Vorlesung: Datenstruktur Heap: fast vollständiger Binärbaum MaxHeap: sortierter Heap, größtes Element an Wurzel Sortierverfahren: HeapSort: Sortieren eines Feldes A[1.. n] Idee: in place: Feld

Mehr

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Technische Universität München Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Prof. Martin Lercher Institut für Informatik Heinrich-Heine-Universität Düsseldorf Algorithmen und Datenstrukturen Teil 3 Suchen in Listen Version vom: 15. November 2016

Mehr

Sortieralgorithmen. Selection Sort

Sortieralgorithmen. Selection Sort intuitivster Suchalgorithmus Sortieralgorithmen Selection Sort In jedem Schritt wird das kleinste Element im noch unsortierten Array gesucht und ans Ende des bisher sortierten Teilarrays gehangen 3 1 4

Mehr

Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47

Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47 Graphalgorithmen Dominik Paulus.0.01 Dominik Paulus Graphalgorithmen.0.01 1 / 7 1 Spannbäume Kruskal Prim Edmonds/Chu-Liu Datenstrukturen Fibonacci-Heap Union/Find Kürzeste Pfade Dijkstra Bellman-Ford

Mehr

Graphdurchmusterung, Breiten- und Tiefensuche

Graphdurchmusterung, Breiten- und Tiefensuche Prof. Thomas Richter 18. Mai 2017 Institut für Analysis und Numerik Otto-von-Guericke-Universität Magdeburg thomas.richter@ovgu.de Material zur Vorlesung Algorithmische Mathematik II am 18.05.2017 Graphdurchmusterung,

Mehr

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Datenstrukturen. Mariano Zelke. Sommersemester 2012 Datenstrukturen Mariano Zelke Sommersemester 2012 Tiefensuche: Die globale Struktur Der gerichtete oder ungerichtete Graph G werde durch seine Adjazenzliste A repräsentiert. Im Array besucht wird vermerkt,

Mehr

Relationen und DAGs, starker Zusammenhang

Relationen und DAGs, starker Zusammenhang Relationen und DAGs, starker Zusammenhang Anmerkung: Sei D = (V, E). Dann ist A V V eine Relation auf V. Sei andererseits R S S eine Relation auf S. Dann definiert D = (S, R) einen DAG. D.h. DAGs sind

Mehr

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

Kapitel 2. Weitere Beispiele Effizienter Algorithmen Kapitel 2 Weitere Beispiele Effizienter Algorithmen Sequentielle Suche Gegeben: Array a[1..n] Suche in a nach Element x Ohne weitere Zusatzinformationen: Sequentielle Suche a[1] a[2] a[3] Laufzeit: n Schritte

Mehr

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

4.2 Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition 4.2.1 Allgemeines. Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition.. (a) Ein Graph G =(V, E) heißt kreisfrei, wenn er keinen Kreis besitzt. Beispiel: Ein kreisfreier Graph: FG KTuEA, TU Ilmenau

Mehr

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3)

( )= c+t(n-1) n>1. Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Stand der Vorlesung Komplexität von Algorithmen (Kapitel 3) Motivation: IT gestützte Steuerung, Überwachung, Fertigung, Produktion,. : erfordert effiziente Berechnungsvorschriften Ziel: Methoden kennen

Mehr

Technische Universität München

Technische Universität München Stand der Vorlesung: Datenstruktur Heap: fast vollständiger Binärbaum MaxHeap: sortierter Heap, größtes Element an Wurzel Sortierverfahren: HeapSort: Sortieren eines Feldes A[1.. n] Idee: in place: Feld

Mehr

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abschnitt: Algorithmendesign und Laufzeitanalyse Abschnitt: Algorithmendesign und Laufzeitanalyse Definition Divide-and-Conquer Paradigma Divide-and-Conquer Algorithmen verwenden die Strategien 1 Divide: Teile das Problem rekursiv in Subproblem gleicher

Mehr

Kapitel 6 Elementare Sortieralgorithmen

Kapitel 6 Elementare Sortieralgorithmen Kapitel 6 Elementare Sortieralgorithmen Ziel: Kennenlernen elementarer Sortierverfahren und deren Effizienz Zur Erinnerung: Das Sortier-Problem Gegeben: Folge A von n Elementen a 1, a 2,..., a n ; Eine

Mehr

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren . Allgemeine (vergleichsbasierte) Sortierverfahren Vergleichsbaum: Der Aufbau des Verbleichsbaum ist für jeden Algorithmus und jede Eingabelänge n gleich. Jede Permutation der Eingabe, muss zu einem anderen

Mehr

Kapitel 8 Fortgeschrittene Sortieralgorithmen

Kapitel 8 Fortgeschrittene Sortieralgorithmen Kapitel 8 Fortgeschrittene Sortieralgorithmen Zur Erinnerung: in Kapitel 6 Elementare Sortierverfahren Sortierverfahren, die auf Vergleichen von Werten basieren. Aufwand zum Sortieren von Feldern von n

Mehr

Datenstrukturen und Algorithmen D-INFK

Datenstrukturen und Algorithmen D-INFK Eidgenössische Technische Hochschule Zürich Ecole polytechnique fédérale de Zurich Politecnico federale di Zurigo Federal Institute of Technology at Zurich Institut für Theoretische Informatik Peter Widmayer

Mehr

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

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing Algorithmen I Tutorium 1-3. Sitzung Dennis Felsing dennis.felsing@student.kit.edu www.stud.uni-karlsruhe.de/~ubcqr/algo 2011-05-02 Überblick 1 Sortieren und Suchen 2 Mastertheorem 3 Datenstrukturen 4 Kreativaufgabe

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Kürzeste Wege, Heaps, Hashing Heute: Kürzeste Wege: Dijkstra Heaps: Binäre Min-Heaps Hashing:

Mehr

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik Humboldt-Universität zu Berlin Berlin, den 15.06.2015 Institut für Informatik Prof. Dr. Ulf Leser Übungen zur Vorlesung M. Bux, B. Grußien, J. Sürmeli, S. Wandelt Algorithmen und Datenstrukturen Übungsblatt

Mehr

\ 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.

\ 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. Das Komplement Ḡ = (V, ( V ) \ 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. Ein Graph H = (V, E )

Mehr

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

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Abstrakte Datentypen und Datenstrukturen/ Einfache Beispiele Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken. Datenstruktur (DS): Realisierung

Mehr

Breitensuche BFS (Breadth First Search)

Breitensuche BFS (Breadth First Search) Breitensuche BFS (Breadth First Search) Algorithmus BREITENSUCHE EINGABE: G = (V, E) als Adjazenzliste, Startknoten s V 1 Für alle v V 1 If (v = s) then d[v] 0 else d[v] ; 2 pred[v] nil; 2 Q new Queue;

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Prof. Martin Lercher Institut für Informatik Heinrich-Heine-Universität Düsseldorf Teil 10 Suche in Graphen Version vom 13. Dezember 2016 1 / 2 Vorlesung 2016 / 2017 2 /

Mehr

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden! Albert-Ludwigs-Universität Institut für Informatik Prof. Dr. F. Kuhn Informatik II: Algorithmen & Datenstrukturen Montag, 29. August, 2014, 14:00 17:00 Name:...........................................................

Mehr

3. Musterlösung. Problem 1: Boruvka MST

3. Musterlösung. Problem 1: Boruvka MST Universität Karlsruhe Algorithmentechnik Fakultät für Informatik WS 06/07 ITI Wagner. Musterlösung Problem : Boruvka MST pt (a) Beweis durch Widerspruch. Sei T MST von G, e die lokal minimale Kante eines

Mehr

1 Kürzeste Pfade in Graphen

1 Kürzeste Pfade in Graphen Praktikum Algorithmen-Entwurf (Teil 3) 03.11.2011 1 1 Kürzeste Pfade in Graphen Es sei ein gerichteter Graph G = (V, E) mit V = n Knoten, E = m Kanten und Kantengewichten c : E R gegeben. Ein Pfad in G

Mehr

Datenstrukturen & Algorithmen

Datenstrukturen & Algorithmen Datenstrukturen & Algorithmen Matthias Zwicker Universität Bern Frühling 2010 Übersicht Sortieralgorithmen Einleitung Heapsort Quicksort 2 Motivation Sortieren ist Voraussetzung für viele Anwendungen Nach

Mehr

Informatik II Prüfungsvorbereitungskurs

Informatik II Prüfungsvorbereitungskurs Informatik II Prüfungsvorbereitungskurs Tag 4, 9.6.2017 Giuseppe Accaputo g@accaputo.ch 1 Aufbau des PVK Tag 1: Java Teil 1 Tag 2: Java Teil 2 Tag 3: Algorithmen & Komplexität Tag 4: Dynamische Datenstrukturen,

Mehr

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit Counting-Sort Counting - Sort ( A,B,k ). for i to k. do C[ i]. for j to length[ A]. do C[ A[ j ] C[ A[ j ] +. > C[ i] enthält Anzahl der Elemente in 6. for i to k. do C[ i] C[ i] + C[ i ]. > C[ i] enthält

Mehr

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

Lösungsvorschlag 1. Vorlesung Algorithmentechnik im WS 09/10 Institut für Theoretische Informatik Lehrstuhl Prof. Dr. D. Wagner Lösungsvorschlag Vorlesung Algorithmentechnik im WS 09/0 Problem : Dynamisches Array (Amortisierte Analyse) [vgl. Kapitel 0.3 im Skript]

Mehr

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

4.2 Fibonacci-Heaps Aufbau Potenzialfunktion. Knoten v hat folgende Felder: 4.2 Fibonacci-Heaps 4.2.1 Aufbau Knoten v hat folgende Felder: Vaterzeiger p(v) Zeiger auf linkes Geschwister: prev(v) Zeiger auf rechtes Geschwister: next(v) Kindzeiger: child(v) Schlüssel: key: aus U

Mehr

7. Sortieren Lernziele. 7. Sortieren

7. Sortieren Lernziele. 7. Sortieren 7. Sortieren Lernziele 7. Sortieren Lernziele: Die wichtigsten Sortierverfahren kennen und einsetzen können, Aufwand und weitere Eigenschaften der Sortierverfahren kennen, das Problemlösungsparadigma Teile-und-herrsche

Mehr

Übung zur Vorlesung Berechenbarkeit und Komplexität

Übung zur Vorlesung Berechenbarkeit und Komplexität RWTH Aachen Lehrgebiet Theoretische Informatik Reidl Ries Rossmanith Sanchez Tönnis WS 2012/13 Übungsblatt 7 26.11.2012 Übung zur Vorlesung Berechenbarkeit und Komplexität Aufgabe T15 Entwickeln Sie ein

Mehr

Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 1: Grundlagen der algorithmischen Graphentheorie

Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 1: Grundlagen der algorithmischen Graphentheorie Ferienkurs zur algorithmischen diskreten Mathematik Kapitel 1: Grundlagen der algorithmischen Graphentheorie Dipl-Math. Wolfgang Kinzner 2.4.2012 Kapitel 1: Grundlagen der algorithmischen Graphgentheorie

Mehr

ContainerDatenstrukturen. Große Übung 4

ContainerDatenstrukturen. Große Übung 4 ContainerDatenstrukturen Große Übung 4 Aufgabenstellung Verwalte Kollektion S von n Objekten Grundaufgaben: Iterieren/Auflistung Suche nach Objekt x mit Wert/Schlüssel k Füge ein Objekt x hinzu Entferne

Mehr

Informatik II, SS 2014

Informatik II, SS 2014 Informatik II SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 11 (4.6.2014) Binäre Suchbäume II Algorithmen und Komplexität Binäre Suchbäume Binäre Suchbäume müssen nicht immer so schön symmetrisch sein

Mehr

Rotation. y T 3. Abbildung 3.10: Rotation nach rechts (analog links) Doppelrotation y

Rotation. y T 3. Abbildung 3.10: Rotation nach rechts (analog links) Doppelrotation y Die AVL-Eigenschaft soll bei Einfügungen und Streichungen erhalten bleiben. Dafür gibt es zwei mögliche Operationen: -1-2 Rotation Abbildung 3.1: Rotation nach rechts (analog links) -2 +1 z ±1 T 4 Doppelrotation

Mehr

Klausur Algorithmen und Datenstrukturen

Klausur Algorithmen und Datenstrukturen Technische Universität Braunschweig Sommersemester 2013 IBR - Abteilung Algorithmik Prof. Dr. Sándor Fekete Dr. Christiane Schmidt Stephan Friedrichs Klausur Algorithmen und Datenstrukturen 22.08.2013

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Sortierverfahren 1. Schreibtischtest 2. Stabilität 3. Sortierung spezieller Arrays 4. Untere

Mehr

Übung Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen Übung Algorithmen und Datenstrukturen Sommersemester 217 Patrick Schäfer, Humboldt-Universität zu Berlin Agenda: Graphen, Suchbäume, AVL Bäume Heute: Graphen und Bäume Binäre Suchbäume AVL-Bäume Nächste

Mehr

Vorlesung Datenstrukturen

Vorlesung Datenstrukturen Vorlesung Datenstrukturen Minimale Spannbäume Maike Buchin 18.7., 20.7.2017 Einführung Motivation: Verbinde Inseln mit Fähren oder Städte mit Schienen und verbrauche dabei möglichst wenig Länge. Problem:

Mehr

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

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4 Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Lösung - Übung F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe (Sortieren): a) Sortieren Sie das folgende Array durch Anwendung des Selectionsort-Algorithmus.

Mehr

Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 2006 Blatt 13

Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 2006 Blatt 13 Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 2006 Blatt 13 Sven Grothklags University of Paderborn 10. Juli 2006 Sven Grothklags (University of Paderborn) DuA Übungsblatt 13 10. Juli 2006 1

Mehr

Grundlagen: Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen Technische Universität München Fakultät für Informatik Lehrstuhl für Effiziente Algorithmen Dr. Hanjo Täubig Tobias Lieber Sommersemester 011 Übungsblatt 30. Mai 011 Grundlagen: Algorithmen und Datenstrukturen

Mehr

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

Definition Gerichteter Pfad. gerichteter Pfad, wenn. Ein gerichteter Pfad heißt einfach, falls alle u i paarweise verschieden sind. 3.5 Gerichteter Pfad Definition 291 Eine Folge (u 0, u 1,..., u n ) mit u i V für i = 0,..., n heißt gerichteter Pfad, wenn ( i {0,..., n 1} ) [ (u i, u i+1 ) A]. Ein gerichteter Pfad heißt einfach, falls

Mehr

Tutoraufgabe 1 (Suchen in Graphen):

Tutoraufgabe 1 (Suchen in Graphen): Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS14 F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe 1 (Suchen in Graphen): a) Geben Sie die Reihenfolge an, in der die Knoten besucht werden, wenn

Mehr

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 2, Donnerstag 30.

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 2, Donnerstag 30. Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / 2015 Vorlesung 2, Donnerstag 30. Oktober 2014 (Laufzeitanalyse MinSort / HeapSort, Induktion) Junior-Prof.

Mehr

Das Heiratsproblem. Definition Matching

Das Heiratsproblem. Definition Matching Das Heiratsproblem Szenario: Gegeben: n Frauen und m > n Männer. Bekanntschaftsbeziehungen zwischen allen Männern und Frauen. Fragestellung: Wann gibt es für jede der Frauen einen Heiratspartner? Modellierung

Mehr