W-Algorytmy grafowe

download W-Algorytmy grafowe

of 637

Transcript of W-Algorytmy grafowe

Algorytmy grafowe (AGR 320)semestr letni 2004/2005 Micha Karonski Wydzia Matematyki i Informatyki UAM

Algorytmy grafowe (AGR 320) p. 1/9

1. Rodzaje grafw

grafy proste multigrafy grafy skierowane (digrafy) grafy wa one z hipergrafy

Algorytmy grafowe (AGR 320) p. 2/9

2. Reprezentacje grafw2.1 Macierz przylego ci (sasiedztwa) s Denicja (Macierz przylego ci). Dany jest graf G = (V, E), przy s czym V = {v1 , v2 , . . . , vn } jest zbiorem wierzchokw, to n n macierz A(G) = (aij ), gdzie aij jest liczba krawedzi aczacych wierzchoki vi oraz vj nazywa sie macierza przylego ci grafu G. s W przypadku grafu skierowanego aij jest liczba ukw z wierzchoka vi do vj .

Algorytmy grafowe (AGR 320) p. 3/9

v1s

d d d v2 d sv s d 4 d d d d s d

v3 s

v5

Rysunek 1: Przykad grafu prostego G = (V, E), gdzie V ={v1 , v2 , v3 , v4 , v5 }, E = {e1 , e2 , e3 , e4 , e5 , e6 , e7 }, e1 = v1 v2 , e2 = v 2 v 3 , e3 = v 2 v 5 , e4 = v 3 v 4 , e5 = v 2 v 4 , e6 = v 4 v 6 , e7 = v 1 v 4 .

Algorytmy grafowe (AGR 320) p. 4/9

Przykad . Macierz przylego ci dla grafu przedstawionego na s Rysunku 1.

v1 v1 0 v2 1 A(G) = v3 0 v4 1 v5 0

v2 1 0 1 1 1

v3 0 1 0 1 0

v4 1 1 1 0 1

v5 0 1 0 = 1 0

0 1 0 1 0

1 0 1 1 1

0 1 0 1 0

1 1 1 0 1

0 1 0 . 1 0

Algorytmy grafowe (AGR 320) p. 5/9

macierz przylego ci (sasiedztwa) A(G) jest macierza s binarna (dla grafu prostego) macierz przylego ci wymaga |V |2 = n2 bitw pamieci s je eli w jest dugo cia sowa maszynowego, to ka dy z s z wiersz macierzy przylego ci mo na zapisa jako ciag n s z c bitw w n/w sowach maszynowych ( x oznacza najmniejsza liczbe cakowita nie mniejsza ni x) z graf prosty: A(G) jest symetryczna - n(n 1)/2 bitw graf skierowany: n n/w reprezentacja macierzowa jest korzystniejsza dla grafw gestych

Algorytmy grafowe (AGR 320) p. 6/9

2.2 Macierz incydencji

Denicja (Macierz incydencji). Dany jest graf G = (V, E), przy czym

V = {v1 , v2 , . . . , vn } jest zbiorem wierzchokw natomiast E = {e1 , e2 , . . . , em } zbiorem krawedzie grafu, to macierz M (G) = (mij )1, 1 i n, 1 j m, gdzie liczba mij {0, 1, 2} oznacza ile razy vi oraz ej sa incydentne ( 2 wystepuje w przypadku petli), jest macierza incydencji grafu G.

Algorytmy grafowe (AGR 320) p. 7/9

e7d d e2 e3 d v2 e4 d sv s d 4 d d e6d e5 d s d

v3 s

v1s

e1

v5

Algorytmy grafowe (AGR 320) p. 8/9

Przykad . Macierz incydencji dla grafu przedstawionego na Rysunku 1.

G = (V, E): |V | = 5, |E| = 7, V = {v1 , v2 , v3 , v4 , v5 }, E = {e1 , e2 , e3 , e4 , e5 , e6 , e7 }, e1 = v1 v2 , e2 = v2 v3 , e3 = v2 v5 , e4 = v3 v4 , e5 = v 2 v 4 , e6 = v 4 v 5 , e7 = v 1 v 4 . e1 v1 1 v2 1 M (G) = v3 0 v4 0 v5 0 e2 0 1 1 0 0 e3 0 1 0 0 1 e4 0 0 1 1 0 e5 0 1 0 1 0 e6 0 0 0 1 1 e7 1 0 0 1 0

Algorytmy grafowe (AGR 320) p. 9/9

Macierz incydencji wymaga |V ||E| bitw pamieci, co mo e by liczba wieksza ni |V |2 bitw zajmowanych z c z przez macierz przylego ci, poniewa liczba krawedzi s z |E| jest cz esto wieksza ni liczba wierzchokw |V |. z W niektrych jednak przypadkach mo e by z c korzystniejsze u ycie macierzy incydencji, ni macierzy z z przylego ci pomimo zwiekszonej zajeto ci pamieci. s s Macierze incydencji sa szczeglnie dogodne przy rozpatrywaniu obwodw elektrycznych i ukadw przeaczajacych.

Algorytmy grafowe (AGR 320) p. 10/9

2.3 Lista krawedzi Innym, cz esto stosowanym sposobem reprezentacji grafu jest wypisanie wszystkich jego krawedzi jako par wierzchokw. Tak na przykad, graf z Rysunku 1 byby przedstawiony jako lista nastepujacych nieuporzadkowanych par: (v1 , v2 ), {v1 , v4 }, {v2 , v3 }, {v2 , v4 }, {v2 , v5 }, {v3 , v4 }, {v4 , v5 }. Dla grafu skierowanego, byy by to uporzadkowane pary wierzchokw odpowiadajace ukom.

Algorytmy grafowe (AGR 320) p. 11/9

liczba bitw potrzebna do zaetykietowania (etykietami od 1 do n) wierzchokw grafu G jest rwna b, gdzie 2b1 < n 2b , czyli b = log2 n + 1 cakowita zajeto c pamieci jest rwna 2|E|b bitw s ten sposb reprezentacji jest bardziej ekonomiczny ni z macierz przylego ci, je eli 2|E|b < |V |2 s z reprezentacja listowa" jest korzystniejsza dla grafw rzadkich przechowywanie i przeksztacanie grafu w komputerze jest trudniejsze (na przykad przy badaniu spjno ci s grafu)

Algorytmy grafowe (AGR 320) p. 12/9

2.4 Dwie tablice liniowe modykacja listy krawedzi - przedstawienie grafu za pomoca dwch tablic liniowych: F = (f1 , f2 , . . . , fe ) , H = (h1 , h2 , . . . , he ). elementy tablic: etykiety wierzchokw, e = |E|G graf skierowany: i-ty uk, ei , prowadzi od wierzchoka fi , do wierzchoka hi G graf nieskierowany: krawed ei aczy fi i hi . z

dogodna reprezentacja do sortowania w grafach wa onych z

Algorytmy grafowe (AGR 320) p. 13/9

Przykad . Dwie tablice liniowe dla grafu przedstawionego na Rysunku 1.

e7d d e2 e3 d v2 e4 d sv s d 4 d d e6d e5 d s d

v3 s

v1s

e1

v5

F = (v1 , v2 , v2 , v3 , v2 , v4 , v1 ),

H = (v2 , v3 , v5 , v4 , v4 , v5 , v4 ).

Algorytmy grafowe (AGR 320) p. 14/9

2.5 Lista wierzchokw sasiednich (nastepnikw) efektywna metoda reprezentacji grafw stosowana w z przypadku gdy stosunek |E|/|V | nie jest du y dla ka dego wierzchoka v tworzymy liste (tablice), z ktrej pierwszym elementem jest v ; a pozostaymi elementami sa: wierzchoki bedace sasiadami wierzchoka v (w przypadku grafu nieskierowanego) bezpo redni nastepnicy wierzchoka v , tzn. s wierzchoki, do ktrych istnieje uk z wierzchoka v (w przypadku grafu skierowanego)

Algorytmy grafowe (AGR 320) p. 15/9

v1s

d d d v2 d sv s d 4 d d d d s d

v3 s

v5

v1 v2 v3 v4 v5

: : : : :

v2 , v1 , v2 , v1 , v2 ,

v4 v3 , v4 , v5 v4 v2 , v3 , v5 v4

Algorytmy grafowe (AGR 320) p. 16/9

1

2

5

3

4

6

1 2 3 4 5 6

2 1 1 2 4 2

3 3 2 3 6 5 4 4 5 6

Algorytmy grafowe (AGR 320) p. 17/9

1

2

5

3

4

6

1 2 3 4 5 6

2 4 1 5 6 6 6 2 4

Algorytmy grafowe (AGR 320) p. 18/9

3. Przeszukiwanie grafwZnajdujac sie w pewnym wierzchoku v przeszukujemy wszystkie krawedzie incydentne do v , a nastepnie poruszamy sie do pewnego wierzchoka przylegego w. W wierzchoku w przeszukujemy wszystkie krawedzie incydentne do w. Ten proces prowadzi sie dotad, a z przeszuka sie wszystkie wierzchoki w grae. Metode te nazywa sie przeszukiwaniem wszerz (ang. breadth-rst search, cz esto oznaczane skrtowo BFS).

Algorytmy grafowe (AGR 320) p. 19/9

zamiast przeszukiwa ka da krawed incydentna do c z z wierzchoka v , poruszamy sie do pewnego wierzchoka przylegego w (wierzchoka, w ktrym dotychczas jeszcze nie byli my), gdy tylko to jest mo liwe, s z pozostawiajac na razie wierzchoek v z by mo e c z niezbadanymi krawedziami. Inaczej mwiac, poda amy z z przez graf scie ka przechodzac do nowego wierzchoka, gdy tylko to jest mo liwe. Taka metoda z przeszukiwania grafu, zwana przeszukiwaniem w gab (ang. depth-rst search, w skrcie DFS) lub metoda z powrotu po tej samej scie ce na grae. upraszcza wiele algorytmw teorii grafw, ze wzgledu na otrzymywane ponumerowanie wierzchokw i skierowanie krawedzi.

Algorytmy grafowe (AGR 320) p. 20/9

3.1 Przeszukiwanie grafu wszerz (BFS)G = (V, E) - graf nieskierowanym reprezentowanym w postaci listy wierzchokw sasiednich. x - ustalony wierzchoek z ktrego nale y rozpocza z c przeszukiwanie grafu Iv - tablica zawierajaca wierzchoki incydentne z v N Iv liczba elementw w Iv

Algorytmy grafowe (AGR 320) p. 21/9

1. Ustaw: N umer[x] 1, Drzewo , P ozostale ; dopisz x do Kolejki. 2. Je eli Kolejka jest pusta to STOP. z 3. Pobierz element z Kolejki i zapisz go jako v . 4. Dla ka dego wierzchoka w incydentnego do v wykonaj: z (a) Je eli N umer[w] = 0, tzn. wierzchoek w z odwiedzamy po raz pierwszy, to nadaj wierzchokowi w kolejny numer, dopisz w do Kolejki, a krawed vw z dodaj do Drzewo. z (b) Je eli N umer[w] = 0, tzn. wierzchoek w ju by z odwiedzany, natomiast krawed vw Drzewo to z / dodaj ja do zbioru P ozostale. 5. Wr do kroku 2. c

Algorytmy grafowe (AGR 320) p. 22/9

(G, x) N umer[x] P onumerowano 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerowano P onumerowano + 1 N umer[w] P onumerowano Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w $ #

