Musterlösung zur Klausur "Diskrete Mathematik" vom 19.7.2001
Aktuell bearb. Liste der grünen Knoten Knoten (A,0) (D,10), (B,5) Aufgabe 1: Aktuell bearb. Liste der grünen Knoten Knoten (A,0) (D,10), (B,5) (B, 5) (D, 8), (E, 14) , (C, 7) (C, 7) (E, 13), (D, 8) (D, 8) (E, 9) (E, 9) []
Aufgabe 2 33 33 33 33 70 20 70 20 70 90 33 33 +2 20 70 20 70 40 90 40 90 99 70 L-Rotation 33 90 20 40 99
70 70 33 90 33 90 -2 20 20 40 40 99 99 4 4 7 70 70 LR-Rotation 33 90 -2 33 90 7 40 99 7 40 99 4 20 4 20 1
-2 70 R-Rotation 90 7 99 4 33 1 20 40 LR-Rotation 9 33 +2 7 70 4 20 40 90 1 9 99 93
L-Rotation 33 7 90 4 20 70 99 1 9 40 93
Aufgabe 3.1: Nein. Das Segment G verstößt gegen die Voraussetzung, dass kein Segment vertikal sein darf, und die Segmente H/I bzw. A/B verstoßen gegen die Voraussetzung, dass die x-Koordinaten der Endpunkte zweier Segmente paarweise verschieden sein müssen. Aufgabe 3.2: In diesen Fällen enden oder beginnen bei einem Haltepunkt der Scan-Line mehrere Segmente (bei vertikalen endet und beginnt dasselbe). Dies erfordert die Betrachtung vieler Sonderfälle und wirft Probleme hinsichtlich der Reihenfolge auf (zuerst die beginnenden, dann die endenden). Werden die Fälle ausgeschlossen, so trifft genau einer von drei Fällen zu, wodurch die Formulierung des Algorithmus vereinfacht wird.
Aufg. 3.3 s3 s2 s4 s1 s5 D D F F D E C F D C F D D [ ] D E F D F E C D 10 11 12 13 D C s3 E s2 s4 s1 F s5 D D F F D E C F D C F D D [ ] D E F D F E C D F E C F D E F C D E F D C E S2 erkannt HP einfügen S1 erkannt HP einfügen S4 erkannt HP einfügen S3 erkannt HP einfügen S2 wieder erkannt S4 wieder erkannt S5 erkannt
Aufgabe 4: S1 S2 Der Schnittpunkt S1 wird vor S2 gefunden, obwohl S2 links von S1 liegt. (Dieses Beispiel kommt mit 3 Segmenten aus. Ein Beispiel mit weniger Segmenten gibt es nicht.)
Aufgabe 5: Verbinde die Punkte benachbarter unbeschränkter Voronoi-Regionen von P durch gerade Liniensegmente. Dies ergibt die konvexe Hülle von P.
Aufgabe 6: Die Lösung finden Sie auf der nächsten Folie Aufgabe 6: Die Lösung finden Sie auf der nächsten Folie. Anmerkungen zur Lösung: Zunächst benötigt Dijkstra einen gerichteten Graphen als Input. Dieser soll die Erreichbarkeit auf Autobahnen und Zubringern repräsentieren. Einen Zubringer als einen Knoten zu repräsentieren, widerspricht der Realität, da man bei vielen Zubringern (Poppelsdorf, Tannenbusch) nicht auf der Autobahn wenden kann, und auch nicht beliebig abbiegen kann (in Tannenbusch kann z.B. nur abfahren, wer aus Richtung Koblenz kommt). Bestimmte Zubringer müssen folglich durch zwei Knoten - einen für jede Richtung - repräsentiert werden. Die Anmerkung in der Aufgabenstellung, von der Realität statt von der Karte auszugehen, bezieht sich auf den Zubringer Endenich: Wer aus Koblenz kommt, kann in Endenich nicht abfahren. Die Karte suggeriert jedoch, dass dies möglich ist.
Aufgabe 6: St. Augustin 1 St. Augustin 2 AK Bonn Nord Verteilerkreis Köln1 AS Tannenbusch 1 Hohe Str. 2 Köln 2 AS Tannenbusch 2 Hohe Str 1 Reuterstraße 1 AS Endenich Endenicher Str- Wandersleb-Ring 1 AS Poppelsdorf 1 AS Poppelsdorf 2 Endenicher Str- Wandersleb-Ring 2 Reuterstraße 2 Provinzialstr. AS Lengsdorf 1 AS Lengsdorf 2 Provinzialstr Koblenz 1 Koblenz 2
Aufgabe 7: Durchlaufe die Liste; halte bei jedem Element e an und tue folgendes: Durchlaufe die Liste ab dem aktuellen Element e und vergleiche den Wert jedes Elementes mit dem Wert von e; sind beide gleich, so beende den Algorithmus und gib aus, dass die Liste Duplikate enthält. Alternative Lösung: Sortiere die Liste nach aufsteigenden Werten und vergleiche jedes Element mit seinem Nachfolger. Werden dabei zwei gleiche Werte gefunden, so gibt es Duplikate.
Aufgabe 8: Die folgende rekursive Prozedur gibt die Werte in absteigender Reihenfolge aus. Sie ist eine leichte Modifikation (Ändern der Reihenfolge der mit * markierten Befehle) der Prozedur Preorder : void AbsteigendeAusgabe() { AbsteigendeAusgabe(wurzel); } private void AbsteigendeAusgabe(Knoten aktuell) { if (aktuell != null) { * AbsteigendeAusgabe(aktuell.GibRechts()); * System.out.println(aktuell.GibWert()); * AbsteigendeAusgabe(aktuell.GibLinks());