Algorytmy i Struktury Danych, 12. ćwiczenia
2010-12-21
1 Plan
• definicja kolorowania krawędziowego,
• twiedzenie Vizinga,
• kolorowanie krawędziowe dla grafów dwudzielnych ∆ = 2k,
• ogólny algorytm dla kolorowania krawędziowego O(E∆ log ∆),
• matching w czasie O(E∆),
• 4–kolorowanie grafów kubicznych,
• algortym Noga Alona
2 Twierdzenie Vizinga
Twierdzenie 1 Jest G jest grafem prostym, to:
χ0(G) ≤ ∆ + 1
(χ0(G) minimalna liczba kolorów potrzebna do pokolorowania krawędziowego grafu G)
Następujący algorytm koloruje krawędziowo graf G:
1: G0← {pusty graf}
2: for all i ∈ 1, . . . , m do
3: Gi← Gi−1∪ {ei}
4: rozszerz kolorowanie Gi−1 do Gi 5: end for
Podać definicje wachlarza, dowód przez indukcję.
qued
1
3 Kolorowanie krawędziowe grafów dwudzielnych
Niech G regularny graf dwudzielny o stopniu wierzchołków 2k.
• podziel graf G na G1 i G2, tak że G1, G2 są stopnia 2k−1 — oblicz cykl Eulera, G1 otrzymuje krawędzie parzyste, G2nieparzyste.
• pokoloruj graf G1kolorami 1, . . . , 2k−1, pokoloruj graf G2kolorami 2k−1+ 1, . . . , 2k.
Czas: T (m) = m + 2 ∗ T (m/2), czyli T (m) = m log m.
Algorytm dla dowolnych grafów dwudzielnych
Jeśli graf nie jest regularny, to można, dodając nowe krawędzie i ewentualnie wierzchołki przerobić go na regularny.
Algorithm 1 Edge-Coloring(G,[a,. . . ,b])
1: if 4(G) = 1 then
2: for all e ∈ E(G) do
3: color[e] ← a
4: end for
5: else if 4(G) jest parzysta then
6: (G1, G2) ← Euler-Split(G)
7: Edge-Coloring(G1, [a, . . . , b(a + b)/2c])
8: Edge-Coloring(G2, [b(a + b)/2c + 1, . . . , b])
9: else
10: M ← Matching(G)
11: for all e ∈ E(M ) do
12: color[e] ← a
13: end for
14: Edge-Coloring(G − M, [a + 1, . . . , b]);
15: end if
Algorytm ma złożoność O(M (V, E)+E) log 4), gdzie M (V, E) to czas potrzebny na obliczenie skojarzenia.
Znajdowanie skojarzenie w czasie O(E4)
Każdej krawędzi przyznajemy wagę w(e), początkowo wszystkie wagi są równe 1. W kolejnych krokach prawdziwe będą następujące niezmienniki:
• dla każdej krawędzi e, 0 ≤ w(e) ≤ 4
• dla każdego wierzchołka v,P
u∈adj(v)w((v, u)) = 4.
Algorytm kończy działanie, gdy dla każdej krawędzi w(e) ∈ {0, 4}.
Do analizy złożoności potrzebna jest funkcja potencjału:
Φ =X
e∈E
w(e)2
Dodatkowo wiemy, że Φ0= n4/2, a Φkoniec = n42/2 = m4.
Po znalezieniu cyklu C = S ∪ T , potencjał zmienia się o:
2
X
e∈S
((w(e)+1)2−w(e)2)+X
e∈T
((w(e)−1)2−w(e)2) = |S|+|T |+2(w(S)−w(T )) ≥ |C|
Algorithm 2 Matching(G)
1: P ← ∅
2: M ← ∅
3: (C, P ) ← DFS-Cycle(G, P )
4: while C 6= ∅ do
5: (S, T ) ← Euler-Split(C)
6: if w(E[S]) ≥ w(E[T ]) then
7: (N, H) ← Redistribute-Weights(S, T, 1)
8: else
9: (N, H) ← Redistribute-Weights(T, S, 1)
10: end if
11: M ← M ∪ N
12: G ← G − (H ∪ N )
13: (C, P ) ← DFS-Cycle(G, P )
14: end while
15: return M
Algorytm Noga Alon’a
Lemat 1 Niech H 2r–regularny graf dwudzielny. Graf H można podzielić na dwa grafy dwudzielne H1, H2, które są r–regularne. Można to zrobić w czasie O(|E|).
Wystarczy dla każdej krawędzi e ∈ E z m(e) ≥ 2, przenieść po bm(e)/2c kopii krawędzi do H1 i H2. To co zostanie w H tworzy spójne składowe w których można obliczyć cykle Eulera, z każdego cyklu połowę krawędzi przeno- simy do H1, połowę do H2. Złożoność algorytmu jest liniowa względem liczby rozróżnialnych krawędzi.
Lemat 2 W dwudzielnym grafie regularnym G, doskonałe skojarzenie można obliczyć w czasie O(m log m).
Niech 2tbędzie najmniejszą potęgą 2 spełniającą 2t≥ m (m = kn/2). Niech α = b2t/kc, β = 2t− kα (czyli α = 2t div m, β = 2tmod m). Niech M będzie dowolnym doskonałym skojarzeniem w G (M nie musi zawierać krawędzi z G).
Niech H będzie grafem otrzymanym z G przez zamienienie każdej krawędzi z G przez α kopii, i dodanie β kopii krawędzi z M . Tak skonstruowany graf H jest 2t–regularny. Niech H1, H2 rozbicie H na grafy 2t−1–regularne. Jeden z tych grafów zawiera mniej złych krawędzi (takich które powstały z M ), dokładniej zawiera co najwyżej nβ/4 < nk/4 złych krawędzi. Po t krokach znajdziemy skojarzenie w H, które nie zawiera żadnych złych krawędzi. Całkowity czas działania algorytmu to O(mt) = O(m log m).
Kolorowanie w czasie O(E log E)
Niech T (n, k) czas potrzebny na pokolorowanie k–regularnego grafu dwu- dzielnego o n wierzchołkach.
3
• Jeśli k jest parzyste, to w czasie O(nk) można podzielić graf G na dwa krawędziowo rozłączne grafy k/2 regularne — H1, H2. Następnie koloru- jemy H1w czasie T (n, k/2). Mając dane pokolorowanie H1, na podstawie H2 konstruujemy graf H3 — początkowo H3 := H1, do H3 dodajemy krawędzie z H1 o kolejnych kolorach, tak by otrzymać graf 2r–regularny, k/2 ≤ 2r< k. Graf H3można pokolorować w czasie O(nk log k). Czyli:
T (n, k) ≤ O(nk log k) + T (n, k/2)
• Dla nieparzystego k, znajdujemy skojarzenie w czasie O(nk log(nk)), a potem postępujemy tak jak w poprzednim kroku. Czyli:
T (n, k) ≤ O(nk log(nk)) + T (n, (k − 1)/2)
• dla k = 1, mamy T (n, 1) = O(n), co daje w sumie:
T (n, k) = O(nk log(nk)) = O(E log E)
4 Algorytm 4–kolorowania grafów kubicznych
San Skulrattanakulchai: 4-edge-coloring graphs of maximum degree 3 in linear time. Inf. Process. Lett. 81(4): 191-195 (2002).
Twierdzenie 2 Niech G będzie grafem o maksymalnym stopniu równym 3.
Graf G można rozłożyć na dwa krawędziowo rozłączne podgrafy C i F , gdzie C jest zbiorem rozłącznych wierzchołkowo cykli, a F lasem o maksymalnym stopniu nie wiekszym niż 3.
Algorytm:
• pokoloruj zachłannie las F ,
• dla każdego cyklu Ci, pokoloruj Citak by było zgodne z kolorowaniem F . Definicje:
• wierzchołek jest k–brudny, jeśli sąsiaduje z krawędzią o kolorze k,
• jeśli wierzchołek nie sąsiaduje z krawędziami z F , to mówimy, że jest czysty.
4