"

!

{vw}

N umer, Drzewo,

3 #

% & ' & ( 0) 21

% & ' & ( 0) 21

% & ' & ( 0) 21

Algorytmy grafowe (AGR 320) p. 23/9

4 65 7 89 @ A B DC DC FE G H I P

6

G, x

P bQ P b sQ P b rQ P b pQ P b iQ P b gQ P b dQ P b cQ P b bQ P b uQ P tQ P sQ P rQ P pQ P iQ

N umer, Drzewo, N umer[x] P onumerowano 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerowano P onumerowano + 1 N umer[w] P onumerowano Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w {vw} (N umer, Drzewo, ) 5 7 R S5 T U V U W YX a` e A9 f5 q q 7 h 8 7 h 7 h 7 f w5 f 8 f @ x 8 v T U V U T W U YX V U a` W YX a` T U V U W YX a` @ fA v 9 q @ 7 7 8 @ 7

Q

Algorytmy grafowe (AGR 320) p. 24/9

P gQ

P dQ

P cQ

Przykad . Przeszukiwanie grafu wszerzy G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w {vw} (N umer, Drzewo, )

d e gfh i

r st u v w x y st za=1

m l m

j k

q

b

c

l

l

m

k n

d

e

f

g

k p n

d e gfh i d e gfh i

k o k d e gfh i

N umer[a] 1 P onumerow 1 Kolejka a N Kolejka 1

Algorytmy grafowe (AGR 320) p. 25/9

{ }| ~

a=1 b=2

G, x

a

N umer, Drzewo, N umer[x] P onumerow 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w {vw} (N umer, Drzewo, )

~ ~ ~

|

} ~| |

~

c=3

~

~

d

e

f

~

g

|

v a Kolejka N Kolejka 0 wb P onumerow 2 N umer[b] 2 Drzewo {ab} Kolejka b N Kolejka 1 wc P onumerow 3 N umer[c] 3 Drzewo {ab, ac} Kolejka b, c N Kolejka 2

Algorytmy grafowe (AGR 320) p. 26/9

a=1 b=2

G, x

b

N umer, Drzewo, N umer[x] P onumerow 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w {vw} (N umer, Drzewo, )

c=3

d=4

e=5 v b Kolejka c wa wc

f N Kolejka 1 wd

g

P onumerow 4 N umer[d] 4 Drzewo {ab, ac, Kolejka c, d N Kolejka 2

we P onumerow 5

N umer[e] 5 Drzewo {ab, ac, bd N Kolejka 3

Kolejka c, d, e

wf P onumerow 6 N umer[f ] 6 Drzewo {ab, ac, bd, Kolejka c, d, e, f N Kolejka 4

Algorytmy grafowe (AGR 320) p. 27/9

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w {vw} (N umer, Drzewo, )

a=1 b=2

c

c=3

d=4

e=5 v c Kolejka d, e, f

f =6

g=7

N Kolejka 3 wg

wa wb wf

P onumerow 7 N umer[g] 7 Drzewo {ab, ac, bd, be, bf, cg} Kolejka d, e, f, g N Kolejka 4

Algorytmy grafowe (AGR 320) p. 28/9

! "# $# % & ' () 453 0 467 8@9

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w {vw} (N umer, Drzewo, )

1 2

A! B

H I P QRS T Q US V T W XY `a Qba=1 b=2

d

D C D

c=3

C

D

d=4

e=5 v d Kolejka e, f, g

f =6

g=7

C

B! E

N Kolejka 3

B G E

BF B 453 453 4679 467 8@ 8@9 453 467 8@9

wb we

Algorytmy grafowe (AGR 320) p. 29/9

c ed fgh i p qr sr t u v wx y

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w {vw} (N umer, Drzewo, )

e fd d

p dh

def g d hf i g j kl mn doa=1 b=2

e

fg fg f

f

h

fi fi

c=3

d=4

e=5 v e Kolejka f, g

f =6

g=7

f i p

N Kolejka 2

gi g

d

wb wd wf

Algorytmy grafowe (AGR 320) p. 30/9

p rq stu v w xy zy { | } ~

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w {vw} (N umer, Drzewo, )

r sq q

st st s

w qu

a=1 b=2

f

s

u

sv sv

c=3

s v w

d=4

e=5 vf Kolejka g wb wc

f =6

g=7

N Kolejka 1 wg

tv t

q

Algorytmy grafowe (AGR 320) p. 31/9

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Kolejka 1; Kolejka[N Kolejka] x N Kolejka > 0 v Kolejka[1] N Kolejka N Kolejka 1 i1 N Kolejka Kolejka[i] Kolejka[i + 1] i1 N Iv w Iv [i] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Kolejka N Kolejka + 1 Kolejka[N Kolejka] w {vw} (N umer, Drzewo, )

a=1 b=2

g

c=3

d=4

e=5 vg

f =6

g=7

Kolejka N Kolejka 0 wc wf

Algorytmy grafowe (AGR 320) p. 32/9

3.2 Przeszukiwanie grafu w gab (DFS) G = (V, E) - graf nieskierowanym reprezentowanym w postaci listy wierzchokw sasiednich. x - ustalony wierzchoek z ktrego nale y rozpocza z c przeszukiwanie grafu Iv - tablica zawierajaca wierzchoki incydentne z v , N Iv liczba elementw w Iv Stos - tablica przechowujaca ciag wierzchokw umo liwiajaca powrt", N Stos - liczba wierzchokw w z Stos

Algorytmy grafowe (AGR 320) p. 33/9

1. Ustaw v x, i 0, Drzewo , P ozostale . 2. Ustaw i i + 1, N umer(v) i. 3. Poszukaj nieprzebytej krawedzi incydentnej do wierzchoka v . Je eli nie ma takiej krawedzi (tzn. po ka dej krawedzi z z incydentnej do v ju przeszli my), to przejd do kroku 5. z s z Wybierz pierwsza nieprzebyta krawed incydentna do z wierzchoka v , powiedzmy vw i przejd ja. z

Algorytmy grafowe (AGR 320) p. 34/9

4. Jeste my teraz w wierzchoku w. s Je eli w jest wierzchokiem, w ktrym jeszcze nie z byli my podczas tego szukania (tzn. N umer(w) jest s nieokre lony), to dodaj krawed vw do zbioru Drzewo. s z Ustaw v w i przejd do kroku 2. z Je eli w jest wierzchokiem, w ktrym ju wcze niej z z s byli my (tzn. N umer(w) < N umer(v)), to dodaj krawed s z vw do zbioru P ozostale. Przejd do kroku 3. Jeste my z s wiec z powrotem w wierzchoku v .

Algorytmy grafowe (AGR 320) p. 35/9

5. Sprawd , czy istnieje jaka przebyta krawed uv w z s z zbiorze Drzewo z N umer(u) < N umer(v). Je eli jest taka krawed , to wr do wierzchoka u. z z c (Zauwa my, ze u jest wierzchokiem, z ktrego z osiagnieto v po raz pierwszy). Ustaw v u i przejd do z kroku 3. Je eli nie ma takiej krawedzi, to zatrzymaj algorytm z (jeste my z powrotem w korzeniu x po przej ciu ka dej s s z krawedzi i odwiedzeniu ka dego wierzchoka z poaczonego z x).

Algorytmy grafowe (AGR 320) p. 36/9

(G, x) N umer[x] P onumerow 1 N Stos 1 Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw}

Algorytmy grafowe (AGR 320) p. 37/9

G, x

& & @ & 9 & 7 & 5 & 3 & 1 & ( & ' & & & A

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, )

! #" %$

) 0

0

6

4

2

0 8 0

0

4

2

! #" %$

6

0 8 0

0 B 6

! #" %$

! #" %$

Algorytmy grafowe (AGR 320) p. 38/9

@

9

7

5

4

3

1

(

'

Przykad . Przeszukiwanie grafu w gab C D E F GH I P Q SR R T U V W X

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, ) ED F ` aD b c d c ef gh i H I s P q t p P H D q Fs r G F r F H s I F qD u q I P q t qD u q b c d c ef gh i b c d c ef gh i G qI v G t b c d c ef gh i

x y y

w

Y

a=1

b

c

d

e

f N umer[a] 1 P onumerow 1 Stos [a]

g

N Stos 1

Algorytmy grafowe (AGR 320) p. 39/9

d e f

z {| } ~

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, ) h i j k l k mn op q u s v r s u t t u s w s s v s w s j k l k mn op q j k l k mn op q s x v j k l k mn op q

y

g

aa=1

b=2

c

d

e va wb

f

g

P onumerow 2 N umer[b] 2 Drzewo {ab} N Stos 2 Stos [a, b]

Algorytmy grafowe (AGR 320) p. 40/9

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, )

b

a=1

b=2

c=3

d

e vb wa wc

f

g

P onumerow 3 N umer[c] 3 Drzewo {ab, bc} N Stos 3 Stos [a, b, c]

Algorytmy grafowe (AGR 320) p. 41/9

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, )

c

a=1

b=2

c=3

d

e vc

f =4

g

wa wb wf P onumerow 4 N umer[f ] 3 Drzewo {ab, bc, cf } N Stos 4 Stos [a, b, c, f ]

Algorytmy grafowe (AGR 320) p. 42/9

! " #

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, )

f

a=1

b=2

c=3

d

e vf wb wc

f =4

g=5

wg P onumerow 5 N umer[g] 5 Drzewo {ab, bc, cf, f g} N Stos 5 Stos [a, b, c, f, g]

Algorytmy grafowe (AGR 320) p. 43/9

Y ` a b c d e gf

h if

q gf

6 7 8 9

r p a s b t u d

$ % & ' () 0 1 2 43 3 5

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, ) &% ' A B% C D E D F G HI P Q 1 ) % R 0 1 R U ) T T ' S ( ' S ' ) T 0 ' R% V R 0 1 R U C D E C D D E FG D H I F G P HI P C D E D F G HI P R% V R ( R 0 W ( U

a=1

p

X

@

g

b=2

c=3

d

e vg wc wf

f =4

g=5

N Stos 4 Stos [a, b, c, f ]

Algorytmy grafowe (AGR 320) p. 44/9

o p q r s t u wv

x yv

{ wv

| z q } r ~ t

v w x y

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, ) xw y w de f g w h j h k j y i y i y j y hw l h h k d e f de f de f hw l h h m k

a=1

z

n

f

b=2

c

d

e vf

f =4

g=5

N Stos 3 Stos [a, b, c]

Algorytmy grafowe (AGR 320) p. 45/9

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, )

a=1

c

b=2

c=3

d

e vc wg

f =4

g=5

N Stos 2 Stos [a, b]

Algorytmy grafowe (AGR 320) p. 46/9

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, )

b

a=1

b=2

c=3

d=6

e vb wd

f =4

g=5

P onumerow 6 N umer[d] 5 Drzewo {ab, bc, cf, f g, bd} N Stos 3 Stos [a, b, d]

Algorytmy grafowe (AGR 320) p. 47/9

! " # $

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, )

d

a=1

b=2

c=3

d=6

e=7 vd wb we

f =4

g=5

P onumerow 7 N umer[e] 7 Drzewo {ab, bc, cf, f g, bd, de} N Stos 4 Stos [a, b, d, e]

Algorytmy grafowe (AGR 320) p. 48/9

e f g h i p d

e rp

` a b c d

7 8 9 @

a q i s t u v d

