10.02.2015 Aufrufe

Lernkontrolle Lösungen

Lernkontrolle Lösungen

Lernkontrolle Lösungen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Algorithmen und Datenstrukturen 2<br />

Prof. Dr. C. Stamm christoph.stamm@fhnw.ch Tel.: 056 462 47 44<br />

Lösungen zu den <strong>Lernkontrolle</strong>n<br />

1.4.1 Grapheneigenschaften<br />

Hier sind einige Graphen abgebildet. Geben Sie für jeden Graphen die Grade der Knoten an. Versuchen<br />

Sie dann so viele Eigenschaften wie möglich zu festzuhalten. Mit Eigenschaften sind hier gemeint:<br />

• Zu welcher Gruppe von Graphen gehört der Graph Z.B. Bäume, Kreise, vollständig bipartite<br />

Graphen, einfacher Graph, etc.<br />

• Ist der Graph zusammenhängend<br />

• Etc.<br />

a)<br />

b) c)<br />

d)<br />

e)<br />

f)<br />

Graphentyp<br />

Einfacher<br />

Graph<br />

Zusammen<br />

hängend<br />

gerichtet planar Speziell<br />

a) C 3 , K 3 Ja Ja Nein Ja<br />

b) C 4 , H 2 Ja Ja Nein Ja<br />

c) - Ja Nein Nein Ja<br />

d) - Nein Ja Nein Ja Schlinge<br />

e) - Nein Ja Nein Ja Mehrfachkante<br />

f) - Nein Ja Ja Ja<br />

1.4.2 Summe der Knotengrade<br />

Im Kapitel über einfache Graphen wurde gesagt, dass es immer eine gerade<br />

Anzahl von Knoten mit ungeradem Grad geben muss. Wie sieht dies für<br />

die Anzahl der Knoten mit geradem Grad aus<br />

Es ist nicht zwingend, dass die Anzahl der Knoten mit geradem Grad eine<br />

gerade Zahl ist. Siehe Beispiel<br />

Dieser Graph hat 3 Knoten mit Grad 2.<br />

1.4.3 Planarität<br />

a) ist planar, heisst auch C 5 , n = m = 5, f = 2, Eulersche Polyederformel: n – m + f = 2 ist erfüllt<br />

b) ist planar, heisst auch Tetraeder, ist also ein Polyeder, n = 4, m = 6, f = 4; n – m + f = 2 ist erfüllt<br />

c) ist planar, heisst auch Oktaeder, n = 6, m = 12, f = 8; n – m + f = 2 ist erfüllt<br />

d) ist planar, heisst auch Würfel, n = 8, m = 12, f = 6; n – m + f = 2 ist erfüllt<br />

1


1.4.4 Kurzaufgaben<br />

a) Wie viele Kanten hat der K 5 10<br />

b) Wie viele Kanten hat der K n n*(n – 1)/2<br />

c) Wie viele Kanten hat der K 3,3 3*3 = 9<br />

d) Wie viele Kanten hat der K a,b a*b<br />

e) Wie viele Kanten hat der C 4 4<br />

f) Wie viele Kanten hat der C n n<br />

g) Zeichnen Sie für die folgende Situation einen Graphen, der die Situation wiedergibt: Sie laden 5<br />

Freunde ein. Jeder Gast kennt zwei andere Gäste. Zeichnen Sie einen zusammenhängenden<br />

Graphen.<br />

h) Kann ein Graph mit 11 Knoten und 30 Kanten planar sein<br />

Eulersche Polyederformel: n – m + f = 2<br />

11 – 30 + f = 2 f = 21<br />

Es muss aber auch gelten: 3f ≤ 2m<br />

3f ≤ 2*30 f ≤ 20<br />

kann nicht planar sein<br />

i) Kann ein Graph mit 5 Knoten und 6 Gebieten planar sein<br />

Eulersche Polyederformel: n – m + f = 2<br />

5 – m + 6 = 2 m = 9<br />

Es muss aber auch gelten: 3f ≤ 2m<br />

3*6 ≤ 2m m ≥ 9<br />

Es muss auch gelten: m ≤ 3n – 6 = 9<br />

Es muss auch gelten: f ≤ 2n – 4 = 6<br />

kann planar sein<br />

j) Kann ein Graph mit 5 Knoten, 10 Kanten und 8 Gebieten planar sein<br />

Eulersche Polyederformel: n – m + f = 2<br />

5 – 10 + 8 = 3<br />

kann nicht planar sein, weil die Eulersche Polyederformel nicht zutrifft<br />

2


2.5.1 Adjazenzmatrix<br />

2.5.2 Inzidenzmatrix<br />

2.5.3 Adjazenzlisten<br />

3.6.1 Topologische Sortierung<br />

a) Kann ein ungerichteter Graph topologisch sortiert werden<br />

