Diskrete Mathematik 1 - CITS - Ruhr

Werbung
Ruhr-Universität Bochum
Lehrstuhl für Kryptologie und IT-Sicherheit
Prof. Dr. Alexander May
M. Ritzenhofen, M. Mansour Al Sawadi, A. Meurer
Lösungsblatt zur Vorlesung
Diskrete Mathematik 1
WS 2008/09
Blatt 6 / 25. November 2008 / Abgabe bis 02. Dezember 2008, 08.00 Uhr, in
die Kästen auf NA 02
AUFGABE 1 (6 Punkte):
In einem gerichteten Graphen D = (V, E) sei der Eingrad d− (v) eines Knotens v definiert als
die Anzahl der Kanten (w, v), die von einem beliebigen Knoten w ∈ V zu v führen. (Analog
definiert man den Ausgrad d+ (v) eines Knotens v als die Anzahl der Kanten (v, w), die von
v zu einem beliebigen Knoten w ∈ V führen.)
Geben Sie einen Algorithmus zur Bestimmung einer topologischen Sortierung an. Der Algorithmus soll darauf aufbauen, dass Sie die Eingrade der Knoten zählen und davon abhängig
den Knoten die Finish-Zahlen zuweisen. Eingabe des Algorithmus sei ein DAG.
Zeigen Sie die Korrektheit des Algorithmus und bestimmen Sie seine Laufzeit.
Lösungsvorschlag:
Idee bei der Kontruktion dieses Algorithmus: In einem Digraphen kann ein Knoten nur dann
Finish-Zahl 1 bekommen, wenn keine einzige Kante zu diesem Knoten führt, der Eingrad des
Knotens also 0 ist. Sind schon einige Finish-Zahlen zugewiesen, kann die folgende Finish-Zahl
nur an einen Knoten gegeben werden, zu dem nur Kanten von Knoten führen, die schon eine
Finish-Zahl zugeordnet bekommen haben. Um darauf aufbauend einen Algorithmus zu realisieren, werden die Eingrade der Knoten gezählt. Dann wird einem Knoten mit Eingrad 0 die
nächste Finish-Zahl zugewiesen und der Eingrad der Nachbarknoten jeweils um 1 reduziert.
Korrektheit des Algorithmus: Der Algorithmus terminiert, da die ersten Schleifendurchläufe für jeden Knoten einmal durchgeführt werden, der while-Schleifendurchlauf dann beendet wird, wenn alle Knoten besucht sind. Außerdem gibt es in jedem Stadium des Algorithmus
einen Knoten mit Eingrad 0, da sonst ein Kreis in D existiert, was ein Widerspruch dazu
ist, dass D DAG ist. (Den Kreis kann man konstruieren, indem man bei einem beliebigen
Knoten startet und dann vom jeweils besuchten Knoten zum Vorgängerknoten geht. Diesen
muss es immer geben, da jeder Knoten einen Eingrad größer 0 hat, es sei denn man trifft auf
einen bereits besuchten Knoten. Dann aber ist ein Kreis gefunden. Da der Graph endlich ist,
muss man irgendwann auf einen bereits besuchten Knoten stoßen.)
Algorithm 1 TopSort
Eingabe: DAG D = (V, E)
for v ∈ V do
incount(v) ← 0, f [v] ← 0
end for
for v ∈ V do
for u ∈ Γ(v) do
incount(u) ← incount(u) + 1
end for
end for
i←1
while Es gibt unbesuchte Knoten do
Wähle v ∈ V minimal mit incount(v) = 0 und f [v] = 0.
Q.Enqueue(v)
while (Q.IsEmpty 6= T RU E) do
v ← Q.Dequeue(Q)
f [v] ← i, i ← i + 1
for u ∈ Γ(v) do
incount(u) ← incount(u) − 1
if incount(u) = 0 and f [u] = 0 then
Q.Enqueue(u)
end if
end for
end while
end while
return f [v] für alle v ∈ V
Für die Korrektheit ist außerdem zu zeigen, dass nach Anwendung des Algorithmus TopSort
auf einen Digraphen G = (V, E) für alle u, v ∈ V gilt: f [u] > f [v] ⇒ (u, v) ∈
/ E.
Seien also u, v ∈ V mit f [u] > f [v]. Wir nehmen an, dass (u, v) ∈ E gilt. Dann ist der
Eingrad von v gleich incount(v) ≥ 1. Erster Fall: u wird vor v in die Queue eingefügt. Dann
wird u auch vor v aus der Queue entfernt und damit gilt f [u] < f [v], was einen Widerspruch
zur Voraussetzung bildet.
Werde nun also v vor u in die Queue eingefügt. Zu dem Zeitpunkt des Einfügens ist incount(v) =
0. Das heißt, für alle w ∈ V mit (w, v) ∈ E wurde incount(v) schon um 1 reduziert. Das
heißt aber, dass alle w ∈ V mit (w, v) ∈ E schon vor v betrachtet, also vor v in die Queue
eingefügt wurden. Dies bildet einen Widerspruch dazu, dass v vor u in die Queue eingefügt
wurde.
Also folgt (u, v) ∈
/ E.
Laufzeit des Algorithmus: Die erste for-Schleife wird für jeden Knoten einmal, also insgesamt |V |-mal durchlaufen. Aufwand des Setzens der Werte ist O(1).
Die zweite for-Schleife wird ebenfalls für jeden Knoten einmal durchlaufen. In der darin enthaltenen for-Schleife werden dann alle Nachbarknoten dieses Knotens betrachtet. Die doppelte for-Schleife wird daher |E|-mal durchlaufen. Der Aufwand für das Erhöhen des Eingrades
ist O(1).
Die Variablenzuweisungen danach bedeuten Aufwand O(1).
In den while-Schleifen wird jedes Element maximal einmal in die Queue eingefügt. Dementsprechend wird jeder Knoten auch maximal einmal aus der Queue entfernt und seine Nachbarn
betrachtet. Dies entspricht wieder |E| Schleifendurchläufen. Der Aufwand für die einzelnen
Wertzuweisungen sowie das Hinzufügen und Entfernen von Elementen aus der Queue hat
einen Aufwand von O(1).
Der Gesamtaufwand des Algorithmus ist daher O(|V |) + O(|E|) + O(|E|) = O(|V | + |E|).
AUFGABE 2 (4 Punkte):
Für beliebige Graphen G = (V, E) gilt: |E| ≥ 21 χ(G)(χ(G) − 1).
Hinweis: Nehmen Sie an, dass die Ungleichung nicht erfüllt sei, und führen Sie dies zu einem
Widerspruch, indem Sie die Knoten nach ihren Farben aufteilen.
Lösungsvorschlag:
Angenommen, es gelte |E| < 21 χ(G)(χ(G) − 1). Man sortiere die Knoten nach Farben
F1 , . . . , Fχ(G) und betrachte nur die Kanten, die Knoten aus zwei verschiedenen Farbmengen verbinden. Man konstruiere also einen Graphen H = (V 0 , E 0 ) mit χ(G) Knoten V 0 =
{F1 , . . . , Fχ(G) } und {Fi , Fj } ∈ E 0 genau dann, wenn in G mindestens eine Kante zwischen
einem Knoten aus Fi und einem Knoten aus Fj existiert. Auch gilt |E 0 | < 12 χ(G)(χ(G)−1), da
in H mehrere Kanten aus G zusammenfallen können, niemals aber
Da hinzukommen.
welche
|V 0 |
χ(G)
1
her ist H kein vollständiger Graph, denn dieser hätte genau 2 = 2 = 2 χ(G)(χ(G)−1)
Kanten. Daher gibt es in G zwei Farbmengen Fi und Fj , zwischen denen keine Kante existiert. Man färbe die Knoten aus diesem beiden Mengen mit der gleichen Farbe und erhält
somit eine χ(G) − 1 Knotenfärbung von G. Dies ist aber ein Widerspruch zur Minimalität
von χ(G). Also gilt |E| ≥ 21 χ(G)(χ(G) − 1).
AUFGABE 3 (4 Punkte):
Es sei G = (A ] B, E) ein bipartiter Graph mit |A| = m > n = |B|. Zeigen Sie, dass man G
∆(G)
in ∆(G) kantendisjunkte Matchings M1 , . . . , M∆(G) mit E = ∪i=1 Mi zerlegen kann.
Hinweis: Erweitern Sie G zu einem regulären bipartiten Graphen.
Lösungsvorschlag:
Man definiere einen Hilfsgraphen G0 = (V 0 , E 0 ). Dabei sei V 0 = A ] B 0 , wobei B 0 aus
0
B erweitert
P um m − n Knoten besteht. E enthalte alle 0Kanten aus E. Zudem füge man
∆(G)p − v∈A deg(v) Kanten geschickt hinzu, so dass G ein ∆(G)-regulärer Graph wird.
Beim Hinzufügen der Kanten kann das Problem auftreten, dass, um einen regulären Graphen
zu erzeugen, eine Kante zwischen zwei Knoten v ∈ A und w ∈ B 0 erforderlich wird, die schon
durch eine Kante verbunden sind. Um diesen Fall auszuschließen, kann man zum Beispiel zu
beiden Knotenmengen A und B 0 je ∆(G) Knoten hinzufügen und die beiden Partitionsmengen bis auf eine Kante voll verbinden. Von den beiden Knoten, deren Grad nun ∆(G) − 1
ist, verbinde man den neuen Knoten aus A mit w und den neuen Knoten aus B 0 mit v. So
entsteht insgesamt ein ∆(G)-regulärer Graph.
Damit ist G0 also bipartit und ∆(G)-regulär.
Der so konstruierte Graph G0 ist ein bipartiter ∆(G)-regulärer Graph. Nach Vorlesung (Beweis zum Satz über perfekte Matchings in bipartiten Graphen) ist χ0 (G0 ) = ∆(G), das heißt,
∆(G)
0
mit E 0 = ∪i=1 Mi0 .
G0 besitzt eine Zerlegung in kantendisjunkte Matchings M10 , . . . , M∆(G)
Für alle i setze man nun Mi = Mi0 ∩ E, das heißt, man entferne alle Kanten aus Mi0 , die nicht
in G liegen. M1 , . . . , M∆(G) ist damit eine Zerlegung von G in kantendisjunkte Matchings mit
∆(G)
∆(G)
∆(G)
∪i=1 Mi = ∪i=1 (Mi0 ∩ E) = (∪i=1 Mi0 ) ∩ E = E 0 ∩ E = E.
Bemerkung: Die so konstruierten Matchings sind im Allgemeinen nicht maximal.
AUFGABE 4 (6 Punkte):
Für r, s ∈ N sei Kr,s = (A ] B, E) der vollständige bipartite Graph mit |A| = r und |B| = s.
Beweisen Sie die folgenden Aussagen:
(a) χT (Kp,p ) = p + 2 für p ∈ N.
(b) χT (Kp,q ) = q + 1 für p, q ∈ N, q > p.
Die Definition von χT (G) findet sich in der Präsenzübung, Aufgabe 3.
Lösungsvorschlag:
(a) Wir zeigen die Gleichheit durch die zwei Ungleichungen χT (Kp,p ) ≤ p+2 und χT (Kp,p ) ≥
p + 2. Gelten beide Ungleichungen, so folgt χT (Kp,p ) = p + 2.
Zunächst zeigen wir χT (Kp,p ) ≤ p + 2:
Es ist ∆(G) = p, da Kp,p vollständig und bipartit ist. Nach Aufgabe 3 gibt es dann eine
Zerlegung der Kanten von Kp,p in ∆(G) kantendisjunkte Matchings. Man färbe diese in
∆(G) verschiedenen Farben. Die Knotenmenge lässt sich in zwei Partitionen A und B
von nicht adjazenten Knoten aufteilen, die daher jeweils in einer Farbe gefärbt werden
können. Diese Farben seien verschieden von denen der Kantenfärbung. Insgesamt haben
wir so eine Totalfärbung mit p + 2 Farben konstruiert, es ist also χT (G) ≤ p + 2.
Nun zeigen wir χT (Kp,p ) ≥ p + 2:
Sei Kp,p = (A ] B, E). Zum Färben der Knotenmenge müssen 2 verschiedene Farben
gewählt werden, da die Mengen A und B vollverbunden sind. Alle Kanten benötigen
andere Farben, da sie jeweils mit einem Knoten aus A und einem aus B inzidieren.
Jeder Knoten v ∈ A ] B hat Grad deg(v) = p. An diesem Knoten treffen also p Kanten,
die alle in verschiedenen Farben gefäbt werden müssen, aufeinander. Es werden also
mindestens p + 2 Farben zur Totalfärbung benötigt.
Insgesamt folgt χT (Kp,p ) = p + 2.
(b) Auch hier zeigen wir die Gleichheit durch die zwei Ungleichungen χT (Kp,q ) ≤ q + 1 und
χT (Kp,q ) ≥ q + 1. Gelten beide Ungleichungen, so folgt χT (Kp,p ) = q + 1.
Zunächst χT (Kp,q ) ≤ q + 1: Sei Kp,q = (A ] B, E) mit |A| = p und |B| = q. Nach
Aufgabe 3 gibt es eine Zerlegung des Kp,q in q kantendisjunkte Matchings M1 , . . . , Mq
mit ∪qi=1 Mi = E. Man färbe jedes dieser Matchings in einer Farbe und die Knoten aus
A in einer weiteren Farbe. Sei nun v ∈ B ein beliebiger Knoten. Es ist deg(v) = p. Der
Knoten ist also zu p Kanten inzident. Da q > p ist, gibt es ein Matching Mj , so dass
dieser Knoten zu keiner Kante des Matchings inzident ist. Man färbe v in derselben
Farbe wie dieses Matching. Dies lässt sich für jedes v ∈ B durchführen, so dass wir eine
(q + 1)-Totalfärbung des Kp,q erhalten, also χT (Kp,q ) ≤ q + 1.
Die andere Ungleichung folgt direkt aus der Präsenzübung, Aufgabe 3 (a): χT (Kp,q ) ≥
∆(G) + 1 = q + 1.
Es folgt χT (Kp,q ) = q + 1.
Herunterladen