% & ' ( )0 1 2 3 54 4 6

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, ) '& ( B C& D E F E G H IP Q R 2 0 & S 1 2 S V 0 U U ( T ) ( T ( 0 U 1 ( S& W S 1 2 S V D E F D E E F GH E I P G H Q IP Q D E F E G H IP Q S& W S ) S 1 X ) V

a=1

q

Y Y

A

e

b=2

c=3

d=6

e=7 ve wb wd

f =4

g=5

N Stos 3 Stos [a, b, d]

Algorytmy grafowe (AGR 320) p. 49/9

v w x y z { u

v }{

q r s t u

r | z ~ u

w x y

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, ) yx x d ef g h x i i l k k j j k ix m i i l d e f d g ef g d ef g ix m i i n l

a=1

|

o p

d

b=2

c=3

d=6

e=7 vd

f =4

g=5

N Stos 2 Stos [a, b]

Algorytmy grafowe (AGR 320) p. 50/9

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, )

a=1

b

b=2

c=3

d=6

e=7 vb wf

f =4

g=5

N Stos 1 Stos [a]

Algorytmy grafowe (AGR 320) p. 51/9

G, x

N umer, Drzewo, N umer[x] P onumerow 1 N Stos 1; Stos[N Stos] x N Stos > 0 v ST os[N Stos] N Iv = 0 N Stos N Stos 1 w Iv [1] N Iv N Iv 1 i1 N Iv Iv [i] Iv [i 1] N umer[w] = 0 P onumerow P onumerow + 1 N umer[w] P onumerow Drzewo Drzewo {vw} N Stos N stos + 1 Stos[N Stos] w {vw} (N umer, Drzewo, )

a=1

a

b=2

c=3

d=6

e=7 va wc

f =4

g=5

N Stos 0 Stos [ ]

Algorytmy grafowe (AGR 320) p. 52/9

Wasno ci DFS s las przeszukiwan w gab (drzewo gdy graf jest spjny) wierzchoek odwiedzony - odwiedzony po raz pierwszy podczas przeszukiwania wierzchoek przetworzony - lista sasiedztwa zostaa cakowicie zbadana etykiety czasowe : ka demu wierzchoki z przyporzadkowujemy dwie liczby cakowite z przedziau 1, . . . 2|V | czas odwiedzin czas przetworzenia

Algorytmy grafowe (AGR 320) p. 53/9

Algorytmy grafowe (AGR 320) p. 54/9

1/

Algorytmy grafowe (AGR 320) p. 55/9

1/

2/

Algorytmy grafowe (AGR 320) p. 56/9

1/

2/

3/

Algorytmy grafowe (AGR 320) p. 57/9

1/

2/

3/

4/

Algorytmy grafowe (AGR 320) p. 58/9

1/

2/

3/

4/

5/

Algorytmy grafowe (AGR 320) p. 59/9

1/

2/

3/

4/

5/

Algorytmy grafowe (AGR 320) p. 60/9

1/

2/

3/

4/

5/6

Algorytmy grafowe (AGR 320) p. 61/9

1/

2/

3/

4/

5/6

Algorytmy grafowe (AGR 320) p. 62/9

1/

2/

3/

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 63/9

1/

2/

3/

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 64/9

1/

2/

3/ 8

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 65/9

1/

2/

3/ 8

9/

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 66/9

1/

2/

3/ 8

9/

10/

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 67/9

1/

2/

3/ 8

9/

10/

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 68/9

1/

2/

3/ 8

9/

10/11

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 69/9

1/

2/

3/ 8

9/12

10/11

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 70/9

1/

2/ 13

3/ 8

9/12

10/11

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 71/9

1/ 14

2/ 13

3/ 8

9/12

10/11

4/ 7

5/6

Algorytmy grafowe (AGR 320) p. 72/9

Algorytmy grafowe (AGR 320) p. 73/9

1/

Algorytmy grafowe (AGR 320) p. 74/9

1/

2/

Algorytmy grafowe (AGR 320) p. 75/9

1/

2/

3/

Algorytmy grafowe (AGR 320) p. 76/9

1/

2/

3/

4/

Algorytmy grafowe (AGR 320) p. 77/9

1/

2/

3/

4/

Algorytmy grafowe (AGR 320) p. 78/9

1/

2/

3/

4/5

Algorytmy grafowe (AGR 320) p. 79/9

1/

2/

3/ 6

4/5

Algorytmy grafowe (AGR 320) p. 80/9

1/

2/ 7

3/ 6

4/5

Algorytmy grafowe (AGR 320) p. 81/9

1/

2/ 7

8/

3/ 6

4/5

Algorytmy grafowe (AGR 320) p. 82/9

1/

2/ 7

8/

3/ 6

4/5

Algorytmy grafowe (AGR 320) p. 83/9

1/

2/ 7

8/9

3/ 6

4/5

Algorytmy grafowe (AGR 320) p. 84/9

1/ 10

2/ 7

8/9

3/ 6

4/5

Algorytmy grafowe (AGR 320) p. 85/9

1/ 10

2/ 7

8/9

3/ 6

4/5

11/

Algorytmy grafowe (AGR 320) p. 86/9

1/ 10

2/ 7

8/9

3/ 6

4/5

11/

12/

Algorytmy grafowe (AGR 320) p. 87/9

1/ 10

2/ 7

8/9

3/ 6

4/5

11/

12/

Algorytmy grafowe (AGR 320) p. 88/9

1/ 10

2/ 7

8/9

3/ 6

4/5

11/

12/13

Algorytmy grafowe (AGR 320) p. 89/9

1/ 10

2/ 7

8/9

3/ 6

4/5

11/

12/13

Algorytmy grafowe (AGR 320) p. 90/9

1/ 10

2/ 7

8/9

3/ 6

4/5

11/14

12/13

Algorytmy grafowe (AGR 320) p. 91/9

Algorytm DFS w wersji rekurencyjnej

G, x

N umer, Drzewo,

vx N umer[v] P onumerowano 1 w (v) N umer[w] = 0 P onumerowano P onumerowano + 1 N umer[w] P onumerowano Drzewo Drzewo {vw} (G, w) N umer(w) < N umer(v) {vw} (N umer, Drzewo, )

Algorytmy grafowe (AGR 320) p. 92/9

Przykadem zastosowania procedury DF S jest algorytm N UMEROWANIE W SZYSTKICH W IERZCHOKW, ktry wykorzystuje procedure DFS do ponumerowania wszystkich wierzchokw grafu G.8 7 1 2 @ D E 3 F C G 4H ! " # %$ %$ '& ( ) 0 1 2 3 4 5 6 7 1 8 9 @ A 9 B C 7 D E

G

