• Nie Znaleziono Wyników

Grafy (1): wprowadzenie

N/A
N/A
Protected

Academic year: 2021

Share "Grafy (1): wprowadzenie"

Copied!
104
0
0

Pełen tekst

(1)

Grafy (1): wprowadzenie

Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków

UTP Bydgoszcz

11

(2)

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).

(3)

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

(4)

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

(5)

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.

(6)

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.

(7)

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.

(8)

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)

(9)

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ą.

(10)

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.

(11)

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}

(12)

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.

(13)

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

(14)

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 .

(15)

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

(16)

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.

(17)

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.

(18)

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.

(19)

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}.

(20)

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.

(21)

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

(22)

Graf K

n

Fakt.

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.

(23)

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.

(24)

Przykład grafu eulerowskiego i nieeulerowskiego

v1 v4

v2 v3

v1 v4

v2 v3

(25)

Siedem mostów królewieckich (schemat)

Pokażemy, że ten graf nie jest eulerowski.

(26)

Mosty królewieckie i graf mostów królewieckich

Pokażemy, że ten graf nie jest eulerowski.

(27)

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.

(28)

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.

(29)

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.

(30)

Cykl Eulera

Uwaga.

Nie każdy graf, którego wszystkie wierzchołki są stopnia parzystego zawiera cykl Eulera.

v1 v4

v2 v3

(31)

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.

(32)

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.

(33)

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.

(34)

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 .

(35)

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 .

(36)

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 .

(37)

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 .

(38)

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 .

(39)

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 .

(40)

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 .

(41)

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 .

(42)

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

(43)

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źć.

(44)

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 .

(45)

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.

(46)

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 .

(47)

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.

(48)

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.

(49)

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 .

(50)

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 .

(51)

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.

(52)

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.

(53)

Algorytm Fleury’ego szukania cyklu Eulera

Przykład działania (9/9).

v5

(2) Kończymy.

VS = v5v4v5v2v3v4v2v1v5, ES = efhcdgba.

(54)

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.

(55)

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 .

(56)

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.

(57)

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 .

(58)

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.

(59)

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.

(60)

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.

(61)

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.

(62)

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 .

(63)

Algorytm Fleury’ego szukania drogi Eulera

Przykład działania (9/10).

v6

u

(4) Usuwamy krawędź u.

(5) VS = v4v2v3v4v5v1v2v5v6v6, ES = gcdeabhfu

(64)

Algorytm Fleury’ego szukania drogi Eulera

Przykład działania (10/10).

v6

(2) Kończymy.

(65)

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.

(66)

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

(67)

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.

(68)

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.

(69)

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).

(70)

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).

(71)

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ę.

(72)

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

(73)

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.

(74)

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 .

(75)

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.

(76)

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

(77)

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

(78)

Dowód twierdzenia Ore, graf G

1

nie 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

(79)

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

(80)

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

(81)

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.

(82)

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:

(83)

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.

(84)

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.

(85)

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, ...

(86)

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.

(87)

Kod Graya,

zapis 03oznacza 000, a 101504oznacza 10111110000

Twierdzenie.

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.

(88)

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

(89)

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

(90)

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

(91)

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

(92)

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

(93)

Cykl Hamiltona zawierający tę drogę

a a

0000

1000 0001

1001 1100

0100

0101 1101

1111

1110 0111

0110

0011

0010 1010

1011

(94)

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.

(95)

Graf skierowany

Przykład.

v1

v2

v3

v4

v5

v6 a

c

d b

Cytaty

Powiązane dokumenty

będzie ciągiem pa- rami niezależnych zmiennych losowych o

Grafem (grafem prostym, grafem niezorientowanym) nazywamy par¸e (V, E) gdzie V jest pewnym zbiorem zwanym zbiorem wierzcho lk´ow, natomiast E jest zbiorem pewnych par

Innymi słowy największy zbiór niezależny w G ma

będzie ciągiem pa- rami niezależnych zmiennych losowych o

Powstaje podgraf H, który ma mniej krawędzi niż graf G (może nie być spójny), ale nadal każdy wierzchołek ma w nim stopień parzysty (po usunięciu cyklu C stopień zmniejsza

Materiaª teoretyczny: Warstwy lewostronne i warstwy prawostronne podgrupy H grupy G..

Udowodnić, że złożenie homomorfizmów jest homomorfizmem i że funkcja odwrotna do izomorfizmu jest

Zaªó»my, »e istnieje ci¦cie