Nein, es fehlt die partielle Ordnung.<br />

b) Geben Sie für den folgenden Graphen eine topologische Sortierung an.<br />

1<br />

4<br />

6<br />

2<br />

3 5<br />

7<br />

1, 2, 3, 4, 5, 6, 7<br />

c) Zeichnen Sie noch zwei Kanten ein, welche die topologische Sortierung nicht beeinträchtigen.<br />

Z.B. die Kanten (5, 7) und (3, 6)<br />

3.6.2 Durchlaufen von Graphen<br />

Zeichnen Sie im folgenden Graphen die verschiedenen Schritte einer a) Tiefensuche und b) Breitensuche<br />

ein. Startknoten ist der Knoten 1. Geben Sie auch an, in welcher Reihenfolge die Knoten gefunden<br />

werden.<br />

Annahme: kleinere Knotennummern werden zuerst besucht.<br />

Tiefensuche: 3, 6, 7, 4, 5, 2, 1<br />

Breitensuche: 1, 2, 4, 5, 7, 3, 6<br />

1<br />

4<br />

6<br />

2<br />

3<br />

5 7<br />

3.6.3 Kürzeste Pfade<br />

a) Sie haben gesehen, dass die Laufzeit des Dijkstra-Algorithmus O((n + m) log n) ist. Rechnen Sie<br />

nun aus, wie die Laufzeit wäre, wenn anstatt der Prioritätswarteschlange eine sortierte Liste verwendet<br />

würde.<br />

O(min suchen) = O (n)<br />

O(min extrahieren) = O (1)<br />

O(einfügen) = O (n)<br />

O(update im Array) = O (n)<br />

O ( n + n *((n) + (1)) + n *(n) + m* (n)) = O( n + n² + n² + mn ) = O((n + m) n)<br />

3


) Sie erhalten einen Graphen und sollen nun herausfinden, ob er eine Kante mit negativem Gewicht<br />

enthält. Schreiben Sie in Pseudocode eine entsprechende Testmethode auf. Geben Sie zudem<br />

die Laufzeit Ihres Algorithmus an.<br />

boolean Test(Graph G, Knoten s)<br />

forall v in V do<br />

v.gefunden := false<br />

endforall<br />

Q := {s}<br />

while Q nicht leer do<br />

entferne das vorderste Element u aus Q<br />

u.gefunden := true<br />

forall e inzident zu u<br />

if w(e) < 0<br />

return false<br />

endif<br />

endforall<br />

forall v Nachbarn von u<br />

if !v.gefunden<br />

füge v in Q ein<br />

endif<br />

endforall<br />

endwhile<br />

// alle Knoten unentdeckt<br />

// Alle Knoten die von u aus mit einer Kante<br />

// erreicht werden können<br />

Diese Methode hat dieselbe Laufzeit wie die Breitensuche O(n + m).<br />

c) Bestimmen Sie eine möglichst scharfe untere Grenze der Laufzeit für einen Algorithmus zur<br />

Überprüfung von Kanten mit negativem Gewicht.<br />

Eine Methode, die ganz sicher alle Kanten findet, muss mindestens eine Laufzeit von Ω (m) haben.<br />

4.3.2 Minimaler Spannbaum<br />

a) Zeichnen Sie den Graphen, der zu der nachfolgend gegebenen Adjazenzmatrix (links) gehört.<br />

Erzeugen Sie dann den minimalen Spannbaum für diesen Graphen. Füllen Sie dabei die rechte<br />

Tabelle der Gewichte aus (rechts). Geben Sie in dieser Tabelle in der Spalte ganz links an, welches<br />

der aktuelle Knoten ist (analog zu den vorherigen Beispielen).<br />

s 1 2 3 4 5 6<br />

0 ∞ ∞ ∞ ∞ ∞ ∞<br />

s 0 1 ∞ 10 ∞ ∞ ∞<br />

1 0 0 2 10 ∞ 7 ∞<br />

2 0 0 0 10 8 5 ∞<br />

5 0 0 0 10 3 0 4<br />

4 0 0 0 2 0 0 4<br />

3 0 0 0 0 0 0 4<br />

4 0 0 0 0 0 0 0<br />

b) Geben Sie die Menge der Kanten an, die im minimalen Spannbaum enthalten sind. Z.B. {s, 3}<br />

Menge der Kanten im Spannbaum: {s,1}, {1,2}, {2,5}, {5,4}, {5,6}, {4,3}<br />

c) Welches Gewicht hat der hier erzeugte minimale Spannbaum.<br />

Gewicht des Spannbaums: 17<br />

4


d) Hätte in einem Schritt auch eine andere Kante (bzw. ein anderer Knoten) in den MST aufgenommen<br />

werden können<br />

es gibt keine Alternativen<br />

5

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!