vV N umer[v] 0 Drzewo vV N umer[v] = 0 P T Q R S " P T Q P R S " U V W V X `Y ba

(G, v)

! " Q c

d e f

I

Algorytmy grafowe (AGR 320) p. 93/9

Uwagi koncowe: zo ono c DFS (i wielu algorytmw wykorzystujacych z s DFS) jest rz O(|V | + |E|) edu dodatkowe informacje na temat poprawno ci obu s algorytmw przeszukiwania grafow oraz ich zastosowan sa zawarte Rozdziale 23 ksia ki Cormena, Leisersona i z Rivesta (patrz literatura pomocnicza wykadu)

Algorytmy grafowe (AGR 320) p. 94/9

Klasykacja krawedzi grafu przy przeszukiwaniu w gab

p. 1/13

T F

T

C T B C C B

T

T

p. 2/13

krawedzie drzewowe (T) - krawedzie nale ace do drzew z lasu przeszukiwan w gab krawedzie powrotne (B) - krawedzie (u, v) aczace wierzchoek u z jego przodkiem v w drzewie krawedzie w przd (F) - krawedzie (u, v) aczace wierzchoek u z jego potomkiem v w drzewie krawedzie poprzeczne (C) - pozostae krawedzie

p. 3/13

Przykad . Sortowanie topologiczne

G = (V, E) - acykliczny graf skierowany

(dag - directed acyclic graph) sortowanie topologiczne dagu polega na takim liniowym uporzadkowaniu jego wierzchokw, ze je eli dag z zawiera uk (u, v) to wierzchoek u wystepuje w tym uporzadkowaniu przed wierzchokiem v rwnowa nie, je eli G = (V, E) jest dagiem to mo na z z z umie ci jego wierzchoki na prostej, w taki sposb, ze s c wszystkie uki sa skierowane od lewej do prawej

p. 4/13

A

B

C

D

E

F

G

H

I

J

K

L

M

N

D

B

C

G

A

E

F

M

J

L

K

N

I

H

p. 5/13

Lemat . Graf skierowany G jest grafem acyklicznym wtedy i tylko wtedy, gdy przy przeszukiwaniu w gab grafu G nie pojawiaja sie krawedzie powrotne. SORTOWANIE-TOPOLOGICZNE(G)

wykonaj DFS(G) w celu obliczenia czasw przetworzenia dla wszystkich wierzchokw wstaw wierzchoek v na poczatek listy, kiedy tylko zostanie on przetworzony

p. 6/13

A

B

C

D

E

F

G

H

I

J

K

L

M

N

p. 7/13

A 1/

B

C

D

E

F

G

H

I

J

K

L

M

N

p. 8/13

A 1/

B

C

D

E

F 2/

G

H

I

J

K

L

M

N

p. 9/13

A 1/

B

C

D

E

F 2/

G

H

I 3/

J

K

L

M

N

p. 10/13

A 1/

B

C

D

E

F 2/

G

H 4/

I 3/

J

K

L

M

N

p. 11/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/

J

K

L

M

N

Kolejka: H

p. 12/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J

K

L

M

N

Kolejka: I, H

p. 13/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J

K

L

M 7/

N

Kolejka: I, H

p. 14/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J 8/

K

L

M 7/

N

Kolejka: I, H

p. 15/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J 8/

K 9/

L

M 7/

N

Kolejka: I, H

p. 16/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J 8/

K 9/

L

M 7/

N 10/

Kolejka: I, H

p. 17/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J 8/

K 9/

L

M 7/

N 10/11

Kolejka: N, I, H

p. 18/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J 8/

K 9/12

L

M 7/

N 10/11

Kolejka:

K, N, I, H

p. 19/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J 8/

K 9/12

L 13/

M 7/

N 10/11

Kolejka:

K, N, I, H

p. 20/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J 8/

K 9/12

L 13/14

M 7/

N 10/11

Kolejka:

L, K, N, I, H

p. 21/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/

N 10/11

Kolejka:

J, L, K, N, I, H

p. 22/13

A 1/

B

C

D

E

F 2/

G

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

M, J, L, K, N, I, H

p. 23/13

A 1/

B

C

D

E

F 2/ 17

G

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

F, M, J, L, K, N, I, H

p. 24/13

A 1/

B

C

D

E 18/

F 2/ 17

G

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

F, M, J, L, K, N, I, H

p. 25/13

A 1/

B

C

D

E 18/19

F 2/ 17

G

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

E, F, M, J, L, K, N, I, H

p. 26/13

A 1/20

B

C

D

E 18/19

F 2/ 17

G

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

A, E, F, M, J, L, K, N, I, H

p. 27/13

A 1/20

B21/

C

D

E 18/19

F 2/ 17

G

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

A, E, F, M, J, L, K, N, I, H

p. 28/13

A 1/20

B21/

C 22/

D

E 18/19

F 2/ 17

G

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

A, E, F, M, J, L, K, N, I, H

p. 29/13

A 1/20

B21/

C 22/

D

E 18/19

F 2/ 17

G 23/

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

A, E, F, M, J, L, K, N, I, H

p. 30/13

A 1/20

B21/

C 22/

D

E 18/19

F 2/ 17

G 23/ 4 2

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

G, A, E, F, M, J, L, K, N, I, H

p. 31/13

A 1/20

B21/

C 22/25

D

E 18/19

F 2/ 17

G 23/ 4 2

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

C, G, A, E, F, M, J, L, K, N, I, H

p. 32/13

A 1/20

B21/26

C 22/25

D

E 18/19

F 2/ 17

G 23/ 4 2

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

B, C, G, A, E, F, M, J, L, K, N, I, H

p. 33/13

A 1/20

B21/26

C 22/25

D 27/

E 18/19

F 2/ 17

G 23/ 4 2

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

B, C, G, A, E, F, M, J, L, K, N, I, H

p. 34/13

A 1/20

B21/26

C 22/25

D 27/28

E 18/19

F 2/ 17

G 23/ 4 2

H 4/5

I 3/ 6

J 8/15

K 9/12

L 13/14

M 7/16

N 10/11

Kolejka:

D, B, C, G, A, E, F, M, J, L, K, N, I, H

p. 35/13

A

B

C

D

E

F

G

H

I

J

K

L

M

N

p. 36/13

D

B

C

G

A

E

F

M

J

L

K

N

I

H

p. 37/13

4.Spjnosc grafw4.1 Skadowe spjno ci sDenicja (Spjno c grafu). Graf nieskierowany G jest spjny (sabo s spjny) wtedy i tylko wtedy, gdy miedzy ka da para jego wierzchokw z z istnieje przynajmniej jedna scie ka. Denicja (Spjno c grafu). Graf G = (V, E) jest spjny wtedy i tylko s wtedy, gdy dla ka dego rozbicia V na niepuste podzbiory V1 i V2 istnieje z krawed z jednym koncem w V1 a drugim w V2 . z

p. 38/13

Denicja (Spjno c wierzchokw, skadowe spjno ci). Dany jest s s graf G = (V, E). Dwa wierzchoki u i v (u, v V ) nazywamy spjnymi je eli istnieje (u, v)- cie ka w G. z s z Spjno c wierzchokw jest relacja rwnowa no ci na zbiorze s z s wierzchokw V . Zatem istnieje podzia zbioru V na niepuste podzbiory (klasy rwnowa no ci) V1 , V2 , . . ., V takie, ze dwa wierzchoki sa z s spjne wtedy i tylko wtedy, gdy nale a do tego samego podzbioru Vi . z Podgrafy G[V1 ], G[V2 ], . . ., G[V ] nazywamy skadowymi spjno ci s grafu G, natomiast = (G) oznacza liczbe skadowych spjno ci s grafu G.

p. 39/13

DFS i BFS systematycznie przechodza wszystkie wierzchoki (i krawedzie) grafu, rozpoczynajac od zadanego wierzchoka v moga doj c tylko do wierzchokw znajdujacych sie w s tej samej skadowej co v

mo na je znacznie upro ci , poniewa podzia krawedzi z s c z na podzbiory w tym zadaniu jest nieistotny! "

G, v

#

$ % & ) '( 10 2 )

{v} w (v), (v) sasiedzi v w /& ) '( 10 2 ) & ) '( 10 2 )

& P ) '( 4 10 I % 3 2 )

I

4 5

!

3 4 5 6 7 8 9 @ AB 9 7 C D 8 E F C E GCH & ) '( 10 2 )

(G, w)

p. 40/13

w przypadku gdy interesuje nas jedynie liczba skadowych grafu G to mo na u y nastepujacej z z c procedury:Q SR T UV W X Y a` a` cb d e f g hi

G

0 v V (G) v /Tx U y X q trs vu w t

T V x

q trs vu w t

W X y

(G, v)

zo ono c obu powy szych algorytmw jest tego z s z samego rz jak DFS, to znaczy O(|V | + |E|) edu

U yW U

h d h

+1 ()

p

p. 41/13

Algorytm scalania wierzchokw

V1

V2

V3

V4

V5

V6

V7

p. 42/13

V1

V2

V3

V4

V5

V6

V7

p. 43/13

z

V3

V4

V5

V6

V7

p. 44/13

z

V3

V4

V5

V6

V7

p. 45/13

z

V3

V4

t

V7

p. 46/13

z

V3

V4

t

V7

p. 47/13

Niech vi oraz vj beda przylegymi wierzchokami grafu G = (V, E). Je eli graf G = (V , E) jest otrzymany z grafu G z przy pomocy operacji scalenia jego wierzchokw vi oraz vj , to spenia on nastepujace warunki: / V = V \ {vi , vj } {z}, gdzie z V , tzn. zbir wierzchokw V nowego grafu otrzymujemy ze zbioru wierzchokw V wyj ciowego grafu usuwajac najpierw s scalane wierzchoki vi oraz vj a nastepnie dodajac do niego nowy wierzchoek z (powstay przez scalenie wierzchokw vi , vj ).

p. 48/13

(vm , vl ) E , gdzie (m, l = i, j) wtedy i tylko wtedy, gdy (vm , vl ) E , tzn. wszystkie krawedzie grafu G, ktre nie sa incydentne do zadnego z wierzchokw vi ani vj sa rwnie krawedziami nowego grafu G. z (vm , z) E , gdzie (m = i, j) wtedy i tylko wtedy, gdy (vm , vj ) E lub (vm , vi ) E ; tzn. krawed incydentna do z wierzchoka z (powstaego przez scalenie wierzchokw vi oraz vj ) w grae G odpowiada krawedzi incydentnej do wierzchoka vi lub do vj w grae wyj ciowym G (i na s odwrt).

p. 49/13

(z, z) E wtedy i tylko wtedy, gdy (vi , vi ) E lub (vj , vj ) E lub (vi , vj ) E ; tzn., ze petla incydentna z nowo powstaym wierzchokiem z w grae G powstaje wtedy i tylko wtedy, gdy w grae G istniaa petla incydentna z wierzchokiem vj lub z wierzchokiem vj , lub istniaa krawed (vi , vj ). z

w operacji scalania mo na zastapi wielokrotne z c krawedzie pojedyncza i usuna petle c scalenie dwch przylegych wierzchokw nie zmienia liczby skadowych spjno ci s

p. 50/13

Opis algorytmu scalaniadany jest graf G: rozpoczynamy od pewnego wierzchoka w grae i scalamy kolejno wszystkie wierzchoki przylege do niego nastepnie bierzemy scalony wierzchoek i znw kolejno scalamy z nim wszystkie te wierzchoki, ktre sa teraz do niego przylege proces scalania powtarzamy do momentu, gdy scalony wierzchoek jest izolowany. To wskazuje, ze pewna spjna skadowa zostaa scalona do pojedynczego wierzchoka

p. 51/13

je eli poza scalonym "wierzchokiem nie ma ju innych z z wierzchokw w grae, to graf jest spjny w przeciwnym przypadku, mo emy analogicznie z wyznaczy pozostae wierzchoki: usuwamy c wierzchoek otrzymany w wyniku scalania (zapisujemy zbir wierzchokw, z ktrych on powsta jako kolejna skadowa spjno ci) i rozpoczynamy nasza procedure s scalania od dowolnego wierzchoka w otrzymanym grae

p. 52/13

operacje scalania wierzchokw atwo jest wykona dla c typowych reprezentacji komputerowych grafw w przypadku listy krawedzi usuwamy listy odpowiadajace wierzchokom vi i vj , a nastepnie tworzymy nowa liste dla wierzchoka z bedaca suma usunietych list (dla wierzchokw vi i vj ). Nale y z pamieta o zamianie na wszystkich listach elementw c vi oraz vj na z .

p. 53/13

1

2

5

3

4

6

1 2 3 4 5 6

2 1 1 2 4 2

3 3 2 3 6 5 4 4 5 6

p. 54/13

1

2

5

3

4

6

1 2 3 4 5 6

2 1 1 2 4 2

3 3 2 3 6 5 4 4 5 6

p. 55/13

1

5

3

4

6

1 3 4 5 6

1 1 1 4 1

3 1 3 6 5

4

6

4 5

p. 56/13

1

5

3

4

6

1 3 4 5 6

3 1 1 4 1

4

6

4 3 6 5

5

p. 57/13

1

5

4

6

1

4

4

6

4 5 6

1 4 1

1 6 5

5

p. 58/13

1

5

4

6

1

4

6

4 5 6

1 4 1

5 6 5

p. 59/13

1

5

6

1

5

6

5 6

1 1

6 5

p. 60/13

1

6

1

6

6

1

p. 61/13

1

1

p. 62/13

w macierzy przylego ci A scalanie wierzchoka j -tego z s i-tym dokonuje sie za pomoca operacji (dodawania logicznego) j -tego wiersza do i-tego wiersza oraz j -tej kolumny do i-tej kolumny. Nastepnie j -ty wiersz i j -ta kolumna sa usuwane z macierzy w macierzy przylego ci zamiana i-tej i j -tej kolumny z s rwnoczesna zamiana i-tego i j -tego wiersza odpowiada zmianie numeracji wierzchokw, wiec mo emy zao y , ze zawsze bedziemy scala z z c c wierzchoek pierwszy z i-tym i wynikowy scalony wierzchoek bedzie pierwszym wierzchokiem

p. 63/13

Algorytm S CALW IERZCHOKI scala wierzchoek pierwszy z i-tym. Parametr A oznacza macierz przylego ci, a n liczbe s wierzchokw. Aby usuna wierzchoek vi algorytm wpisuje c na jego miejsce ostatni wierzchoek (czas O(n) zamiast O(n2 ) w przypadku przesuwania elementw tablicy). Zwr my uwage, ze algorytm nie sprawdza, czy scalane c wierzchoki sa przylege. A, n, i d fe fe hg i j k l m n o p q j r s t un v x y w

k 1 n A[1, k] A[1, k] A[i, k] A[k, 1] A[k, 1] A[k, i] A[1, k] A[n, k] A[k, 1] A[k, n] nn1 (A, n) z { |

p. 64/13

do wyznaczenia skadowej spjno ci zawierajacej s wierzchoek v mo emy wykorzysta algorytm scalania z c wierzchokw S CALW IERZCHOKI, jak to ma miejsce w przedstawionym poni ej algorytmie S CAL S KADOWA z zauwa my, ze algorytm S CAL S KADOWA zamienia z najpierw wierzchoek v z pierwszym, a nastepnie tak dugo scala wierzchoki a wierzchoek 1 stanie sie z izolowany poniewa algorytm zmienia numeracje wierzchokw, z wiec tablica perm su y do odtworzenia numeracji z pierwotnej, dokadniej perm[i] jest numerem wierzchoka odpowiadajacego i-tej kolumnie macierzy A.

p. 65/13

A, n, v

} ~

perm k1 n A[1, k] A[v, k] A[k, 1] A[k, v] perm[v] perm[1] z {v} i2 (i < n) (A[1, i] = 0) ii+1 A[1, i] = 0 (A, n, z) z z {perm[i]} ~ ~

~

~ ~

(A, n, i) perm[i] perm[n + 1]

~

p. 66/13

Przykad . Znale c skadowa sabej spjno ci zawierajaca wierzchoek z s v8 grafu danego macierza przylego ci: s

v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v1 0 0 1 0 0 0 0 0 0 1 v2 0 0 0 1 0 1 0 1 0 0 v3 1 0 0 0 0 0 0 0 0 1 v4 0 1 0 0 0 1 0 0 0 0 v5 0 0 0 0 0 0 1 0 1 0 A(G) = . v6 0 1 0 1 0 0 0 0 0 0 v7 0 0 0 0 1 0 0 0 1 0 v8 0 1 0 0 0 0 0 0 0 0 v9 0 0 0 0 1 0 1 0 0 1 v10 1 0 1 0 0 0 0 0 1 0

p. 67/13

v8

u

v2

u

u

v6

v3

v4

u

v1

u d d d d u du

v10

v9

u u u

v5

v7

p. 68/13

W pierwszym kroku zamieniamy miejscami wierzchoki v8 i v1 oraz inicjujemy zmienne:perm z z 0 v2 1 v3 0 v4 0 v 0 A(G) = 5 v6 0 v7 0 v1 0 v9 0 v10 0 v2 1 0 0 1 0 1 0 0 0 0 v3 0 0 0 0 0 0 0 1 0 1 v4 0 1 0 0 0 1 0 0 0 0 v5 0 0 0 0 0 0 1 0 1 0 v6 0 1 0 1 0 0 0 0 0 0 v7 0 0 0 0 1 0 0 0 1 0 v1 0 0 1 0 0 0 0 0 0 1 v9 0 0 0 0 1 0 1 0 0 1 v10 0 0 1 0 0 , 0 0 1 1 0

z = {v8 }.

p. 69/13

z = {v8 }

u

v2

u

u

v6

v3

v4

u

v1

u d d d d u du

v10

v9

u u u

v5

v7

p. 70/13

Poniewa wierzchoek z jest incydentny z v2 wiec z dokonujemy ich scalenia poprzez S CALW IERZCHOKI(A, 10, 2). W wyniku otrzymujemy:perm z z 1 v10 0 v3 0 v4 1 A(G) = v5 0 v6 1 v7 0 v1 0 v9 0 v10 0 0 1 0 0 0 0 1 1 v3 0 1 0 0 0 0 0 1 0 v4 1 0 0 0 0 1 0 0 0 v5 0 0 0 0 0 0 1 0 1 v6 1 0 0 1 0 0 0 0 0 v7 0 0 0 0 1 0 0 0 1 v1 0 1 1 0 0 0 0 0 0 v9 0 1 1 0 1 , 0 1 0 0

z = {v2 , v8 }.

p. 71/13

z = {v2 , v8 }

6 # u u d d d "! d du

v

v3

v4

v1

u d d d d u du

v10

v9

u u u

v5

v7

p. 72/13

Tym razem pierwszym incydentnym do z wierzchokiem jest v4 , wiec scalamy je poprzez S CALW IERZCHOKI(A, 9, 4) i otrzymujemy:perm z z 1 v10 0 v3 0 v9 0 A(G) = v5 0 v6 1 v7 0 v1 0 v10 0 0 1 1 0 0 0 1 v3 0 1 0 0 0 0 0 1 v9 0 1 0 0 1 0 1 0 v5 0 0 0 1 0 0 1 0 v6 1 0 0 0 0 0 0 0 v7 0 0 0 1 1 0 0 0 v1 0 1 1 0 , 0 0 0 0

z = {v2 , v4 , v8 }.

p. 73/13

z = {v2 , v4 , v8 }

u u '$

v3

v6

&%

v1

u d d d d u du

v10

v9

u u u

v5

v7

p. 74/13

Nastepnie scalamy wierzchoki z i v6 : perm z z 1 v10 0 v3 0 A(G) = v9 0 v5 0 v1 0 v7 0 v10 0 0 1 1 0 1 0 v3 0 1 0 0 0 1 0 v9 0 1 0 0 1 0 1 v5 0 0 0 1 0 0 1 v1 0 0 0 1 0 0 1 v7 0 1 1 0 0 0 0 0 0 0 1, 1 0 0

z = {v2 , v4 , v6 , v8 }.

p. 75/13

z = {v2 , v4 , v6 , v8 }

u '$ &%

v3

v1

u d d d d u du

v10

v9

u u u

v5

v7

p. 76/13

4.1 Skadowe silnej spjno ci digrafw sDenicja (Osiagalno c wierzchokw). Dany jest graf skierowany s (digraf) G = (V, E). Mwimy ze wierchoek w V jest osiagalny z wierzchoka v V je eli istnieje skierowana (v, w)-scie ka w grae G. z z Denicja (Macierz osiagalno ci). Macierza osiagalno ci grafu s s skierowanego G = (V, E) nazywamy macierz zerojedynkowa D(G) = (dij ) (1 i, j (G)) ktrej element dij jest rwny jedynce, gdy wierzchoek vj jest osiagalny z wierzchoka vi , a zeru w przypadku przeciwnym.

p. 77/13

Denicja (Wzajemna osiagalno c wierzchokw). Mwimy, ze s wierzchoki v i w digrafu G = (V, E) sa wzajemnie osiagalne je eli w z grae G wierzchoek v jest osiagalny z w a w jest osiagalny z v . Denicja (Silna skadowa spjno ci). Podgraf indukowany G[V ] grafu s skierowanego G = (V, E) nazywa sie silna skadowa spjno ci s (fragmentem grafu) je eli ka da para wierzchokw z V jest wzajemnie z z osiagalna w G[V ]. W szczeglno ci je eli ka da para wierzchokw z V s z z jest wzajemnie osiagalna to graf jest silnie spjny.

p. 78/13

Twierdzenie . Ka dy maksymalny podzbir wierzchokw, ktrym z odpowiadaja identyczne wiersze macierzy osiagalno ci, tworzy skadowa s silnej spjno ci. s Dowd. Elementy gwnej przekatnej macierzy osiagalno ci D(G) sa z s denicji jedynkami. Je eli zatem we miemy dowolne dwa identyczne z z wiersze macierzy D(G), na przykad wiersze i-ty i j -ty, to

dij = dii = 1 = djj = dji . Oznacza to, ze wierzchoki vi oraz vj sa wzajemnie osiagalne i co za tym idzie nale a do tej samej skadowej silnej spjno ci. Biorac zatem z s wszystkie wierzchoki, ktrym odpowiadaja identyczne wiersze, otrzymujemy odpowiednia skadowa silnej spjno ci. s

p. 79/13

czy powy sze twierdzenie rozwiazuje problem badania z silnej spjno ci grafu? s niestety wyznaczanie macierzy osiagalno ci jest s pracochonne przypomnijmy, ze w macierzy P k (G) bedacej k -ta potega binarnej macierzy przej c P (G) digrafu G s (odpowiednika macierzy przylego ci A(G)dla grafu G) s element o wsprz ednych (i, j) jest liczba (vi , vj )- cie ek dugo ci k w grae G s z s je eli jednak operacje wykonamy nad pier cieniem z s algebry Boolea to element ten jest rwny 1 wtedy i tylko wtedy, gdy istnieje (vi , vj )- cie ek dugo ci k . s z s

p. 80/13

Macierz osiagalno ci mo na wyznaczy za pomoca s z c nastepujacego algorytmu: 1. Utwrz macierz binarna B = P (G) + I . 2. Dla k = 1, 2, ...,, gdzie k n 1 obliczaj B k (nad algebra Boolea) tak dugo, a B k = B k1 . z Mo na atwo wykaza , ze B k = D(G). Niestety, mo e sie z c z zda y , ze bedziemy musieli wyznaczy wszystkie potegi, z c c a do k = n 1, co dla du ych grafw mo e by bardzo z z z c pracochonne (mimo, ze zo ono c tego algorytmu jest z s wielomianowa wzgledem n).

p. 81/13

Inny prosty algorytm wyznaczania D(G): 1. Wierzchoek vi otrzymuje ceche c = i. 2. Wybieramy dowolny ocechowany wierzchoek vk i rozpatrujemy odpowiadajacy mu k -ty wiersz w macierzy P (G). Wszystkim nieocechowanym wierzchokom vj , dla ktrych pk,j = 1 nadajemy ceche c = i. Procedure punktu 2 kontynuujemy dotad, a nie bedzie mo na z z ocechowa zadnych nowych wierzchokw. c 3. W wierszu i-tym macierzy D(G) wstawiamy jedynki na pozycjach odpowiadajacych wierzchokom ocechowanym cecha c = i. BFS !! BFS !! BFS !!

p. 82/13

Algorytm Leifmana (1966)Oznaczmy pstopnie wierzchoka v skierowanego grafu G = (V, E):d+ (v) = |{(v1 , v2 ) E : v1 = v}|, d (v) = |{(v1 , v2 ) E : v2 = v}|.

W opisie algorytmu stosujemy nastepujace oznaczenia: l(v) lewa cecha wierzchoka v , p(v) prawa cecha wierzchoka v , S zbir podzbiorw wierzchokw tworzacych skadowe silnej spjno ci (fragmenty) digrafu. s

p. 83/13

1. W grae G poszukujemy wierzchokw v , dla ktrych d+ (v) = 0 lub d (v) = 0. Je eli sa takie wierzchoki, to z zaliczamy je do S, jako jednowierzchokowe skadowe silnej spjno ci. Usuwamy je z grafu G, tworzac s odpowiedni podgraf Go = (V o , E o ) i dla tego podgrafu kontynuujemy krok 1 tak dugo, a nie bedzie ju takich z z wierzchokw. 2. W podgrae Go = (V o , E o ) (uzyskanym w wyniku czynno ci kroku 1 lub 4) wybieramy dowolny s wierzchoek vo i rozpoczynamy proces cechowania wierzchokw podwjnymi cechami (l(v), p(v)), ktry realizujemy w nastepujacy sposb:

p. 84/13

(a) Na poczatku wszystkim wierzchokom v V o nadajemy warto ci cech (0, 0). Wszystkim nastepnikom v s wierzchoka vo nadajemy warto c cechy l(v) = 1. s Nieocechowanym nastepnikom tych ocechowanych wierzchokw te nadajemy warto c cechy l = 1 itd., a z s z dojdziemy do sytuacji, w ktrej nie bedzie mo na z powiekszy zbioru wierzchokw z cecha l = 1. c W wyniku tego postepowania, ceche l = 1 maja wszystkie wierzchoki osiagalne z wierzchoka vo . (b) Podobnie, startujac znw z wierzchoka vo , lecz poruszajac sie przeciwnie do zwrotu ukw, nadajemy prawe cechy p(v) = 1 wierzchokom v , z ktrych jest osiagalny wierzchoek vo za pomoca scie ek z (skierowanych) o niezerowej dugo ci. s

p. 85/13

Komentarz: Po zakonczeniu tego etapu ka dy wierzchoek z v V o ma nadane warto ci (zero lub jeden) obu cech l(x) i s p(x). W ten sposb zbir V o zosta podzielony na cztery rozaczne podzbiory V o = V00 V01 V10 V11 ,

gdzie indeksy oznaczaja odpowiednio warto ci cech (lewej i s prawej) wierzchokw nale acych do tych podzbiorw. z

Algorytm Leifmana c.d.3. Okre lamy nowe skadowe silnej spjno ci. Mo liwe sa s s z przy tym nastepujace sytuacje:

p. 86/13

(a) V11 = . Wtedy zbir V00 zawiera wierzchoek vo , tworzacy jednowierzchokowa skadowa silnej spjno ci s {vo }. Zapamietujemy zbir V00 \ {vo }, je eli jest on z niepusty, wraz z pozostaymi niepustymi zbiorami spo rd V01 , V10 . Przechodzimy do kroku 4. s (b) V11 = . Wtedy V11 stanowi kolejna, skadowa silnej spjno ci, ktra zaliczamy do zbioru S. Je eli pozostae s z zbiory V00 , V01 , V10 sa puste, to przechodzimy do kroku 4. W przeciwnym przypadku zapamietujemy niepuste zbiory i bedziemy je oddzielnie rozpatrywali w nastepnych etapach procedury, poniewa ka da nie z z wyznaczona do tej pory skadowa silnej spjno ci s zawiera sie cakowicie w jednym z tych zbiorw. Przechodzimy do kroku 4.

p. 87/13

4. Pytamy: czy sa zapamietane nierozpatrzone zbiory powstae w wyniku realizacji kroku 3? Je eli sa, to z wybieramy dowolny z nich i traktujac go jako nowy zbir V o , tworzymy podgraf Go =< V o , E o >, z ktrym przechodzimy do kroku 2. Je eli nie ma ju z z zapamietanych i nierozpatrzonych zbiorw, to zbir S zawiera wszystkie podzbiory tworzace skadowe silnej spjno ci. Oznacza to koniec algorytmu Leifmana. s Pseudokod tego algorytmu przedstawiono jako Algorytm L EIFMAN (G). Dane to graf G a wynik to rodzina zbiorw S. W algorytmie tym, dla uproszczenia zapisu, zasymulowano stos tablica. W praktycznych zastosowaniach nale y jednak z u y odpowiedniej struktury dynamicznej. z c

p. 88/13

G

S ; Stos[1] V (G); N Stos 1 Vo Stos[N Stos]; N Stos N Stos 1 znaleziono 0 v Vo d+ (v) = 0 d (v) = 0 znaleziono v; S S {{v}}; Vo Vo \ {v}; GGv

znaleziono = 0 Vo = v Vo l(v) p(v) 0 vo Vo S[1] vo ; N S 1 v s[N S]; N S N S 1 w + (v) l(w) = 0 l(w) 1; N S N S + 1; S[N S] w NS = 0 S[1] vo ; N S 1 v s[N S]; N S N S 1 w (v) p(w) = 0 p(w) 1; N S N S + 1; S[N S] w NS = 0 V00 V01 V10 V11 v Vo Vl(v),p(v) Vl(v),p(v) {v} V11 = S S {V11 }; G G V11 Vij (i, j) = (0, 0) Vij = N Stos N Stos + 1; ST os[N Stos] Vij N Stos = 1 (S)

p. 89/13

Dla l, p = 1, 2, 3, 4 oznaczymy przez Glp = G[Vlp ] podgraf generowany przez podzbir wierzchokw Vlp , bedacy jednym z czterech podzbiorw uzyskanych w wyniku procedury cechowania wierzchokw podgrafu Go , w punkcie 2 algorytmu Leifmana.Twierdzenie 1. Je eli V11 jest zbiorem pustym, to wierzchoek z poczatkowy vo stanowi jednowierzchokowa skadowa silnej spjno ci i s nale y do zbioru V00 . z Twierdzenie 2. Je eli V11 = , to podgraf G11 jest skadowa silnej z spjno ci, a wierzcholek vo , od ktrego zaczyna sie cechowanie s wierzchokw, nale y do V11 . z

p. 90/13

Twierdzenie 3. Ka da skadowa silnej spjno ci grafu Go zawiera sie z s cakowicie w jednym z czterech podgrafw Glp = G[Vlp ].

Niech zbir U V o stanowi zbir wierzchokw skadowej silnej spjno ci grafu Go . We my dowolny s z wierzchoek u U . Wierzchoek vo jest poczatkowym wierzchokiem procedury cechowania. Je eli w grae Go z istnieja (vo , u) i (u, vo ) cie ki, to na mocy Twierdzenia 2 s z zbir U = V11 . Pozostaje przypadek, gdy nie istnieja jednocze nie obie (vo , u)- i (u, vo )- cie ki. Mo na wtedy s s z z wyr ni trzy sytuacje: z cDowd.

p. 91/13

1. Istnieje (vo , u)- cie ka i nie istnieje (u, vo )- cie ka. s z s z Wtedy wierzchoek u otrzymuje warto c cechy l = 1, s p = 0. Tym samym wszystkie wierzchoki nale ace do U z na mocy denicji silnej spjno ci i z przechodnio ci s s relacji osiagalno ci musza mie warto ci cechy l = 1 i s c s p = 0, a zatem U V10 . 2. Nie istnieje (vo , u)- cie ka, a istnieje (u, vo )- cie ka. s z s z Wtedy wierzchoek u otrzymuje ceche l = 0, p = 1. Zatem wszystkie wierzchoki nale ace do U otrzymuja z te same warto ci cech i cay zbir U nale y do V01 . s z s z 3. Nie istnieje ani (vo , u)- ani (u, vo )- cie ka. Wtedy wszystkie wierzchoki zbioru U otrzymuja warto ci cech s l = 0, p = 0 i tym samym cay zbir U nale y do V00 . z

p. 92/13

Przykad . Wyznaczy za pomoca algorytmu Leifmana wszystkie c skadowe silnej spjno ci grafu skierowanego o macierzy przej c: s s 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 1 1 1 1 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 P = 0 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0

p. 93/13

1

0

0

2

0 0

3

0

0

0

0

4

0

0

0 0

0

0

0

0

5

6

7

8

0

0

0 0

0

0

9

10

11

12

0

0

p. 94/13

1

0

0

2

0 0

3

0

0

0

0

4

0

0

0 0

0

0

0

0

5

6

7

8

0

0

0 0

0

0

9

10

11

12

0

0

p. 95/13

1

0

0

2

0 0

0

0

4

0

0

0 0

0

0

0

0

5

6

7

8

0

0

0 0

0

0

9

10

11

12

0

0

S1 = {3}

p. 96/13

1

0

0

2

0 0

1

0

4

0

0

1

0

0

0

1

0

5

6

7

8

1

0

0 0

1

0

9

10

11

12

1

0

S1 = {3}

p. 97/13

1

1

0

2

0 0

1

0

4

1

0

1

0

1

0

1

0

5

6

7

8

1

0

1

0

1

0

9

10

11

12

1

0

S1 = {3}

p. 98/13

1

1

0

2

1

0

1

0

4

1

0

1

0

1

0

1

0

5

6

7

8

1

0

1

0

1

0

9

10

11

12

1

0

S1 = {3}

p. 99/13

1

1

0

2

1

0

1

1

4

1

0

1

0

1

0

1

0

5

6

7

8

1

0

1

0

1

0

9

10

1100

12

1

1

V =V =O01

V ={1,2,5,6,7,8,9,10,11}

S1 = {3} S 2= {4, 12}

10

V ={4,12}11

p. 100/13

1

0

0

2

0

0

0

0

0

0

0

0

0

0

5

6

7

8

0 0

0 0

0

0

9

10

11

S1 = {3} S 2= {4, 12}

p. 101/13

1

0

0

2

0

0

0

0

1

0

0

0

0

0

5

6

7

8

0 0

1

0

0

0

9

10

11

S1 = {3} S 2= {4, 12}

p. 102/13

1

0

1

2

0

0

0

0

1

1

0

0

0

0

5

6

7

8

0 0

1

1

0

1

9

10

11

S1 = {3} S 2= {4, 12} S 3= {6, 10}

p. 103/13

1

0

1

2

0

1

1 0 1 1 1 0 1 0 0

5

6

7

8

0 1

1

1

0

1

9

10

11

S1 = {3} S 2= {4, 12} S 3= {6, 10}

p. 104/13

1

0

1

2

0

1

1 0 1 1 1 0 1 0 1

5

6

7

8

0 1

1

1

0

1

9

10

11 V = V10= O 00 V01 {1,2,5,7,8,9,11} =

S1 = {3} S 2= {4, 12} S 3= {6, 10}

V11 {6,10} =

p. 105/13

1

0

0

2

0

0

0

0

0

0

0

0

5

7

8

0 0

0

0

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10}

p. 106/13

1

1

0

2

1

0

1

0

0

0

1

0

5

7

8

0 0

0

0

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10}

p. 107/13

1

1

0

2

1

0

1

0

1

0

1

0

5

7

8

1

0

0

0

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10}

p. 108/13

1

1

0

2

1

0

1

0

1

0

1

0

5

7

8

1

0

1

0

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10}

p. 109/13

1

1

0

2

1

0

1

1

1

0

1

1

5

7

8

1

0

1

0

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10}

p. 110/13

1

1

0

2

1

1

1

1

1

0

1

1

5

7

8

1

0

1

0

9

11 V = V01= O 00 S1 = {3} S 2= {4, 12} S 3= {6, 10} S 4= {2, 5, 8} V = {1, 7, 9, 11} 10 V = {2, 5, 8} 11

p. 111/13

1

0

0

0

0

7

0 0

0

0

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10} S 4= {2, 5, 8}

p. 112/13

1

1

0

1

0

7

0 0

0

0

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10} S 4= {2, 5, 8}

p. 113/13

1

1

0

1

0

7

1

0

1

0

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10} S 4= {2, 5, 8}

p. 114/13

1

1

1

1

1

7

1

0

1

0

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10} S 4= {2, 5, 8}

p. 115/13

1

1

1

1

1

7

1

1

1

1

9

11

S1 = {3} S 2= {4, 12} S 3= {6, 10} S 4= {2, 5, 8} S 5= {1, 7, 9, 11}

V = V01= V = O 00 10 V = {1, 7, 9, 11} 11

p. 116/13

Algorytm wykorzystujacy DFS podobna idea do algorytmu Leifmana (BFS na grae skierowanym i jego transpozycji) transpozycja digrafu G = (V, E): GT (V, E T ), gdzie {(u, v) : (v, u) E} kluczowa obserwacja sprowadza sie do stwierdzenia, ze digrafy G i GT maja dokadnie te same skadowe silnej spjno ci s konstrukcja transpozycji grafu ma zo ono c z s O(|V | + |E|)

p. 117/13

DFS-S ILNE -S PJNE -S KADOWE (G) 1. wykonaj DFS(G) w celu obliczenia czasu przetworzenia dla ka dego wierzchoka grafu z 2. oblicz transpozycje GT digrafu G 3. wykonaj DFS(GT ) rozpoczynajac budowe kolejnego drzewa w lesie przeszukiwania w gab od wierzchoka o najwy szym czasie przetworzenia z 4. wypisz wierzchoki z ka dego drzewa w lesie z przeszukiwania w gab z kroku 3 jako oddzielna silnie spjna skadowa

p. 118/13

Twierdzenie . Algorytm DFS-S ILNE -S PJNE -S KADOWE (G) poprawnie oblicza silnie spjne skadowe grafu skierowanego G.

2

szczegowy dowd powy szego twierdzenia jest z zawarty w paragrae 23.8 ksia ki Cormena, Leisersona z i Rivesta ograniczymy sie do zademonstrowania dziaania algorytmu na na przykadzie znajdowania silnie spjnych skadowych nastepujacego grafu:

p. 119/13

A

B

C

D

E

F

G

p. 120/13

A

1/14

B

6/13

2/5

C

11/12

8/9

7/10

3/4

D

E

F

G

p. 121/13

A

B

C

D

E

F

G

p. 122/13

A

1/14

B

C

D

E

F

G

p. 123/13

A

B

2/5

C

D

E

F

G

p. 124/13

A

B

C

3/4

D

E

F

G

p. 125/13

S1 = {A, B, D, E, F} A S 2= {C} S 3= {G}

B

C

D

E

F

G

p. 126/13

A

B

C

D

E

F

G

p. 127/13

Przykad . Sortowanie semi-topologiczne

G = (V, E) - dowolny graf skierowany (digraf)

sortowanie semi-topologiczne digrafu polega na takim liniowym uporzadkowaniu jego wierzchokw, ze je eli z wierzchoek u wystepuje w tym uporzadkowaniu przed wierzchokiem v i wierzchoek u jest osiagalny z wierzchoka v to wierzchoek v jest osiagalny z wierzchoka u je eli digraf jest acykliczny (dag) to uporzadkowanie z semi-topologiczne jest topologiczne algorytm sortowania semi-topologicznego wierzchokw dowolnego digrafu jest identyczny z algorytmem sortowania topologicznego

p. 128/13

SORTOWANIE-SEMI-TOPOLOGICZNE(G) wykonaj DFS(G) w celu obliczenia czasw przetworzenia poszczeglnych wierzchokw wstaw wierzchoek v na poczatek listy, kiedy tylko zostanie on przetworzonyA

B

C

D

E

F

G

p. 129/13

A

1/14

B

6/13

2/5

C

11/12

8/9

7/10

3/4

D

E

F

G

p. 130/13

A

1/14

A, B, D, F, E, C, G

B

6/13

2/5

C

11/12

8/9

7/10

3/4

D

E

F

G

p. 131/13

A

B

D

F

E

C

G

p. 132/13

5. Najkrtsze scie ki z5.1 Odlego ci w grafach: denicje i wasno ci s sDenicja (Dugo c scie ki). Dugo cia scie ki nazywamy liczbe s z s z z krawedzi wystepujacych w tej scie ce. Bardziej formalnie, je eli z

W = v 0 e1 v 1 e2 , . . . , ek v k z jest scie ka, to jej dugo cia k (bo wystepuja w niej kolejno krawedzie s (uki) e1 , e2 , . . ., ek ).

p. 1/6

Denicja (Odlego c wierzchokw). Je eli dwa wierzchoki v i u s z nale a do tej samej skadowej spjno ci grafu G = (V, E) to ich z s odlego c (v, u) = G (v, u) jest dugo cia najkrtszej (v, u)- cie ki w s s s z G, w przeciwnym przypadku (v i u nale a do r nych skadowych) z z (v, u) = .

je eli krawedziom grafu zostay przyporzadkowane z pewne liczby (wagi krawedzi), to graf z taka dodatkowo okre lona na zbiorze krawedzi funkcja nazywa s c bedziemy grafem z wagami dugo c scie ki w takim grae to suma wag jej krawedzi s z graf bez wag mo emy traktowa jako graf z wagami z c jednostkowymi

p. 2/6

Denicja (Srednica grafu). Srednica grafu G = (V, E), oznaczana

diam(G), nazywamy najwieksza odlego c miedzy wierzchokami grafu, s to jest

diam(G) = max{G (v, u) : v, u V (G)}. Denicja (Promien grafu). Promieniem grafu G = (V, E), oznaczanym r(G), nazywamy wielko c s

r(G) = min max{G (v, u) : u V (G)}.vV (G)

p. 3/6

Wierzchoki dla ktrych osiagniete jest powy sze minimum, z to znaczy wierzchoki v V (G) takie, zemax{G (v, u) : u V (G)} = r(G),

nazywamy wierzchokami centralnymi, a zbir wierzchokw centralnych nazywamy centrum grafu. z 1. Najkrtsza scie ka miedzy dwoma wierzchokami (odlego c wierzchokw). s z 2. Najkrtsze scie ki z dowolnego wierzchoka do pozostaych wierzchokw. z 3. Najkrtsze scie ki miedzy wszystkimi parami wierzchokw (promien, srednica i centrum grafu).

p. 4/6

z 5.1 Najkrtsze scie ki: wagi jednostkowe z Opis algorytmu znajdowania najkrtszej scie ki miedzy dwoma ustalonymi wierzchokami (przy pomocy BFS ). 1. Etykietujemy wierzchoek s cecha 0 ; i := 0. 2. Znajdujemy wszystkich niezaetykietowanych jeszcze sasiadw (wszystkie nastepniki w przypadku grafu skierowanego) wierzchokw zaetykietowanych cecha i. Je eli takich wierzchokw nie ma, to STOP. z 3. Etykietujemy wszystkie wierzchoki znalezione w kroku 2 cecha i + 1. 4. Je eli wierzchoek t zosta zaetykietowany, to STOP. z W przeciwnym razie zmieniamy i := i + 1 i wracamy do kroku 2.

p. 5/6

bardziej precyzyjnie procedura ta przedstawiona jest w postaci pseudokodu jako algorytm D IST BFS w algorytmie tym d jest tablica wyznaczonych ju z odlego ci. s wewnatrz petli repeat P jest zbiorem wierzchokw o odlego ci k 1 od s, sN jest aktualnie wyznaczanym zbiorem wierzchokw o odlego ci k s (v) to zbir sasiadw wierzchoka v

dziaanie programu konczy sie, gdy znajdziemy odlego c s od t (warunek w = t) lub znajdziemy s odlego ci s od wszystkich wierzchokw w skadowej s zawierajacej s (warunek N = ).

p. 6/6

G, s, t

v V (G) d[v] d[s] 0; P {s}; k 0

P N ; N ; k k + 1 vP w (v) d[w] = d[w] k N N {w} w=t N = (d[t]) # ( " & & # " " $ % # $ % " # 1 ( 1 (

# ' # $

" & # $ %

# ( ) # $ 0

!

p. 7/6

Prosta modykacja tego algorytmu usuniecie instrukcji if w = t then break spowoduje obliczenie, w tablicy d, odlego ci s wierzchoka s od wszystkich wierzchokw grafu (to znaczy, po wyj ciu z procedury bedzie zachodzia dla s wszystkich v V (G) rwno c d[v] = (s, v)). sPrzykad . Wyznacz odlego c (a, i) w grae zadanego macierza s przylego ci sa a 0 b 1 c 0 d 0 A(G) = e 0 f 0 g 0 h 0 i 0 b 1 0 1 0 0 1 0 0 0 c 0 1 0 1 1 1 0 0 0 d 0 0 1 0 1 0 1 1 0 e 0 0 1 1 0 1 0 1 0 f 0 1 1 0 1 0 0 0 0 g 0 0 0 1 0 0 0 1 0 h 0 0 0 1 1 0 1 0 1 i 0 0 0 0 0. 0 0 1 0

p. 8/6

g

h

i

d

e

f

a

0

b

c

p. 9/6

g

h

i

d

e

f

a

0

1 b

c

p. 10/6

g

h

i

d

e

f

2

a

0

1 b

c

2

p. 11/6

g

h

i

d

3

e

3

f

2

a

0

1 b

c

2

p. 12/6

4 g

h

4 i

d

3

e

3

f

2

a

0

1 b

c

2

p. 13/6

4 g

h

4 i

5

d

3

e

3

f

2

a

0

1 b

c

2

p. 14/6

z 5.2 Najkrtsze scie ki: wagi nieujemne przypomnijmy, ze w grae z wagami na krawdedziach, z najkrtsza scie ka miedzy dwoma wierzchokami to z scie ka o najmniejszej wadze nie koniecznie majaca najmniej krawedzi w przypadku, gdy wszystkie wagi sa nieujemne do z wyznaczenia najkrtszej scie ki miedzy dwoma ustalonymi wierzchokami s i t stosujemy najcz sciej ealgorytm Dijkstry

p. 15/6

podstawowa idea algorytmu jest przemieszczanie sie po krawedziach grafu z wierzchoka s w kierunku z wierzchoka t i cechowanie wierzchokw ich bie acymi odlego ciami od wierzchoka s s cecha wierzchoka v staje sie staa, gdy jest rwna z dugo ci najkrtszej scie ki z s do v s wierzchoki, ktre nie zostay ocechowane staymi cechami maja cechy tymczasowe ceche tymczasowa mo emy interpretowa jako dugo c z c s z najkrtszej z dotychczas znalezionych scie ek z s do t.

p. 16/6

W algorytmie posugujemy sie nastepujacymi oznaczeniami: z 1. Cecha[v] dugo c aktualnie najkrtszej scie ki miedzy s s i v; 2. P oprzednik[v] bezpo redni poprzednik wierzchoka v s z na aktualnie najkrtszej scie ce z s do v ; 3. T ymczasowe zbir wierzchokw majacych aktualnie cechy tymczasowe. opis algorytmu zakada, ze mamy do czynienia z digrafem; dla grafw nieskierowanych poprzednik oznacza po prostu sasiad Uwaga:

p. 17/6

Algorytm Dijkstry1. Nadaj wierzchokowi s ceche rwna 0 (Cecha[s] 0). Pozostaym wierzchokom v , v = s, nadaj ceche rwna (Cecha[v] := ) oraz P oprzednik niezdeniowany (P oprzednik[v] 0). Zdeniuj warto ci pozostaych s zmiennych T ymczasowe V \ {s}, z s. 2. Wszystkim nastepnikom u wierzchoka z , ktre nie maja cechy staej (u T ymczasowe), dla ktrych Cecha[u] > Cecha[z] + wzu , nadaj nowe cechy tymczasowe Cecha[u] Cecha[z] + wzu . Zmien dla nich rwnie druga etykiete P oprzednik[u] z . z

p. 18/6

3. Spo rd wierzchokw z T ymczasowe wybierz jeden o s najmniejszej cesze i zapisz go jako x. Nadaj x ceche staa T ymczasowe T ymczasowe {x}; z := x. 4. Je eli z = t to wr do kroku 2. z c z 5. STOP dugo c najkrtszej scie ki z wierzchoka s do s z t wynosi Cecha[t], natomiast sama scie ka ma nastepujaca posta : c(s, . . . , P oprzednik[P oprzednik[t]], P oprzednik[t], t).

p. 19/6

G = (V, W ), s, t

2 43 5 67 8 9 @ BA BA DC E GF H I P Q RS

vV Cecha[v] ; P oprzednik[v] 0 Cecha[s] 0; T ymczasowe V \ {s}; z s; M

u (z) T ymczasowe Cecha[u] > Cecha[z] + W [z, u] Cecha[u] Cecha[z] + W [z, u] P oprzednik[u] z Cecha[u] M x u; M Cecha[u] T ymczasowe T ymczasowe \ {x} zx x=t (Cecha[t]) Y 5 6 V8 b a8 b 37 6 a 8 9 V a 7 U 8 9 V a 5 6 V W 7 X9 U U

6 V ` V W8

