Informatik IV

Werbung
Informatik IV
SS 2006
Institut für Informatik, Abt. I
Christel Baier, Sascha Klüppelholz, Jörn Ossowski,
Christiane Beyer, Stefan Dombrowski, Li Le, Andreas Lenerz, Dennis Mitzel,
Rebecca Reiffenhäuser, Uwe Schuster, Manuel Wedemeyer, Yang Guang
4. Übungsblatt
Hinweise zum Übungsbetrieb finden Sie unter
http://web.informatik.uni-bonn.de/I/Lehre/Vorlesungen/InfoIV-06/Informatik IV SS06/
Die Abgabe der theoretischen Übungen erfolgt jeweils mittwochs vor Beginn der Vorlesung
(bis 10 Minuten nach 11 Uhr) in Hörsaal D. Diejenigen, die diesen Termin nicht wahrnehmen können,
haben die Möglichkeit, ihre Lösungen bis dienstags um 18 Uhr in den Briefkasten “Institut für
Informatik Abteilung I, Prof. Baier und Mitarbeiter” im Foyer des 1. Stocks einzuwerfen.
Abgabe:
Di, 02.5.06 18 Uhr Briefkasten
oder Mi., 03.05.06. 11:10 HS D
Besprechung: 10.05.2006 - 16.05.2006
Alle Übungen finden in N327 statt,
außer der Montagsübung von 17-19 Uhr.
Diese findet in Raum A121 statt.
Hinweis: Die Montagsübungen vom 1.5. finden wegen des Feiertags am darauffolgenden Mittwoch den 3.5. statt. Anwesenheitspflicht besteht nicht.
1
Aufgabe 4.1 [Kantenanzahl vs. Zush.komponenten, 2 Pkt.](0401)
Sei G = (V, E) ein ungerichteter Graph mit |V | = n ≥ 1 und k Zusammenhangskomponenten.
Zeigen Sie: |E| ≥ n − k
Aufgabe 4.2 [DFS/BFS, 2 Pkt.]
(22)
a) Geben Sie die Besuchsreihenfolge der Knoten an, wenn in folgendem Graphen mit der
angegebenen Adjazenzlistendarstellung eine DFS-Traversierung beginnend in Knoten v2
durchgeführt wird, wobei nur die von v2 erreichbaren Knoten besucht werden. Geben Sie
zudem wie in den Beispielen in der Vorlesung auch die Schachtelung der DFS-Aufrufe
für die rekursive Formulierung der Tiefensuche an.
b) Geben Sie die Besuchsreihenfolge der Knoten an, wenn in folgendem Graphen mit der
angegebenen Adjazenzliste eine BFS-Traversierung beginnend in Knoten v1 durchgeführt
wird, wobei nur die von v1 erreichbaren Knoten besucht werden.
v1
v2
v6
v3
v4
v5
v7
v1
v3
v6
v2
v3
v4
v3
v6
v4
v5
v5
v6
v6
v7
v7
v5
v2
Aufgabe 4.3 [Richtig oder falsch, 6 Pkt.]
(30)
Welche der folgenden Aussagen sind richtig? Begründen Sie Ihre Antwort.
Sei G = (V, E) ein gerichteter Graph, n = |V |, und sei eine (feste) Adjazenzlistendarstellung
von G gegeben, wobei die Listenköpfe in einem Array abgelegt sind.
a) Es ist möglich, daß
(i) der erzeugte DFS-Wald aus einem Baum besteht, während
(ii) der erzeugte BFS-Wald jedoch aus zwei oder mehreren Bäumen hervorgeht.
b) Es ist möglich, daß der erzeugte DFS-Wald aus n Bäumen der Höhe 0 besteht, wenn es
einen Knoten v mit Post∗ (v) = V gibt.
2
c) Falls |Post(v)| ≤ k für alle Knoten v ∈ V , so besteht der DFS-Wald aus Bäumen vom
Verzweigungsgrad k.
d) Falls |Post(v)| = k für alle Knoten v ∈ V , so hat jeder innere Knoten v des erzeugten
BFS-Waldes genau k Söhne.
Aufgabe 4.4 [DFS/BFS-Wald, 2 Pkt.]
(0402)
Geben Sie ein Beispiel für einen Digraphen G = (V, E) und einen Teilgraphen T = (V, E ′ ),
wobei E ′ ⊆ E, so dass folgende Aussagen gelten:
(1) T ist ein Wald.
(2) T kann weder durch ein Tiefen- noch durch eine Breitensuche aus G entstehen. (Unabhängig von der Knotenreihenfolge oder Anordnung der Adjazenzlisten)
Begründen Sie Ihre Antwort.
Aufgabe 4.5 [Endliche Automaten, 3 Pkt.]
(31)
Gegeben ist ein nichtdeterministischer endlicher Automat M = (Q, Σ, δ, Q0 , F). Skizzieren Sie
Algorithmen mit der Laufzeit O (n + m) für folgende Problemstellungen, wobei n = |Q|, m =
|{(q, a, p) ∈ Q × Σ × Q : p ∈ δ(q, a))}| :
a) Leerheitsproblem : Ist die von M akzeptierte Sprache L (M ) leer?
b) Redundanzproblem : Bestimme die Zustände q ∈ Q, für welche die Sprache L (Mq ) leer
ist. Dabei ist Mq = (Q, Σ, δ, {q}, F), d.h. der endliche Automat, welcher aus M hervorgeht, wenn q als einziger Anfangszustand ausgezeichnet wird.
Sie können davon ausgehen, daß
(1) δ durch Adjazenzlisten dargestellt ist, wobei die Listenköpfe in einem Array verwaltet
werden.
(2) Die Anfangszustandsmenge Q0 und die Endzustandsmenge F durch Bitvektoren dargestellt sind.
WICHTIG : Die Laufzeit O (n +m) darf nicht überschritten werden (unabhängig von der Größe
von Q0 und F).
3
Aufgabe 4.6 [Graphtraversierung, 4 + 4 + 2 = 10 Pkt.]
(02p)
Implementieren Sie ein Programm, welches von der Kommandozeile aus einen ungerichteten
Graphen einliest. Verwenden Sie dabei als Format folgende Textkodierung einer Adjazenzliste:
Am Anfang steht die Gesamtzahl aller Knoten des Graphen. Dann folgen Zeilen, welche die
Nummer des aktuellen Knotens beinhalten, gefolgt von den Nummern der zu diesem Knoten
adjazenten Knoten. Jede Zeile wird mit einem „;“ abgeschlossen.
Beispiel (Das Haus vom Nikolaus):
5;
1 2
2 1
3 1
4 2
5 2
3;
3 4 5;
2 4 5;
3 5;
3 4;
Bemerkung: Dieses Eingabeformat stellt nicht sicher, daß es sich um eine korrekte Adjazenzliste handelt, d.h. ob zu jedem Listenverweis zu einem Nachfolgeknoten bei diesem auch einer
auf den Vorgängerknoten vorhanden ist. Ihr Programm muß dies nicht überprüfen, sie dürfen
davon ausgehen, daß die Eingabe korrekt ist.
Verwenden Sie intern genau die gegebene Adjazenzlistendarstellung und keine Matrixdarstellung.
(a) Implementieren Sie eine Tiefensuche (DFS) auf dem eingelesenen Graphen von einem
Anfangsknoten v, welche die von v erreichbaren Zustände besucht. Geben Sie die Besuchsreihenfolge auf dem Bildschirm aus. Der Anfangsknoten v wird dabei als zusätzliche Eingabe vorher eingelesen.
(b) Implementieren Sie eine Breitensuche (BFS) von einem bestimmten Anfangsknoten v,
die den von v erreichbaren Teil des Graphen besucht. Geben Sie auch hier die Besuchsreihenfolge auf dem Bildschirm aus. Verwenden Sie nun diesen Algorithmus zum Finden
eines kürzesten Weges von einem bestimmten Knoten zu einem anderen. Start- und Zielknoten werden als zusätzliche Eingabe vorher eingelesen. Ist der zu suchende Knoten
nicht erreichbar, so soll das Programm „infinity“ ausgeben.
(c) Erweitern Sie Ihr Programm, indem Sie mithilfe der Breiten- oder der Tiefensuche einen
Algorithmus implementieren, der alle Zusammenhangskomponenten des eingegebenen
Graphen findet und korrekt in demselben Format ausgibt, welcher zum Einlesen verwendet wird (s.o.).
Bemerkung zur Implementation und zur Abgabe: Es gelten im wesentlichen dieselben Regeln, welche schon bei Aufgabe 2.5 Anwendung fanden. Sie dürfen für Ihre Implementation
JAVA oder C/C + + verwenden. Die Abgabe der Programmieraufgaben wird in der Woche
vom 08.05.2006 bis 12.05.2006 im UNIX CIP-Pool (2. Stock) stattfinden. Die genauen Termine werden in Aushängen an der Tür des CIP-Pools bekannt gegeben. Dort müssen Sie sich auch
für die Abgabe eintragen.
4
Herunterladen