Prof. Dr. Lutz Plümer Dr. Gerhard Gröger Diskrete Mathematik SS 01 Aufgaben zur Klausurvorbereitung 29. Mai 2001 1. Schreiben Sie ein Programm in Pseudo-Code, das die Reihenfolge der Elemente in einer einfach verketteten Liste umkehrt. Das Programm kann sich auf eine der in der Vorlesung vorgestellten Repräsentationen für Listen beziehen. 2. Schreiben Sie ein Programm in Pseudo-Code, das eine Matrix und einen Vektor – beide als zwei- bzw. eindimensionale Arrays gegeben - miteinander multipliziert. Das Programm sollte möglichst eng an die Syntax von Java angelehnt sein; Syntaxfehler werden jedoch nicht bewertet. 3. Zur Auswertung arithmetischer Ausdrücke wird rechnerintern die sogenannte umgekehrte Polnische Notation (UPN) verwendet, bei der der Operator (+, *, -) nicht zwischen den Operanden „5 + 7“, sondern davor „+(4,7)“ steht; die Operanden werden in Klammern eingeschlossen und durch Komma getrennt. Der Ausdruck 3 * 1 + 9 * 6 lautet z.B. in UPN +( *(3,1) , *(9,6) ) Ausgangspunkt der Aufgabe und Zwischenergebnis der Arbeit des Compilers ist ein binärer Syntax-Baum; bei diesem sind die Knoten die Operatoren und Operanden, und die Relation zwischen Operatoren und den zugehörigen Operanden wird durch die Nachfolger-Relation im Baum ausgedrückt. Der Syntax-Baum zu obigem Ausdruck ist z.B. + * 3 * 1 9 6 Schreiben Sie ein Programm in Pseudo-Code, das aus einem Syntax-Baum den entsprechenden Ausdruck in UPN erzeugt. 4. In der Vorlesung wurden binäre Suchbäume und die entsprechenden Datenstrukturen (Klassen) vorgestellt. 4.1. Formulieren Sie umgangssprachlich den Algorithmus zum Entfernen eines Elements aus einem binären Suchbaum. Identifizieren Sie den schwierigen Fall im Algorithmus. 4.2. Zeigen Sie, dass Ihr Verfahren korrekt ist, d.h. dass das Ergebnis des Verfahrens wieder ein binärer Suchbaum ist. 5. Wenden Sie den in der Vorlesung vorgestellten Algorithmus von Dijkstra auf den Graphen in der Abbildung an, um kürzeste Wege zu ermitteln. Startknoten ist A. Es reicht aus, wenn Sie für jeden Schritt des Algorithmus die besuchten, noch nicht vollständig abgearbeiteten Knoten („grüne Knoten“) inklusive der aktuellen Weglängen, sowie den aktuell bearbeiteten Knoten angeben. Seite 1 von 3 A 90 30 B 100 40 E 20 10 40 C 10 D 6. In vielen kommerziellen Routensuchverfahren wird zwischen kürzesten Wegen (Entfernung) und schnellsten Wegen (Fahrtzeit) unterschieden. Wie kann der Algorithmus von Dijkstra modifiziert werden, um beide Optionen zu unterstützen? 7. In der Vorlesung wurden Heaps vorgestellt, die sich gut als Array repräsentieren lassen. 7.1. Leiten Sie aus der unten wiedergegebenen Array-Repräsentation den entsprechenden Heap in der Baum-Repräsentation her. 7 22 9 23 27 11 30 90 28 33 80 19 70 7.2. Welche Änderungen ergeben sich in beiden Repräsentationen, wenn ein Element mit dem Wert 8 („info“ = 8) in den Heap eingefügt wird? 7.3. Wie gut ist die Repräsentation als Array auch für andere binäre Bäume, z.B. AVLBäume, geeignet? Begründen Sie Ihre Antwort. 8. Ein Graph heißt zusammenhängend, wenn jeder Knoten des Graphen mit jedem anderen Knoten des Graphen über eine Folge von Kanten verbunden ist. Welche der in der Vorlesung vorgestellten Algorithmen können verwendet werden, um festzustellen, ob ein Graph zusammenhängend ist? Skizzieren Sie, wie diese Algorithmen modifiziert werden müssen. 9. Wenden Sie den in der Vorlesung vorgestellten Scan-Line-Algorithmus an, um die Schnittpunkte zwischen den Segmenten in der Abbildung zu ermitteln. Beschreiben Sie dabei den Inhalt der beiden Datenstrukturen (sortierte Liste der Haltepunkte und Ordnung der aktiven Segmente) an jedem Haltepunkt. Bei der sortierten Liste der Haltepunkte genügt es, nur jeweils die Änderungen anzugeben. Seite 2 von 3 D A B C Seite 3 von 3