U 5 Y 6 5 V W X 9

T

p. 20/6

Uwaga! Je eli w opisie algorytmu zamienimy krok czwarty z na: 4. je eli T ymczasowe = to wr do kroku 2. z c lub, rwnowa nie, je eli w pseudokodzie zamienimy linie z z until x = t na until T ymczasowe = , to algorytm Dijkstry wyznaczy odlego c s od wszystkich pozostaych s wierzchokw grafu.Przykad . Wyznaczy za pomoca algorytmu Dijkstry dugo c c s z najkrtszej scie ki miedzy wierzchokami e i h w poni szym grae: z

p. 21/6

e 0,

15

f 13

g 12

h

12

12

14

15

11

15

11

12 a b

13 c

13 d

p. 22/6

e 0,

15

f 15 , e 13

g 12

h

12

12

14

15

11

15

11

12 , e a

12

12 , e b

13 c

13 d

p. 23/6

e 0,

15

f 15 , e 13

g 12

h

12

12

14

15

11

15

11

12 , e a

12

12 , e b

13 c

13 d

p. 24/6

e 0,

15

f 15 , e 13

g 27 , b 12

h

12

12

14

15

11

15

11

12 , e a

12

12 , e b

13

25 , b c

13 d

p. 25/6

e 0,

15

