Grafy (1): wprowadzenie
Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków
UTP Bydgoszcz
11
Graf
Oznaczmy przez [V ]2 zbiór wszystkich dwuelementowych podzbiorów zbioru V , a przez [V ]2kol zestaw dwuelementowych kolekcji zbioru V . Definicja.
Grafem prostym nazywamy parę G = (VG, EG), gdzie VG jest skończonym zbiorem oraz EG jest podzbiorem zbioru [VG]2.
Elementy ze zbioru VG to wierzchołki grafu (zwane też węzłami lub punktami grafu), a elementy ze zbioru EG to krawędzie (nie mogą się powtarzać, nie mogą mieć obu końców w tym samym wierzchołku).
Definicja.
Grafem (grafem ogólnym, multigrafem) nazywamy parę G = (VG, EG), gdzie VG jest skończonym zbiorem oraz EG jest kolekcją elementów ze zbioru [VG]2kol. Elementy ze zbioru VG to wierzchołki grafu, a elementy z kolekcji EG to krawędzie (mogą się powtarzać, mogą też mieć oba końce w tym samym wierzchołku).
Graf prosty
Uwaga. Grafy da się zilustrować: punkty na płaszczyźnie to wierzchołki, natomiast krzywe łączące te punkty to krawędzie. Ten sam graf można narysować na kilka sposobów (grafy to obiekty algebraiczne, nie geometryczne).
Przykład.
VG = {1, 2, 3, 4}, EG = {{1, 2}, {1, 3}, {2, 4}, {3, 4}}.
Oczywiście, [VG]2= {{1, 2}, {1, 3}, {1, 4}, {2, 3}, {2, 4}, {3, 4}},
1
4 2
3
lub
4
3 1
2
Graf ogólny, przykład
VG = {1, 2, 3, 4, 5},
EG = {{1, 2}kol, {1, 3}kol, {1, 3}kol, {1, 3}kol, {1, 4}kol, {2, 3}kol, {2, 4}kol, {2, 4}kol, {3, 3}kol, {3, 4}kol, {3, 4}kol, {3, 4}kol, {5, 5}kol, {5, 5}kol}kol.
2 4
5 3
1
Stopień wierzchołka
Krawędź łączącą wierzchołki v oraz w oznaczamy vw .
Mówimy wtedy, że wierzchołki v i w są sąsiadami, a krawędź vw jest incydentna do v (i do w ).
Definicja. Stopień wierzchołka v w grafie (oznaczany deg v ) to liczba dwuwierzchołkowych krawędzi o jednym końcu v plus podwojona liczba pętli o wierzchołku v .
Przykład.
Każdy wierzchołek w grafie po lewej stronie jest stopnia drugiego, a w grafie po prawej − stopnia trzeciego.
Przykład. Na grafie z poprzedniego slajdu wierzchołki o numerze 2 oraz 5 są stopnia czwartego.
Stopień wierzchołka
Niech G = (VG, EG) będzie grafem ogólnym.
Fakt.
X
v ∈VG
deg v = 2kEGk.
Uzasadnienie. Krawędź grafu jest incydentna do dwóch wierzchołków.
Każda krawędź (także pętla) dodaje dwa do sumy stopni.
Wniosek. Liczba wierzchołków o stopniu nieparzystym jest parzysta.
Izomorfizm grafów
Definicja.
Niech G (VG, EG) i H(VH, EH) będą grafami bez krawędzi wielokrotnych.
Mówimy, że graf G jest izomorficzny z grafem H, jeżeli istnieje bijekcja („przeetykietowanie”) α : VG → VH taka, że uw jest krawędzią grafu G wtedy i tylko wtedy, gdy α(u)α(w ) jest krawędzią grafu H. Piszemy G ' H.
Definicja.
Niech G (VG, EG) i H(VH, EH) będą grafami ogólnymi. Mówimy, że graf G jest izomorficzny z grafem H, jeżeli istnieją bijekcje α : VG → VH oraz β : EG → EH takie, że krawędź e ze zbioru EG łączy wierzchołki u oraz w ze zbioru VG wtedy i tylko wtedy, gdy krawędź β(e) ze zbioru EH łączy wierzchołki α(u) oraz α(w ) (ze zbioru VH). Piszemy G ' H.
Droga
Definicja.
Drogą∗ w grafie G nazywamy ciąg krawędzi e1e2. . . en
(wraz z ciągiem wierzchołków v1, v2, . . . , vn, vn+1) taki, że ei = {vi, vi +1} dla i = 1, 2, . . . , n.
Jeśli każda krawędź ei jest jedyną krawędzią od vi do vi +1, to drogę e1e2. . . en możemy opisać podając te wierzchołki v1v2. . . vnvn+1.
∗spotyka się różne nazwy (na przykład: ścieżka, marszruta)
Droga prosta
Drogą prostą nazywamy drogę, której wszystkie krawędzie są różne.
Droga taka może przechodzić przez jakiś wierzchołek więcej niż raz, ale nie przechodzi przez żadną krawędź więcej niż raz.
Długość drogi e1e2. . . en od wierzchołka v1 do wierzchołka vn+1 wynosi n.
Gdy v1= vn+1, to mówimy, że droga jest zamknięta.
Przykład. Drogą prostą jest v1v3v3v4.
v2 v4
v3
v1
Drogą zamkniętą jest v1v2v3v4v2v1, ale nie jest drogą prostą.
Definicje
Odległość między wierzchołkami to długość najkrótszej drogi między tymi punktami.
Cykl to droga prosta, zamknięta, w której jedynym powtarzającym się wierzchołkiem jest początek (będący także końcem).
Przykład. v1 v2
v3 v4
Drogą prostą (o długości 4) jest v1v2v4v3v2. Cyklem (o długości 3) jest v3v2v4v3.
Cyklem (o długości 4) jest v3v1v2v4v3.
Opisywanie grafu: słownik
Graf można opisać podając słownik, czyli listę (tablicę) wierzchołków v i przypisany im zbiór wierzchołków sąsiednich a(v ).
Zbiór wierzchołków, to zbiór kluczy słownika.
Przykład. Zbiór kluczy słownika: {v1, v2, v3, v4, v5, v6}.
v1 v2
v3 v4
v5 v6
Lista:
a(v1) = {v3, v4, v5, v6} a(v2) = {v4, v6} a(v3) = {v1, v5, v6} a(v4) = {v1, v2, v4, v6} a(v5) = {v1, v3} a(v6) = {v1, v2, v3, v4}
Jeszcze kilka definicji
Niech G1 = (V1, E1) oraz G2 = (V2, E2) będą grafami.
Definicja.
suma grafów G1∪ G2= (V1∪ V2, E1∪ E2);
przecięcie grafów G1∩ G2 = (V1∩ V2, E1∩ E2);
podgraf grafu G1 to graf H taki, że V (H) ⊆ V (G1) oraz E (H) ⊆ E (G1);
graf spójny to graf, w którym każde dwa wierzchołki łączy jakaś droga;
graf niespójny to graf, który nie jest spójny;
spójna składowa grafu G1 to spójny podgraf, który nie jest zawarty w większym podgrafie spójnym grafu G1.
Graf acykliczny
Graf acykliczny, to graf nie zawierający cykli.
Przykład.
Ten graf jest acykliczny i niespójny.
Jego podgraf o wierzchołkach v1, v2, v3, v4 i trzech (oczywistych) krawędziach jest spójny.
v7 v2
v4
v5
v6 v3
v1
Droga acykliczna
Droga jest acykliczna, jeśli podgraf składający się z wierzchołków i krawędzi tej drogi jest acykliczny.
Przykład.
v2 v4
v5
v6 v3
v1
Ten graf nie jest acykliczny (jest za to spójny).
Droga v2v4v1v3v5v6 jest .
Droga acykliczna
Droga jest acykliczna, jeśli podgraf składający się z wierzchołków i krawędzi tej drogi jest acykliczny.
Przykład.
v2 v4
v5
v6 v3
v1
Droga v2v4v1v3v5v6 jest acykliczna.
a
Cykl
Fakt.
Dowolna droga zamknięta e1. . . en o długości co najmniej trzy o różnych wierzchołkach v1, . . . , vn jest cyklem.
Uzasadnienie.
Skoro wierzchołki v1, . . . , vnsą różne, więc krawędzie e1, . . . , en−1 są różne.
Ponadto, en= {v1, vn}. Skoro n 6= 1 i n 6= 2, więc en= {v1, vn} 6= {vi, vi +1} = ei dla i = 1, 2, . . . , n − 1.
Droga ta jest więc cyklem.
Droga z różnymi wierzchołkami
Fakt.
Droga jest prosta i acykliczna wtedy i tylko wtedy, gdy ma wszystkie wierzchołki różne.
Uzasadnienie.
⇐
Jeśli droga ma wszystkie wierzchołki różne, to ma różne krawędzie.
Jest prosta i acykliczna.
⇒
Przypuścmy, że droga prosta ma powtarzające się wierzchołki vi oraz vj, gdzie i oraz j wybieramy tak, by i < j oraz, by j − i było możliwie najmniejsze. Wtedy vivi +1. . . vj jest cyklem. Początkowa droga nie jest więc acykliczna.
Prosta droga acykliczna
Twierdzenie.
Jeżeli u oraz v są różnymi wierzchołkami grafu G i jeżeli istnieje w grafie droga z u do v , to istnieje w G prosta droga acykliczna z u do v .
Dowód.
Wybierzmy najkrótszą (w grafie) drogę od u do v . Powiedzmy jest nią v1. . . vn+1. Możemy zakładać, że vi 6= vj dla i = 1, 2, . . . , n, gdyż w przeciwnym razie, gdyby vi = vj (dla pewnych i < j ), to droga vivi +1. . . vj byłaby zamknięta, a po jej usunięciu nadal byśmy mieli drogę (i to krótszą) od u do v . Wierzchołki tej drogi są różne, z poprzedniego faktu wiemy, że droga jest prosta i acykliczna.
Cykle
Wniosek.
Każda krawędź w zamkniętej drodze prostej należy do jakiegoś cyklu.
Dowód.
Gdy krawędź jest pętlą, to jest cyklem.
Gdy krawędź e łącząca wierzchołki u oraz v nie jest pętlą, to usuwając ją (chwilowo) z grafu pozostanie droga z u do v . Z poprzedniego twierdzenia, istnieje droga acykliczna z u do v (nie zawiera ona krawędzi e, bo ją chwilowo usunęliśmy). Dodając e otrzymamy cykl.
Fakt. Usuwając krawędź e z grafu, co będziemy jeszcze robić, uzyskamy podgraf, przy czym V (G \ {e}) = V (G ), ale E (G \ {e}) = E (G ) \ {e}.
Jedyna droga prosta
Twierdzenie. Jeśli u oraz v są różnymi wierzchołkami grafu acyklicznego, to istnieje co najwyżej jedna droga prosta między u i v w tym grafie.
Dowód.
Założmy, że istnieje więcej dróg prostych między u i v . Wybierzmy z nich dwie d1 oraz d2. Skoro drogi są różne, znajdziemy na pierwszej drodze wierzchołek v+, który nie leży na drugiej drodze. Podążając d1 od v+ w stronę u albo spotkamy się z drogą d2 w jakimś wierzchołku w+, albo spotkamy się z d2 dopiero w u. Podobnie, podążając d1 od v+ w stronę v albo spotkamy się z drogą d2 w jakimś wierzchołku w−, albo spotkamy się z d2 dopiero w v . W każdym z tych przypadków graf zawiera cykl
przechodzący przez v+, w+ (albo u), w− (albo v ), a graf jest acykliczny.
Jeszcze kilka definicji
Definicja.
Graf regularny to graf, w którym wszystkie wierzchołki mają ten sam stopień.
Graf pusty to graf bez krawędzi.
Graf pełny to graf bez pętli i bez krawędzi wielokrotnych, w którym każde dwa wierzchołki są połączone krawędziami.
Przykład. Graf pełny K4.
1
4 2
3
Graf K
nFakt.
Graf pełny o n wierzchołkach ma wszystkie wierzchołki stopnia n − 1, jest więc grafem regularnym. Wszystkie grafy pełne o n wierzchołkach są izomorficzne, oznaczamy je Kn.
Fakt.
Dla każdego m = 1, 2, . . . , n graf pełny Kn zawiera podgrafy izomorficzne z grafem Km. Takich podgrafów jest tyle, ile możliwości wyboru m wierzchołków z n, czyli mn.
Graf eulerowski
Definicje.
Droga Eulera, to droga prosta zawierająca wszystkie krawędzie grafu.
Cykl Eulera to zamknięta droga Eulera.
Graf eulerowski to graf posiadający cykl Eulera.
Przykład grafu eulerowskiego i nieeulerowskiego
v1 v4
v2 v3
v1 v4
v2 v3
Siedem mostów królewieckich (schemat)
Pokażemy, że ten graf nie jest eulerowski.
Mosty królewieckie i graf mostów królewieckich
Pokażemy, że ten graf nie jest eulerowski.
Cykl Eulera
Twierdzenie.
Graf zawierający cykl Eulera musi mieć wszystkie wierzchołki stopnia parzystego.
Dowód.
Wybieramy środek dowolnej krawędzi cyklu Eulera i poruszamy się po tym cyklu w wybraną (dowolnie) stronę wymazując fragmenty krawędzi po których szliśmy. Zauważmy, że przechodząc przez każdy wierzchołek albo wymazujemy pętlę (pętla zwiększa stopień wierzchołka o dwa), albo wycieramy dwie krawędzie - tę którą przyszliśmy do wierzchołka i tę, którą wyszliśmy z wierzchołka. Za każdym razem zmniejszamy stopień
wierzchołka o dwa. Na końcu (przeszliśmy cały cykl) wszystkie krawędzie zostaną wymazane i każdy wierzchołek będzie miał stopień zero.
Wszystkie wierzchołki na początku musiały więc mieć stopień parzysty.
Cykl Eulera
Wniosek.
Graf mający drogę Eulera albo ma dwa wierzchołki stopnia nieparzystego, albo nie ma wierzchołków stopnia nieparzystego.
Dowód.
Niech ta droga Eulera zaczyna się w wierzchołku u, a kończy w v .
Jeśli u = v , to droga tworzy cykl, i z poprzedniego twierdzenia wiemy, że każdy wierzchołek jest stopnia parzystego.
Jeśli u 6= v , to na chwilę dodajemy do grafu krawędź uv uzyskując cykl Eulera (w grafie z dodatkową krawędzią). W tym nowym grafie, z poprzedniego twierdzenia, wszystkie wierzchołki są parzystego stopnia.
Po usunięciu krawędzi uv jedynie u i v są stopnia nieparzystego.
Cykl
Lemat.
Jeżeli wszystkie wierzchołki grafu G są stopnia parzystego (0 oczywiście wykluczamy), to G zawiera cykl.
Dowód.
Wybieramy dowolną krawędź v0v1. Z v1 przechodzimy kolejną krawędzią do jakiegoś sąsiedniego wierzchołka, nazwijmy go v2. Z v2 (inną krawędzią niż v1v2) przechodzimy do kolejnego wierzchołka, i tak dalej. Każdy wierzchołek jest stopnia parzystego, więc „wchodząc” do niego mamy też drogę „wyjścia”. Musimy więc trafić w końcu na wierzchołek, w którym już byliśmy − otrzymamy cykl.
Cykl Eulera
Uwaga.
Nie każdy graf, którego wszystkie wierzchołki są stopnia parzystego zawiera cykl Eulera.
v1 v4
v2 v3
Cykl Eulera, twierdzenie Eulera
Twierdzenie (Eulera).
Jeżeli wszystkie wierzchołki grafu G są stopnia parzystego i jeżeli G jest spójny, to G zawiera cykl Eulera.
Dowód indukcyjny ze względu na liczbę n krawędzi grafu.
Gdy n = 1,
(graf ma jedną krawędź - pętlę, bo wierzchołek jest stopnia parzystego), to ta pętla tworzy cykl.
Dowód twierdzenie Eulera, ciąg dalszy
Załóżmy, że n 2 oraz że dowolny graf spójny o k wierzchołkach (dla
k < n), przy czym wszystkie te wierzchołki są parzystego stopnia, zawiera cykl Eulera. Z poprzedniego lematu wiemy, że G zawiera jakiś cykl C.
Dowód twierdzenie Eulera, ciąg dalszy
Jeśli usuniemy z grafu G : wszystkie krawędzie z C oraz te wierzchołki z C , które po usunięciu krawędzi są stopnia 0, to otrzymamy mniejszy graf G−.
Gdy G− jest pusty, to C jest cyklem Eulera.
Dowód twierdzenie Eulera, ciąg dalszy
Gdy G− nie jest pusty, to nadal każdy jego wierzchołek jest parzystego stopnia. Dzielimy G− na spójne składowe G1, . . . , Gm. Każda taka składowa, zgodnie z założeniem indukcyjnym, jest grafem eulerowskim (ma cykl Eulera). Ponadto (nasz graf jest spójny) każda taka składowa ma wierzchołek wspólny z C .
Dowód twierdzenie Eulera, ciąg dalszy
Cykl Eulera w G uzyskamy przechodząc przez kolejne wierzchołki cyklu C , przy czym napotkawszy wierzchołek wspólny z jakimś Gi (1 ¬ i ¬ m) przechodzimy przez cykl Eulera w tym Gi wracając do tego samego wierzchołka i kontynuujemy poruszanie się po cyklu C .
Dowód twierdzenie Eulera, ciąg dalszy
Cykl Eulera w G uzyskamy przechodząc przez kolejne wierzchołki cyklu C , przy czym napotkawszy wierzchołek wspólny z jakimś Gi (1 ¬ i ¬ m) przechodzimy przez cykl Eulera w tym Gi wracając do tego samego wierzchołka i kontynuujemy poruszanie się po cyklu C .
Dowód twierdzenie Eulera, ciąg dalszy
Cykl Eulera w G uzyskamy przechodząc przez kolejne wierzchołki cyklu C , przy czym napotkawszy wierzchołek wspólny z jakimś Gi (1 ¬ i ¬ m) przechodzimy przez cykl Eulera w tym Gi wracając do tego samego wierzchołka i kontynuujemy poruszanie się po cyklu C .
Dowód twierdzenie Eulera, ciąg dalszy
Cykl Eulera w G uzyskamy przechodząc przez kolejne wierzchołki cyklu C , przy czym napotkawszy wierzchołek wspólny z jakimś Gi (1 ¬ i ¬ m) przechodzimy przez cykl Eulera w tym Gi wracając do tego samego wierzchołka i kontynuujemy poruszanie się po cyklu C .
Dowód twierdzenie Eulera, ciąg dalszy
Cykl Eulera w G uzyskamy przechodząc przez kolejne wierzchołki cyklu C , przy czym napotkawszy wierzchołek wspólny z jakimś Gi (1 ¬ i ¬ m) przechodzimy przez cykl Eulera w tym Gi wracając do tego samego wierzchołka i kontynuujemy poruszanie się po cyklu C .
Dowód twierdzenie Eulera, ciąg dalszy
Cykl Eulera w G uzyskamy przechodząc przez kolejne wierzchołki cyklu C , przy czym napotkawszy wierzchołek wspólny z jakimś Gi (1 ¬ i ¬ m) przechodzimy przez cykl Eulera w tym Gi wracając do tego samego wierzchołka i kontynuujemy poruszanie się po cyklu C .
Dowód twierdzenie Eulera, ciąg dalszy
Cykl Eulera w G uzyskamy przechodząc przez kolejne wierzchołki cyklu C , przy czym napotkawszy wierzchołek wspólny z jakimś Gi (1 ¬ i ¬ m) przechodzimy przez cykl Eulera w tym Gi wracając do tego samego wierzchołka i kontynuujemy poruszanie się po cyklu C .
Cykl Eulera
Uwaga.
Grafy niespójne też mogą zawierać cykl Eulera - gdy do grafu eulerowskiego dołożymy dowolną liczbę wierzchołków stopnia zero (dokładamy tylko wierzchołki, nie dokładamy krawędzi) uzyskamy graf eulerowski.
v1 v4
v2
v3 v5
v6 v7
Droga Eulera
Wniosek.
Skończony graf spójny mający dokładnie dwa wierzchołki nieparzystego stopnia ma drogę Eulera.
Dowód.
Niech u oraz v będą wierzchołkami o stopniu nieparzystym. Na chwilę dodajemy do grafu krawędź uv . Nowy graf ma wszystkie wierzchołki stopnia parzystego, z twierdzenia Eulera zawiera więc cykl Eulera.
Usuwając krawędź uv pozostanie nam droga Eulera.
Uwaga.
Twierdzenie Eulera mówi kiedy graf ma cykl Eulera, ale nie daje przepisu jak go znaleźć.
Algorytm Fleury’ego szukania cyklu lub drogi Eulera
Algorytm Fleury’ego
Na wyjściu dostaniemy ciąg VS będący ciągiem wierzchołków oraz ciąg ES będący ciągiem krawędzi drogi (cyklu) Eulera.
1 Wybierz dowolny wierzchołek v stopnia nieparzystego, o ile istnieje.
Jeśli nie ma wierzchołka stopnia nieparzystego, to wybierz dowolny wierzchołek v . Niech VS = v , ES jest pusty.
2 Jeśli z v nie wychodzi żadna krawędź, to zakończ.
3 Jeśli z v wychodzi dokładnie jedna krawędź e (do wierzchołka, który oznaczymy w ), to usuń e z EG oraz usuń v z VG i przejdź do kroku 5.
4 Jeśli z v wychodzi więcej niż jedna krawędź, to wybierz tę krawędź e (z u do jakiegoś w ), po usunięciu której graf pozostanie spójny (jeśli to niemożliwe, to mamy przypadek 3). Usuń e z EG.
5 Dołącz w na końcu VS , dołącz e na końcu ES . Przejdź do kroku drugiego zastępując v przez w .
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (1/9).
v1
v2
v3
v5 v4
b a
c h g
e d f
(1) Wybieramy dowolny wierzchołek (tu wszystkie są parzystego stopnia), na przykład v5. VS = v5, ES jest pusty.
(4) Wybieramy dowolną krawędź z niego wychodzącą, na przykład e i usuwamy ją z grafu (graf pozostanie spójny).
(5) VS = v5v4, ES = e.
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (2/9).
v1
v2
v3
v5 v4
b a
c h g
d f
(4) Wybieramy dowolną krawędź wychodzącą z v4, na przykład f i usuwamy ją z grafu (graf pozostanie spójny).
(5) VS = v5v4v5, ES = ef .
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (3/9).
v1
v2
v3
v5 v4
b a
c h g
d
(4) Wybieramy dowolną krawędź z wychodzącą z v5, na przykład h i usuwamy ją z grafu (graf pozostanie spójny).
(5) VS = v5v4v5v2, ES = efh.
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (4/9).
v1
v2
v3
v5 v4
b a
c g
d
(4) Wybieramy„dowolną”krawędź z wychodzącą z v2, na przykład c i usuwamy ją z grafu (graf pozostanie spójny). Uwaga:gdybyśmy wybrali krawędź b, graf nie byłby spójny! Mogliśmy natomiast wybrać g . (5) VS = v5v4v5v2v3, ES = efhc.
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (5/9).
v1
v2
v3
v5 v4
b a
g d
(3) Jedyną krawędzią wychodzącą z v3 jest d , usuwamy ją z grafu i usuwamy wierzchołek v3.
(5) VS = v5v4v5v2v3v4, ES = efhcd .
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (6/9).
v1
v2
v5 v4
b a
g
(3) Jedyną krawędzią wychodzącą z v4 jest g , usuwamy ją z grafu i usuwamy v4.
(5) VS = v5v4v5v2v3v4v2, ES = efhcdg .
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (7/9).
v1
v2 v5
b a
(3) Jedyną krawędzią wychodzącą z v2 jest b, usuwamy ją z grafu i usuwamy v2.
(5) VS = v5v4v5v2v3v4v2v1, ES = efhcdgb.
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (8/9).
v1 v5
a
(3) Jedyną krawędzią wychodzącą z v1 jest a, usuwamy ją z grafu i usuwamy v1.
(5) VS = v5v4v5v2v3v4v2v1v5, ES = efhcdgba.
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (9/9).
v5
(2) Kończymy.
VS = v5v4v5v2v3v4v2v1v5, ES = efhcdgba.
Algorytm Fleury’ego szukania cyklu Eulera
Przykład działania (9/9).
v1
v2
v3
v5 v4
b a
c h g
e d f
VS = v5v4v5v2v3v4v2v1v5, ES = efhcdgba.
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (1/10).
v1 v6
v2
v3
v5 v4
b a
c h g
d e
f u
(1) Wybieramy dowolny wierzchołek nieparzystego stopnia (są dwa), na przykład v4. VS = v4, ES jest pusty.
(4) Wybieramy dowolną krawędź z niego wychodzącą, na przykład g i usuwamy ją z grafu (graf pozostanie spójny).
(5) VS = v4v2, ES = g .
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (2/10).
v1
v2
v3
v5 v4
v6
b a
c h
d
f e
u
(4) Wybieramy dowolną krawędź wychodzącą z v2, na przykład c i usuwamy ją z grafu (graf pozostanie spójny).
(5) VS = v4v2v3, ES = gc.
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (3/10).
v1
v2
v3
v5 v4
v6
b a
h
d
f e
u
(3) Usuwamy krawędź d (nie mamy wyboru) i usuwamy v3. (5) VS = v4v2v3v4, ES = gcd .
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (4/10).
v1
v2
v5 v4
v6
b a
h
f e
u
(3) Usuwamy krawędź e z grafu (nie mamy wyboru) i usuwamy v4. (5) VS = v4v2v3v4v5, ES = gcde.
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (5/10).
v1
v2 v5 v6
b a
h f
u
(4) Wybieramy i usuwamy „dowolną” krawędź wychodzacą z v5, na przykład a (mogliśmy h, nie mogliśmy f ); graf pozostanie spójny.
(5) VS = v4v2v3v4v5v1, ES = gcdea.
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (6/10).
v1
v2 v5 v6
b h f
u
(3) Usuwamy krawędź b i wierzchołek v1
(5) VS = v4v2v3v4v5v1v2, ES = gcdeab.
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (7/10).
v2 v5 v6
h f
u
(3) Usuwamy krawędź h i wierzchołek v2
(5) VS = v4v2v3v4v5v1v2v5, ES = gcdeabh.
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (8/10).
v5 v6
f u
(3) Usuwamy krawędź f i wierzchołek v5 (5) VS = v4v2v3v4v5v1v2v5v6, ES = gcdeabhf VS = v4v2v3v4v5v1v2v5v6, ES = gcdeabhf .
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (9/10).
v6
u
(4) Usuwamy krawędź u.
(5) VS = v4v2v3v4v5v1v2v5v6v6, ES = gcdeabhfu
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania (10/10).
v6
(2) Kończymy.
Algorytm Fleury’ego szukania drogi Eulera
Przykład działania.
v1 v6
v2
v3
v5 v4
b a
c h g
d f e
u
Droga Eulera:
VS = v4v2v3v4v5v1v2v5v6v6, ES = gcdeabhfu.
Droga i cykl Hamiltona
Definicja. Droga Hamiltona to droga przechodząca przez każdy wierzchołkek grafu dokładnie raz.
Definicja. Cykl Hamiltona to cykl przechodzący przez każdy wierzchołek grafu dokładnie raz (oczywiście pierwszy wierzchołek jest ostatnim).
Definicja. Graf hamiltonowski to graf zawierający cykl Hamiltona.
Przykład. Graf hamiltonowski (po lewej); cykl Hamiltona to ab, droga Hamiltona to a, a także b. Po prawej − graf niehamiltonowski
a b
Droga i cykl Hamiltona
Fakt.
Graf niespójny nie jest hamiltonowski.
Fakt.
Graf pełny jest hamiltonowski.
Graf pełny o n wierzchołkach (oznaczany Kn) zawiera n! cykli Hamiltona
− tyle jest permutacji wierzchołków wyznaczających cykl (rozróżniamy cykle zaczynające się w różnych wierzchołkach i “poruszanie się w obie strony”).
Uwaga.
Nie jest znany żaden efektywny (działający w czasie wielomianowym) algorytm szukania cyklu/drogi Hamiltona w grafie.
Problem znalezienia cyklu Hamiltona jest NP-zupełny.
DODATEK: P⊆ NPC ⊆ NP.
Problem P to problem,
którego rozwiązanie można znaleźćw czasie wielomianowym.
Problem NP to problem,
którego rozwiązanie można zweryfikowaćw czasie wielomianowym.
Pytanie: „Czy P = NP ?”znalazło się na liście siedmiu „problemów milenijnych” (za 1000000$).
Klasa NPC (NP-complete)
to klasa problemów NP mająca następującą własność:
jeżeli istnieje rozwiązanie jednego z problemów z tej klasy w czasie wielomianowym, to każdy z problemów z tej klasy da się rozwiązać w czasie wielomianowym (albo wszystkie można rozwiązać w czasie wielomianowym, albo żadnego z nich się nie da).
Każdy problem z klasy NPC nazywamy problemem NP-zupełnym.
DODATEK: NPC⊆ NP.
Znamy około tysiąca problemów NP-zupełnych.
Jednym z nich jest problem plecakowy: wybieramy przedmioty, by ich łączna wartość była największa, ale by mieściły się w plecaku.
Bardziej formalnie:
mamy plecak o pojemności V oraz zbiór n elementów o wielkości wi i wartości ci (dla i = 1, 2, . . . , n). ZmaksymalizujPni =1cixi przy założeniu Pn
i =1wixi ¬ V , gdzie xi = 0 (gdy nie zabieramy) lub xi = 1 (gdy zabieramy do plecaka).
DODATEK: NP.
Uwaga.
Istnieją problemy, o których wiemy, że nie są NP.
Przykład.
Arytmetyka Presburgera (1929).
Są to liczby naturalne z aksjomatycznie zdefinowanym dodawaniem.
Jest to arytmetyka niesprzeczna i zupełna. Czas działania algorytmów spawdzających poprawność twierdzeń to co najmniej 22cn, gdzie c to stała dodatnia (Fischer, Rabin, 1974).
DODATEK DO DODATKU: Problem stopu, Alan Turing (1936).
Załóżmy, że istnieje uniwersalny programSTOP, który dla dowolnego algorytmu A i danych D do tego algorytmu rozstrzyga, czy program się zatrzymuje.
AlgorytmSTOP(A, D):
jeżeli algorytm A na danych Dsię zatrzymujetozwróć 1, jeśli algorytm A na danych D nie zatrzymuje siętozwróć 0.
Pokażemy, że to prowadzi do sprzeczności.
AlgorytmSTOPmożna zastosować dla programu A (tutaj A to tekst algorytmu) i danych A (tutaj A traktujemy jako napis z danymi wejściowymi). Nowy program AlgorytmTEST(A):
jeżeliSTOP(A, A) zwraca 1 to zapętl się, jeśli zwraca 0 to się zatrzymaj.
Zatem algorytmTEST(A) albosię zatrzymuje(jeżeliSTOP(A, A) zwraca 0), albonie zatrzymuje się(jeżeliSTOP(A, A) zwraca 1).
Obserwacja. JeżeliTEST(TEST)zatrzymuje się, toSTOP(TEST, TEST)zwrócił 0, czyliTESTdla danychTESTnie zatrzymuje się.
JeżeliTEST(TEST)nie zatrzymuje się, toSTOP(TEST, TEST)zwrócił 1, czyliTESTdla danychTESTzatrzymuje się.
Grafy hamiltonowskie
Problem. Kurier rozwozi przesyłki. Chce każdego odbiorcę odwiedzić tylko raz i wrócić do punktu startu. Czy jest to możliwe w sytuacji
przedstawionej na rysunku (nie ma drogi od klienta 2 do 5, ani od 2 do 6, ani od 5 do 8, ...)? Tak, jest to możliwe.
1 2
3 4
5 6 7
8
Twierdzenie Ore
Twierdzenie (Ore).
Jeśli w grafie prostym G (VG, EG) o n wierzchołkach (n 3) mamy deg (v ) + deg (u) n
dla każdej pary wierzchołków u i v takich, że {u, v } /∈ EG
(u oraz v to niesąsiednie wierzchołki), to G posiada cykl Hamiltona.
Dowód twierdzenia Ore
Dowód nie wprost. Załóżmy, że deg (v ) + deg (u) n dla każdej pary niesąsiednich wierzchołków u i v grafu G (VG, EG) i założmy, że G nie posiada cyklu Hamiltona. Zauważmy, że dołożenie do grafu dodatkowych krawędzi nie zmniejszy sumy stopni niesąsiednich wierzchołków (może jedynie ją zwiększyć).
Rysunek nie pokazuje wszystkich krawędzi grafu G .
Dowód twierdzenia Ore
Dowód nie wprost. Załóżmy, że deg (v ) + deg (u) n dla każdej pary niesąsiednich wierzchołków u i v grafu G (VG, EG) i założmy, że G nie posiada cyklu Hamiltona. Zauważmy, że dołożenie do grafu dodatkowych krawędzi nie zmniejszy sumy stopni niesąsiednich wierzchołków (może jedynie ją zwiększyć). Dokładamy krawędzie k1, . . . , km−1, km tak długo, aż graf G1(VG, EG1), gdzie EG1= EG ∪ {k1, . . . , km−1} nie będzie posiadał cyklu Hamiltona, ale
Graf G1, rysunek nie pokazuje wszystkich jego krawędzi, ale graf ten nie ma cyklu Hamiltona.
Dowód twierdzenia Ore
Dowód nie wprost. Załóżmy, że deg (v ) + deg (u) n dla każdej pary niesąsiednich wierzchołków u i v grafu G (VG, EG) i założmy, że G nie posiada cyklu Hamiltona. Zauważmy, że dołożenie do grafu dodatkowych krawędzi nie zmniejszy sumy stopni niesąsiednich wierzchołków (może jedynie zwiększyć). Dokładamy krawędzie k1, . . . , km−1, km tak długo, aż graf G1(VG, EG1), gdzie EG1 = EG ∪ {k1, . . . , km−1}nie będzie posiadał cyklu Hamiltona, ale graf G2(VG, EG2), gdzie EG2 = EG ∪ {k1, . . . , km} posiada cykl Hamiltona.
km
Graf G
1(V
G, E
G1), gdzie E
G1= E
G∪ {k
1, . . . , k
m−1} nie posiada cyklu Hamiltona, a graf G
2(V
G, E
G2), gdzie E
G2= E
G∪ {k
1, . . . , k
m} posiada cykl Hamiltona
Tym cyklem niech będzie v1v2. . . vnv1, gdzie v1, vn to końce krawędzi km.
v1
v2 vn
Dowód twierdzenia Ore, graf G
1nie posiada cyklu Hamiltona
Oznacza to, że v1. . . vn jest drogą Hamiltona w G1 oraz wierzchołki v1 i vn nie są sąsiednie w G1. Oczywiście deg (v1) + deg (vn) n.
Niech S1 = {j : {v1, vj} ∈ E (G1)} oraz S2 = {j : {vn, vj −1} ∈ E (G1)}
Ponieważ kS1k + kS2k = deg (v1) + deg (vn) n oraz S1∪ S2 ma co najwyżej n − 1 elementów (do tej sumy nie należy 1), więc istnieje k ∈ S1∩ S2.
v1
vk−1
vk
vn
Dowód twierdzenia Ore
Istnieje k ∈ S1∩ S2. Zatem krawędzie {v1, vk} oraz {vn, vk−1} są
krawędziami grafu i droga v1v2. . . vk−1vn. . . vkv1 jest cyklem Hamiltona w G1, co jest sprzeczne z naszym założeniem.
v1
v2 vk−1
vk
vn
Dowód twierdzenia Ore
Istnieje k ∈ S1∩ S2. Zatem krawędzie {v1, vk} oraz {vn, vk−1} są
krawędziami grafu i droga v1v2. . . vk−1vn. . . vkv1 jest cyklem Hamiltona w G1, co jest sprzeczne z naszym założeniem.
v1
v2 vk−1
vk
vn
Twierdzenie Diraca
Twierdzenie (Diraca).
Jeśli w grafie prostym G (VG, EG) o n wierzchołkach (n 3) deg (v ) 1
2n
dla każdego wierzchołka v , to G posiada cykl Hamiltona.
Dowód.
Wtedy
deg (v ) + deg (u) 1 2n +1
2n = n i stosujemy twierdzenie Ore.
Grafy dwudzielne
Definicja. Graf G jest dwudzielny, jeśli jego zbiór wierzchołków jest sumą dwóch niepustych i rozłącznych zbiorów V1 orazV2 takich, że każda krawędź tego grafu ma jeden wierzchołek z V1, drugi z V2. Graf dwudzielny nazywamy pełnym grafem dwudzielnym, gdy każdy wierzchołek z V1 jest połączony z każdym wierzchołkiem z V2 dokładnie jedną krawędzią.
Przykład. Graf dwudzielny i pełny graf dwudzielny:
Grafy dwudzielne
Twierdzenie.
Niech G będzie grafem dwudzielnym i niech V1∪ V2 będzie podziałem jego wierzchołków. Jeśli G zawiera cykl Hamiltona, to kV1k = kV2k.
Dowód.
Jeśli v1v2. . . vnv1 jest cyklem Hamiltona, a każda krawędź ma jeden wierzchołek z V1, drugi z V2, to wierzchołki o indeksach nieparzystych należą do jednego z tych zbiorów, a te o indeksach parzystych do drugiego.
Liczba n musi być parzysta, gdyż {v1, vn} jest krawędzią (w przeciwnym razie oba końce tej krawędzi należałyby do tego samego zbioru). Zatem kV1k = kV2k.
Grafy dwudzielne
Wniosek.
Niech G będzie grafem dwudzielnym i niech V1∪ V2 będzie podziałem jego wierzchołków.
Jeśli G zawiera drogę Hamiltona, to liczby kV1k oraz kV2k różnią się o co najwyżej o 1.
Dowód. Postępujemy jak w dowodzie poprzedniego twierdzenia. Jeśli w drodze Hamiltona v1v2. . . vn liczba n jest nieparzysta, to liczba
wierzchołków w V1 różni się o 1 od liczby wierzchołków w V2. Jeśli n jest liczbą parzystą, to kV1k = kV2k.
Grafy dwudzielne
Twierdzenie.
Niech G będzie pełnym grafem dwudzielnym o n wierzchołkach, gdzie n 3, i niech V1∪ V2 będzie podziałem jego wierzchołków.
Jeśli kV1k = kV2k, to G zawiera cykl Hamiltona.
Dowód.
Każdy z wierzchołków z V1 jest połączony jedną krawędzią z dowolnym wierzchołkiem z V2. Cykl Hamiltona otrzymamy idąc, w dowolny sposób, przechodząc na przemian przez wierzchołek z V1, następnie V2, ...
Kod Graya
Jak wiemy, kod Graya długości n to 2n-elementowy ciąg różnych
n-elementowych ciągów binarnych (ciągów zer i jedynek) ustawionych tak, by dwa kolejne ciągi (a także pierwszy i ostatni) różniły się dokładnie jedną cyfrą.
Popatrzmy na ten problem nie wielowymiarowo (kostka binarna), ale jak na problem z teorii grafów.
Niech V (G ) będzie zbiorem wszystkich n-elementowych ciągów binarnych, a dwa ciągi u oraz v łączymy krawędzią wtedy, gdy u oraz v różnią się dokładnie jedną cyfrą. Kod Graya o długości n jest po prostu drogą Hamiltona w tym grafie.
Kod Graya,
zapis 03oznacza 000, a 101504oznacza 10111110000Twierdzenie.
Każda kostka binarna Qn zawiera kod Graya (drogę Hamiltona)
zaczynającą się od wierzchołka 0n, a kończącą się w wierzchołku 10n−1. Dowód. Przeprowadzimy dowód indukcyjny.
Dla n = 1 kostka Q1 zawiera drogę Hamiltona 0, 1.
Załóżmy, że Qk zawiera drogę Hamiltona od wierzchołka 0k, do wierzchołka 10k−1. Kostka Qk+1 składa się z dwóch podkostek Qk. Drogę Hamiltona w Qk budujemy tak. Zaczynamy od wierzchołka 0k+1 i przechodzimy drogą Hamiltona w pierwszej podkostce(tej z zerem na początku) aż do wierzchołka010k−1, potem krawędzią
„między” podkostkami do wierzchołka110k−1 i drogą Hamiltona (w odwrotnej kolejności) wdrugiej podkostce (tej z jedynką na
początku) do10k.
Kod Graya, 000, 001, 011, 010, 110, 111, 101, 100
Przykład. Po prawej stronie jeden z dwunastu kodów Graya (zaczynających się w 000) długości trzy:
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
Wszystkie kody Graya długości trzy zaczynające się w 000
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
000 100
110 010
001 101
111 011
DODATEK: Ile jest kodów Graya?
Oznaczmy przez gn liczbę różnych kodów Graya długości n zaczynających się w 0n.
Wiemy, że
g2 = 2 (są dwa kody długości 2;
są to 00, 10, 11, 01 oraz 00, 01, 11, 10) g3 = 12 (zobacz poprzedni slajd)
Wyznaczenie gn dla większych n jest trudne.
Wiemy jedynie, że g4 = 2688 g5 = 1813091520
g6 = 71676427445141767741440
Przykład: szukamy dowolnego kodu Graya długości cztery
a a
0000
1000 0001
1001 1100
0100
0101 1101
1111
1110 0111
0110
0011
0010 1010
1011
Jeden z wielu kodów Graya długości cztery:
0000, 0001, 1001, 1000, 1100, 0100, 0101, 1101 (zero na trzecim miejscu) 1111, 1110, 0110, 0111, 0011, 1011, 1010, 0010 (jedynka na trzecim miejscu)
0000
1000 0001
1001 1100
0100
0101 1101
1111
1110 0111
0110
0011
0010 1010
1011
Cykl Hamiltona zawierający tę drogę
a a
0000
1000 0001
1001 1100
0100
0101 1101
1111
1110 0111
0110
0011
0010 1010
1011
Graf skierowany
Definicja.
Grafem skierowanym nazywamy parę G = (VG, EG), gdzie VG jest skończonym zbiorem oraz EG jest kolekcją∗ zbioru VG × VG. Elementy ze zbioru VG to wierzchołki grafu, a elementy z VG × VG to krawędzie. Jeśli krawędzią e jest uporządkowana para (p, q), to p nazywamy początkiem krawędzi e, natomiast q końcem tej krawędzi.
∗„ jest kolekcją” dopuszcza istnienie krawędzi wielokrotych; jeśli napiszemy „ jest podzbiorem”, to nie będzie krawędzi wielokrotnych
Uwaga. Grafy skierowane często rysujemy: punkty na płaszczyźnie to wierzchołki, natomiast „strzałki” (najczęściej odcinki skierowane) łączące te punkty to krawędzie, przy czym jeśli krawędź e jest uporządkowaną parą (p, q), to strzałka odpowiadająca krawędzi e biegnie od p do q.
Graf skierowany
Przykład.
v1
v2
v3
v4
v5
v6 a
c
d b