f 15 , e 13

g 27 , b 12

h

12

12

14

15

11

15

11

12 , e a

12

12 , e b

13

25 , b c

13 d

p. 26/6

e 0,

15

f 15 , e 13

g 27 , b 12

h 40 , c

12

12

14

15

11

15

11

12 , e a

12

12 , e b

13

25 , b c

13

38 , c d

p. 27/6

e 0,

15

f 15 , e 13

g 27 , b 12

h 39 , g

12

12

14

15

11

15

11

12 , e a

12

12 , e b

13

25 , b c

13

38 , c d

p. 28/6

e 0,

15

f 15 , e 13

g 27 , b 12

h 39 , g

12

12

14

15

11

15

11

12 , e a

12

12 , e b

13

25 , b c

13

38 , c d

p. 29/6

e 0,

15

f 15 , e 13

g 27 , b 12

h 39 , g

12

12

14

15

11

15

11

12 , e a

12

12 , e b

13

25 , b c

13

38 , c d

p. 30/6

zauwa my, ze zewnetrzna petla repeat w algorytmie z Dijkstry mo e by wykonana co najwy ej |V | 1 razy z c z (z mo e by , co najwy ej jeden raz, pewnym z c z wierzchokiem z V \ {s}) maksymalny przebieg tej petli ma miejsce wtedy, gdy wierzchoek koncowy t otrzymuje ceche staa jako ostatni podczas ka dego wykonania tej petli wykonujemy z O(|V |) operacji zo ono c obliczeniowa algorytmu, w obu wersjach z s wyznaczenie (s, t) i wyznaczenie odlego ci s od s wszystkich wierzchokw, jest rz edu O(n2), gdzie n = |V |

p. 31/6

z 5.3 Najkrtsze scie ki: wagi dowolne je eli wagi pewnych krawedzi grafu sa ujemne to z algorytm Dijkstry nie bedzie dziaa poprawnie, poniewa mechanizm nadawania cech staych zakada, z z ze waczenie do scie ki dodatkowych krawedzi mo e ja z tylko wydu y z c w przypadku ujemnych wag, dodanie krawedzi mo e z dugo c scie ki zmniejszy s z c Bellman i Ford zaproponowali modykacje algorytmu Dijkstry, polegajaca na tym, ze cechy tymczasowe otrzymuja te wierzchoki, ktrych cechy w ostatnim kroku zmieniy sie; algorytm konczy sie, gdy w ktrym s kroku, zadne cechy wierzchokw nie zmieniy sie

p. 32/6

w przypadku wag ujemnych potrzebujemy dodatkowego zabezpieczenia algorytmu przed zapetleniem sie je eli w grae istnieje cykl, ktrego suma wag jest z ujemna (ujemny cykl), to przechodzac ten cykl w kko bedziemy stale zmniejsza wage scie ki c z dla grafu z ujemnym cyklem problem znajdowania z dugo ci najkrtszych scie ek jest zle postawiony! s zauwa my, ze zbadanie czy dla danego grafu problem z jest dobrze czy zle postawiony, czyli sprawdzanie dugo ci wszystkich cykli w grae jest bardziej s z skomplikowane ni szukanie najkrtszych scie ek! z

p. 33/6

powy szy problem daje sie jednak rozwiaza w bardzo z c prosty sposb! zauwa my, ze je eli graf o n wierzchokach nie zawiera z z z ujemnych cykli, to najkrtsza scie ka przechodzi przez ka dy wierzchoek co najwy ej raz, czyli zawiera z z co najwy ej n 1 krawedzi i zwiazku z tym w algorytmie z wystarczy wykona co najwy ej n 1 krokw c z je eli po wykonaniu n 1 krokw mamy w grae z wierzchoki ze zmieniajacymi sie cechami to oznacza, ze w grae sa ujemne cykle!

p. 34/6

znajdujacego najkrtsze z scie ki z ustalonego wierzchoka s do wszystkich pozostaych wierzchokw (dowolne wagi krawedzi). Opis algorytmu Bellmana-Forda

Oznaczenia:lk (v) etykieta wierzchoka v w k -tej iteracji, pk (v) poprzednik wierzchoka v w k -tej iteracji, (v) zbir nastepnikw wierzchoka v , 1 (v) zbir poprzednikw wierzchoka v .

p. 35/6

Algorytm Bellmana-Forda1. k 1, S (s), 0, l1 (v) w(s, v), , 0, p1 (u) s, , v = s, v (s), v (s) {s}, / v = s, v (s), v (s) {s}. /

p. 36/6

2. Dla ka dego nastepnika v wierzchokw z S , czyli z v (S):lk+1 (v) min{lk (v), min {lk (u) + w(u, v)},uTv

gdzie Tv = 1 (v) S . Dla ka dego wierzchoka z v (S), dla ktrego lk+1 (v) = lk (u) + w(u, v): pk+1 (v) u, a dla pozostaych v pk+1 (v) pk (v). Dla v (S): lk+1 (v) := lk (v) oraz pk+1 (v) := pk (v). Zauwa my, ze zbir S zawiera wszystkie wierzchoki, do z z ktrych aktualnie najkrtsze scie ki z s skadaja sie z k ukw. Zbir Tv skada sie z wierzchokw, do ktrych z najkrtsze scie ki z s skadaja sie z k ukw i ktrych nastepnikiem jest v .

p. 37/6

3. (a) Je eli k n 1 oraz lk+1 (v) = lk (v) dla ka dego v , to z z STOP znale li my wszystkie szukane odlego ci. z s s (b) Je eli k < n 1 oraz lk+1 (v) = lk (v) dla pewnego z wierzchoka v , to przejd do kroku 4. z (c) Je eli k = n 1 oraz lk+1 (v) = lk (v) dla pewnego z wierzchoka v , to STOP graf ma cykle o ujemnych sumach wag. 4. S v; lk+1 (v) = lk (v) , k k + 1 i przejd do kroku 2. z Zbir S zawiera wierzchoki, do ktrych najkrtsze z scie ki z s maja k + 1 ukw.

p. 38/6

zauwa my, ze nie trzeba pamieta wszystkich z c wektorw lk w ka dej iteracji potrzebne sa tylko aktualnie tworzone z (z indeksem k + 1) oraz te z poprzedniej iteracji (z indeksem k ) dlatego w zamieszczonym poni ej pseudokodzie z algorytmu B ELLMAN -F ORD u ywamy wektora z CechaStara, dla oznaczenia warto ci z poprzedniej s iteracji i Cecha dla warto ci z aktualnej iteracji (dla s wektora p wystarczy tylko jeden wektor - P oprzednik )

p. 39/6

G = (V, E, W ), s

c ed f gh i p q sr sr ut v w x x y

vV CechaStara[v] ; P oprzednik[v] 0 CechaStara[s] 0; S {s}; k 0;

k k + 1; Cecha CechaStara uS v (u) Cecha[v] > CechaStara[u] + W [v, u] Cecha[v] CechaStara[u] + W [v, u] P oprzednik[v] u S {v V : Cecha[v] = CechaStara[v]} CechaStara Cecha S = k = 1 S= ( (Cecha) h i dh i p f g f f h f g p p g i i p g f i i de f d gh i d j k nlm op i q r i sp

g i

f g f p

)

o qh i

g d tu

p. 40/6

poniewa petla repeat wykonywana jest co najwy ej z z n 1 razy, a zakres petli ma zo ono c O(n2 ), wiec z s algorytm Bellmana-Forda ma zo ono c obliczeniowa z s O(n3 ) z Przykad . Wyznaczy dugo ci najkrtszych scie ek miedzy c s wierzchokiem a a pozostaymi wierzchokami grafu o nastepujacej macierzy wag:a a 0 b 1 c d W = e 2 f g h b c d 1 0 4 4 0 4 4 0 2 2 3 4 7 e f g h 2 1 3 3 3 4 7 . 0 3 0 5 5 0 6 6 0

p. 41/6

e

3 1 2

f 5

g 6

h

2

2

1

3

3

4 7

0,a

1b

4c

4d

p. 42/6

e

2,a

3 1 2

f 5

g 6

h

2

2

1

3

3

4 7

0,a

1

1,ab

4c

4d

p. 43/6

e

2,a

3 1 2

f 5

g 6

h

2

2

1

3

3

4 7

0,a

1

1,ab

4c

4d

p. 44/6

e

2,a

3 1

f 2,b 3 5

g 6

h

2

2

1

2

3

4 7

0,a

1

1,ab

4

5,bc

4d

p. 45/6

e

2,a

3 1

f 2,b 3 5

g 8,c 3 6

h

2

2

1

2

4 7

0,a

1

1,ab

4

5,bc

4

9,cd

p. 46/6

e

2,a

3 1

f 2,b 3 5

g 7,f 3 6

h

2

2

1

2

4 7

0,a

1

1,ab

4

0,fc

4

9,cd

p. 47/6

e

2,a

3 1

f 2,b 3 5

g 7,f 3 6

h

2

2

1

2

4 7

0,a

1

1,ab

4

0,fc

4

9,cd

p. 48/6

e

1,c

3 1

f 2,b 3 5

g 3,c 3 6

h

2

2

1

2

4 7

0,a

1

1,ab

4

0,fc

4

4,cd

p. 49/6

e

1,c

3 1

f 2,b 3 5

g 3,c 3 6

h

2

2

1

2

4 7

0,a

1

1,ab

4

0,fc

4

4,cd

p. 50/6

e

1,c

3 1

f 2,b 3 5

g 3,c 3 6

h 9,g

2

2

1

2

4 7

0,a

1

1,ab

4

0,fc

4

4,cd

p. 51/6

e

1,c

3 1

f 2,b 3 5

g 3,c 3 6

h 9,g

2

2

1

2

4 7

0,a

1

1,ab

4

0,fc

4

4,cd

p. 52/6

e

1,c

3 1

f 2,b 3 5

g 3,c 3 6

h 9,g

2

2

1

2

4 7

0,a

1

1,ab

4

0,fc

4

4,cd

p. 53/6

z znalezienie najkrtszych scie ek miedzy wszystkimi n 2 parami wierzchokw w grae G = (V, E) z nieujemnymi wagami, sprowadza sie do n-krotnego zastosowania zmodykowanego algorytmu Dijkstry, znajdujacego dla z ka dego wierzchoka grafu osobno najkrtsze scie ki z do wszystkich pozostaych wierzchokw poniewa zo ono c algorytmu Dijkstry wynosi O(n2 ), z z s z s zatem dla grafu z nieujemnymi wagami zo ono c takiej procedury jest rz O(n3 ) edu w przypadku gdy w grae wystepuja ujemne wagi n-krotne zastosowanie algorytmu Bellmana-Forda daje zo ono c rz O(n4 ) z s edu algorytm Floyda o zo ono ci o