ch ng4 - wordpress.com · 6 thu tng (tt.) m t chutrình (cycle)làmtli i nngo itr nh u tiênvà...

76
1 Ch ng 4 ph c t p c acác gi i thu t th

Upload: others

Post on 04-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

1

Ch ng 4

ph c t p c a các gi i thu t th

Page 2: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

2

N i dung

1. Các gi i thu t th c n b n2. th có tr ng s3. th có h ng

Page 3: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

3

1.Các gi i thu t th c n b n

Có nhi u bài toán c nh ngh a theo i t ng và cáck t n i gi a các i t ng y.

M t th là m t i t ng toán h c mà mô t nh ng bàitoán nh v y.Các ng d ng trong các lãnh v c:

Giao thôngVi n thông

i n l cM ng máy tínhC s d li uTrình biên d chCác h i u hànhLý thuy t th

Page 4: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

4

M t thí d

A

B GC

F

D E

L M

KJ

IH

Hình 4.1a M t th thí d

Page 5: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

5

Thu t ng

M t th là m t t p các nh và các c nh. Các nh lành ng i t ng n mà có th có tên và có m t s tínhch t khác và c nh là ng k t n i gi a hai nh.

M t l i i t x n y trong m t th là m t danh sáchnh ng nh mà nh ng nh k ti p nhau c k t n i nhvào nh ng c nh trên th .

M t th là liên thông n u có m t l i i t m i nút nm t nút khác trong th . M t th mà không liên thôngthì bao g m nhi u thành ph n liên thông.

M t l i i n là m t l i i mà trên ó không có nh nàol p l i.

Page 6: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

6

Thu t ng (tt.)

M t chu trình (cycle ) là m t l i i n ngo i tr nh utiên và nh cu i cùng trùng nhau (m t l i i t m t nhquay v chính nó).

M t th không có chu trình c g i là cây (tree). M tnhóm các cây không liên thông c g i là r ng ( forest ).

Cây bao trùm c a m t th là m t th con mà ch a t t ccác nh trong cây nh ng m t s c nh ch m n m i nh.

G i s nh trong m t th là V, s c nh là E, s c nh c ath có th có t 0 n V (V-1)/2. (Ch ng minh truy ch ng).

th có t t c m i c nh hi n di n gi a m i c p nh cg i là th y (complete graphs).

Page 7: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

7

Thu t ng (tt.)

Các th v i s c nh t ng i ít c g i là th th a;các th v i ch m t s ít c nh m t i c g i là th dày.

Các th mô t cho n gi là nh ng th vô h ng(undirected graphs). Trong các th có tr ng s (weightedgraphs), nh ng giá tr s (tr ng s ) c g n vào m i c nhdi n t thí d kho ng cách hay chi phí.

Trong th có h ng (directed graphs) các c nh là “m tchi u”: m t c nh i t x sang y ch không ph i i t y sang x.Các th có h ng, có tr ng s còn c g i là các m ng(networks).

Page 8: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

8

Cách bi u di n th

Ta ph i ánh x các tên nh thành nh ng s nguyên trongt m tr gi a 1 và V.

Gi s có t n t i hai hàm:- hàm index: chuy n i t tên nh thành s nguyên- hàm name: chuy n i s nguyên thành tên nh.

Có hai cách bi u di n th :- dùng ma tr n k c n- dùng t p danh sách k c n

Page 9: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

9

Cách bi u di n ma tr n k c n

A B C D E F G H I J K L MA 1 1 1 0 0 1 1 0 0 0 0 0 0B 1 1 0 0 0 0 0 0 0 0 0 0 0C 1 0 1 0 0 0 0 0 0 0 0 0 0D 0 0 0 1 1 1 0 0 0 0 0 0 0E 0 0 0 1 1 1 1 0 0 0 0 0 0F 1 0 0 1 1 1 0 0 0 0 0 0 0G 1 0 0 0 1 0 1 0 0 0 0 0 0H 0 0 0 0 0 0 0 1 1 0 0 0 0I 0 0 0 0 0 0 0 1 1 0 0 0 0J 0 0 0 0 0 0 0 0 0 1 1 1 1K 0 0 0 0 0 0 0 0 0 1 1 0 0L 0 0 0 0 0 0 0 0 0 1 0 1 1M 0 0 0 0 0 0 0 0 0 1 0 1 1

M t ma tr n Vhàng V c t ch acác giá tr Booleanmà a[x, y] là true ifn u t n t i m tc nh t nh x n

nh y và false n ung c l i.

Hình 4.1b: Ma tr n kc n c a th hình4.1a

Page 10: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

10

Ghi chú v cách bi u di n ma tr n k c n

M i c nh t ng ng v i 2 bit trong ma tr n: m ic nh n i gi a x và y c bi u di n b ng giá tr truet i c a[x, y] và a[y, x].

ti n l i gi nh r ng có t n t i m t c nh n i m inh v chính nó.

L i bi u di n này ch thích h p khi các th là d y.

Page 11: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

11

Gi i thu tprogram adjmatrix (input, output);const maxV = 50;var j, x, y, V, E: integer;

a: array[1..maxV, 1..maxV] of boolean;begin

readln (V, E);for x: = 1 to V do /*initialize the matrix */

for y: = 1 to V do a[x, y]: = false;for x: = 1 to V do a[x, y]: = true;for j: = 1 to E dobegin

readln (v1, v2);x := index(v1); y := index(v2);a[x, y] := true; a[y, x] := true

end;end.

Page 12: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

12

Cách bi u di n b ng t p danh sách k c n

Trong cách bi u di n này, m i nh mà n i t i m tnh c k t thành m t danh sách k c n

(adjacency-list ) cho nh ó.

program adjlist (input, output);const maxV = 100;type link = node

node = record v: integer; next: link end;var j, x, y, V, E: integer;

t, x: link;adj: array[1..maxV] of link;

Page 13: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

13

beginreadln(V, E);new(z); z.next: = z;for j: = 1 to V do adj[j]: = z;for j: 1 to E dobegin

readln(v1, v2);x: = index(v1); y: = index(v2);new(t); t.v: = x; t.next: = adj[y];adj[y]: = t; /* insert x to the first element of

y’s adjacency list */new(t); t.v = y; t.next: = adj[x];adj[x]:= t; /* insert y to the first element of

x’s adjacency list */end;

end.

Page 14: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

14

a b c d e f g h i j k l m

f

c

b

g

a a f g a e i h k j j j

e f e a l

m

m l

d d

Hình 4.1c: Bi u di n b ng t p danhsách k c n c a th hình 4.1

Page 15: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

15

Các ph ng pháp duy t th

Duy t hay tìm ki m trên th : vi ng m i nh/núttrong th m t cách có h th ng.

Có hai cách chính duy t th :- duy t theo chi u sâu tr c (depth-first-search )- duy t theo chi u r ng tr c (breadth-first-search).

Page 16: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

16

Duy t theo chi u sâu tr c – gi i thu t quyprocedure dfs;

procedure visit(n:vertex);begin

add n to the ready stack;while the ready stack is not empty do

get a vertex from the stack, process it,and add any neighbor vertex that has not been processed

to the stack.if a vertex has already appeared in the stack, there is no

need to pushit to the stack, but it is moved to the top of the stack.

end;begin

Initialize status;for each vertex, say n, in the graph do

if the status of n is “not yet visited” then visit(n)end;

Page 17: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

17

Tìm ki m theo chi u sâu tr c – bi u di ndanh sách k c n

procedure list-dfs;var id, k: integer;

val: array[1..maxV] of integer;procedure visit (k: integer);var t: link;begin

id: = id + 1; val[k]: = id; /* change the status of k to “visited” */

t: = adj[k]; / * find the neighbors of the vertex k */while t <> z dobegin

if val[t .v] = 0 then visit(t.v);t: = t.next

endend;

Page 18: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

18

beginid: = 0;for k: = 1 to V do val[k]: = 0; /initialize

the status of all vetices */for k: = 1 to V do

if val[k] = 0 then visit(k)end;

Ghi chú: M ng val[1..V] ch a tr ng thái c a các nh.val[k] = 0 n u nh k ch a h c vi ng (“not yet visited”),val[k] 0 n u nh k ã c vi ng.val[k]: = j ngh a là nh jth mà c vi ng trong quá trìnhduy t là nh k.

Page 19: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

19

A A

F

A

F

A

F

E

A

F

E

G

A

F

E

G

A

F

E

G

A

F

E

G

A

F

E

G

D

A

F

E

G

D

A

F

G

ED

A

G

ED

A

G

ED

C

A

G

ED

C

A

G

ED

CB

F F F

F

A

G

ED

CB

F

Hình 4.2 Duy t theo chi u sâu tr c

Page 20: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

20

Nh v y k t qu c a gi i thu t duy t DFS trên th chohình 4.1a v i t p danh sách k c n cho hình 4.1c là

A F E G D C GL u ý: th t c a các nh trong các danh sách k c n có nh

h ng n th t duy t c a các nh khi áp d ng DFS.

Page 21: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

21

ph c t p c a duy t theo chi u sâu tr c

Tính ch t 5.1.1 Duy t theo chi u sâu tr c m tth bi u di n b ng các danh sách k c n òi h i th igian t l V+ E.

Ch ng minh: Chúng ta ph i gán tr cho m i ph nt c a m ng val (do ó t l v i O(V)), và xét m inút trong các danh sách k t c n bi u di n th (doó t l v i O(E)).

Page 22: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

22

Duy t theo chi u sâu tr c – bi u di n b ng matr n k c n

Cùng m t ph ng pháp có th c áp d ng choth c bi u di n b ng ma tr n k c n b ng

cách dùng th t c visit sau ây:

procedure visit(k: integer);var t: integer;begin

id: = id + 1; val[k]: = id;for t: = 1 to V do

if a[k, t] thenif val[t] = 0 then visit(t)

end;

Page 23: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

23

ph c t p c a duy t theo chi u sâu tr c –bi u di n ma tr n

Tính ch t 5.1.2 Duy t theo chi u sâu tr c m tth bi u di n b ng ma tr n k c n t l v i V2.

Ch ng minh: B i vì m i bit trong ma tr n k c nc a th u ph i ki m tra.

Page 24: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

24

Duy t theo chi u sâu tr c – không quyprocedure list-dfs;var id, k: integer; val: array[1..max V] of integer;

procedure visit(k: integer);var t: link;begin

push(k);repeat

k: = pop; id:= id + 1; val[k]: = id; /* change the status of k to “visited” */t =: adj[k]; /* find the neighbors of the vertex k */.while t <> z dobegin

if val[t.v] = 0 thenbegin

push(t.v); val[t.v]: = -1 /* change the status of t.v to “ready” */endelse if val[t.v] = -1 then shift t.v to the top of the stack;t: = t.next

enduntil stackempty

end;

Page 25: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

25

beginid: = 0; stackinit;for k: = 1 to V do val[k]: = 0; /* initialize the

status of all vertices */for k: = 1 to V do

if val[k] = 0 then visit(k)end;

V i gi i thu t không quy, ta c n dùng m t stack c g ilà ready stack.Ghi chú:

val[k] = 0 n u nh k là “ch a c vi ng th m”,val[k] = -1 n u nh k ang trong ready stackval[k] là m t tr d ng n u nh k ã c vi ng th m.

Page 26: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

26

A

B C G

F

A

E

F

B C

A

D

G

F

B C

A

E

Hình 4.3a DFS d a vào stack

G

Page 27: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

27

G E D B B B B MC C C C C L L

A F F F F F F H I J K K K

Hình 4.3b N i dung c a stack khi th c hi n duy t theo chi u sâu tr c

Page 28: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

28

Duy t theo chi u r ng tr c

Khi duy t th n u ta dùng m t queue thay vì m t stack, ta si n m t gi i thu t duy t theo chi u r ng tr c (breadth-first-

search).

procedure bfs;procedure visit(n: vertex);begin

add n to the ready queue;while the ready queue is not empty do get a vertex from the queue, process it, and add any neighborvertex that has not been processed to the queue and change their status to ready.

end;begin

Initialize status;for each vertex, say n, in the graph

if the status of n is “not yet visited” then visit(n)end;

Page 29: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

29

procedure list-bfs;var id, k: integer; val: array[1..max V] of integer;procedure visit(k: integer);var t: link;beginput(k); /* put a vertex to the queue */repeat

k: = get; /* get a vertex from the queue */id: = id + 1; val[k]: = id; /* change the status of k to “visited” */t: = adj[k]; /* find the neighbors of the vertex k */while t <> z dobegin

if val[t .v] = 0 thenbegin

put(t.v); val [t.v]: = -1 /* change the vertex t.v to “ready” */end;t: = t.next

enduntil queueempty

end;

Page 30: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

30

beginid: = 0; queue-initialze;for k: = 1 to V do val[k]: = 0; /initialize the

status of all vertices */for k: = 1 to V do

if val[k] = 0 then visit(k)end;

Duy t theo chi u sâu tr c và duy t theo chi u r ng tr cch khác nhau ch gi i thu t u dùng stack và gi i thu tsau dùng hàng i. Do ó, ph c t p tính toán c a DFS vàBFS là nh nhau.

Page 31: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

31

A

Hình 4.4 N i dung c a hàng i khi th c hi n BFS

C

F

C

BB B

GG G

K

G

D

L

D D DD

E EE

M

L

M

J

H

I

E

M

Page 32: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

32

2. th có tr ng s

Chúng ta mu n mô hình hóa nh ng bài toán th c t s d ngnh ng tr ng s (weights ) hay chi phí (costs) c g n vàom i c nh.

Có hai bài toán c gi i quy t trong ph n này:- tìm m t cách ít t n chí phí nh t n i t t c các nh

trong th .- Tìm m t l i i v i t ng chi phí ít nh t gi a hai nh ã

cho.

Bài toán th nh t là bài toán cây bao trùm t i thi u; bài toánth hai là bài toán tìm ng i ng n nh t.

Page 33: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

33

Cây bao trùm t i thi u

M t cây bao trùm t i thi u (minimum spanning tree ) c a m tth có tr ng s là m t t p các c nh ch m t t c các nh

sao cho t ng tr ng s c a các c nh là nh nh t.

Cây bao trùm t i thi u không nh t thi t là duy nh t trongm t th .

cb d

a i e

fgh

8 7

9

14

10

46

1 2

7

2

4

8

11

Hình 4.5 Cây bao trùm t i thi u

Page 34: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

34

Gi i thu t Prim

Gi i thu t Prim là gi i thu t gi i bài toán cây bao trùmt i thi u. Gi i thu t này c ng trình bày m t chi n l c

gi i m t bài toán t i u hóa: gi i thu t tham lam(greedy):T i m i b c c a gi i thu t, ta ph i ch n m t trong m ts kh n ng l a ch n. Chi n l c tham lam xu t vi cl a ch n kh n ng mà xem ra t t nh t t i lúc ó.

M t chi n l c nh v y th ng không m b o em l i l igi i t i u toàn c c cho các bài toán.

Tuy nhiên i v i bài toán cây bao trùm t i thi u, ta có thch ng minh r ng chi n l c tham lam có th em l icây bao trùm v i t ng tr ng s t i thi u.

Page 35: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

35

Xây d ng cây bao trùm t i thi u

Gi s chúng ta có m t th vô h ng, liên thôngG = (V, E) v i hàm gán tr ng s w: E R và mu n tìm m tcây bao trùm t i thi u cho G.

Có m t gi i thu t t ng quát mà t o d ng d n cây bao trùmt i thi u m t lúc thêm m t c nh.

Gi i thu t này duy trì m t t p A mà luôn luôn là m t t pcon c a m t cây bao trùm t i thi u.

T i m i b c, m t c nh (u, v) c ch n thêm vào t p Amà không vi ph m h th c b t bi n A {(u, v)} luôn luôn làm t t p con c a m t cây bao trùm t i thi u.

Page 36: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

36

Ta g i m t c nh nh th là c nh an toàn cho t p A vì nó cóth c thêm vào A m t cách an toàn mà không vi ph m hth c b t bi n nêu trên.

procedure GENERIC_MST(G, w);/* G is a weighted graph with the weight function w */begin

A := ;while A does not form a spanning tree dobegin

find an edge (u,v) that is safe for A;add (u,v) to A.

end/* the set A at this point is the result */

end;

Page 37: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

37

Gi i thu t Prim

Trong gi i thu t Prim, t p A hình thành m t c u trúc cây. M tc nh an toàn c a vào A th ng là c nh có tr ng s nhnh t n i cây A v i m t nh không thu c v cây.

Cây bao trùm kh i i t m t nút r b t k r và phát tri n chon khi cây ph t t c m i nh trong V. T i m i b c, m t

c nh nh (light edge) n i m t nh trong A v i m t c nh trongV - A.Trong quá trình th c hi n gi i thu t này, t t c nh ng nhmà không thu c v cây A c t trong m t hàng i có

u tiên Q d a trên m t tr ng là key. V i m i nh v, key[v] làc nh có tr ng s nh nh t c a nh ng c nh n i v v i m t nhtrong cây. Theo qui c key[v] = n u không t n t i m tc nh nh v y.

Page 38: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

38

Tr ng p[v] l u tên c a nh cha c a nh v trong cây.procedure MST-PRIM (G, w, r);/* G is weighted graph with the weight function w, and r is an arbitraryroot vertex */begin

Q: = V[G];for each u Q do key[u]: = ;key[r]: = 0; p[r]: = NIL;while Q is not empty dobegin

u: = EXTRACT-MIN(Q);for each v Q and w(u, v) < key[v] then/ * update the key field of vertice v */begin

p[v] := u; key[v]: = w(u, v)end

endend;

Page 39: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

39

cb d

a i e

h g f

8 7

8

10

14

4

21

2

67

11

8

4

cb d

a i e

h g f

8 7

8

10

14

4

21

2

67

11

8

4

Hình 4.6. M t thíd v gi i thu tPrim.

Page 40: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

40

cb d

a i e

h g f

8 7

8

10

14

4

21

2

67

11

8

4

cb d

a i e

h g f

8 7

8

10

14

4

21

2

67

11

8

4

Page 41: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

41

cb d

a i e

h g f

8 7

8

10

14

4

21

2

67

11

8

4

cb d

a i e

h g f

8 7

8

10

14

4

21

2

67

11

8

4

Page 42: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

42

cb d

a i e

h g f

8 7

8

10

14

4

21

2

67

11

8

4

cb d

a i e

h g f

8 7

8

10

14

4

21

2

67

11

8

4

Page 43: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

43

cb d

a i e

h g f

8 7

8

10

14

4

21

2

67

11

8

4

ph c t p c a gi i thu t Prim tùy thu c vào cáchmà chúng ta thi công hàng i có u tiên.

Page 44: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

44

ph c t p c a gi i thu t Prim

Tính ch t: N u Q c thi công nh là m t heap nh phân thìth i gian tính toán c a gi i thu t Prim là O(E lgV).

N u Q c thi công nh là m t heap nh phân, chúng ta cóth l p ra m t heap trong b c kh i t o v i chi phí th i gianlà O(V).Vòng l p while c th c hi n V l n và vì m i thao tácEXTRACT-MIN có ph c t p O(lgV), chi phí tính toáncho t t c các l nh g i EXTRACT-MIN là O(VlgV).

Vòng l p for bên trong vòng l p while c th c hi n t ngc ng O(E) l n, vì t ng chi u dài c a t t c các danh sách kc n là 2E. Vi c c p nh t khóa c a nh v trong heap t nO(lgV) l n. Nh v y, t ng chi phí tính toán c a gi i thu tPrim là O(V lgV + 2E lgV) = O(E lgV).

Page 45: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

45

3. th có h ng

Các th có h ng là các th trong ó các c nh n i v icác nút có h ng.

A

B GC

F

D E

L M

KJ

IH

Hình 4.7. M t thí d v th có h ng

Page 46: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

46

Th ng thì h ng c a các c nh bi u th m i liên h tr csau (precedence relationship) trong ng d ng c mô hìnhhóa.

Thí d , th có h ng có th c dùng mô hình hóam t ng dây s n xu t (assembly line).

Trong ph n này, chúng ta xem xét các gi i thu t sau:- tính bao óng truy n (transitive closure)- s p th t topo (topological sorting)

Page 47: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

47

Tính bao óng truy n

Trong th có h ng, chúng ta quan tâm n t p nhmà n c t m t nh nào ó b ng cách duy t cácc nh trong th theo m t h ng ã c n nh.

M t tác v mà ta mu n th c hi n là “thêm m t c nh t xn y n u t n t i m t cách nào ó i t x n y”

th t o ra b ng cách thêm t t c các c nh có tínhch t trên c g i là bao óng truy n c a th .

Vì th bao óng truy n thì th ng là th dày, do óchúng ta dùng cách bi u di n ma tr n k c n.

Page 48: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

48

Gi i thu t Warshall

Có m t gi i thu t n gi n tính bao óng truy n c am t th c bi u di n b ng ma tr n k c n.for y : = 1 to V do

for x : = 1 to V doif a[x, y] then

for j: = 1 to V doif a[y, j] then a[x, j]: = true;

S. Warshall ra gi i thu t này n m 1962, d a trên m tquan sát n gi n: “N u t n t i m t cách i t nút x nnút y và cách i t nút y n nút j, thì s có cách i t nútx n nút j.”

Page 49: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

49

M t thí d tính bao óng truy n ( cho th hình 4.7)A B C D E F G H I J K L M

A 1 1 0 0 0 1 1 0 0 0 0 0 0B 0 1 0 0 0 0 0 0 0 0 0 0 0C 1 0 1 0 0 0 0 0 0 0 0 0 0D 0 0 0 1 0 1 0 0 0 0 0 0 0E 0 0 0 1 1 0 0 0 0 0 0 0 0F 0 0 0 0 1 1 0 0 0 0 0 0 0G 0 0 1 0 1 0 1 0 0 1 0 0 0H 0 0 0 0 0 0 1 1 1 0 0 0 0I 0 0 0 0 0 0 0 1 1 0 0 0 0J 0 0 0 0 0 0 0 0 0 1 1 1 1K 0 0 0 0 0 0 0 0 0 0 1 0 0L 0 0 0 0 0 0 0 0 0 0 0 1 1M 0 0 0 0 0 0 0 0 0 0 0 1 1

Ma tr n k c n ngv i b c kh i uc a gi i thu tWarshall

Page 50: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

50

A B C D E F G H I J K L MA 1 1 1 1 1 1 1 0 0 1 1 1 1B 0 1 0 0 0 0 0 0 0 0 0 0 0C 1 1 1 1 1 1 1 0 0 1 1 1 1D 0 0 0 1 1 1 0 0 0 0 0 0 0E 0 0 0 1 1 1 0 0 0 0 0 0 0F 0 0 0 1 1 1 0 0 0 0 0 0 0G 1 1 1 1 1 1 1 0 0 1 1 1 1H 1 1 1 1 1 1 1 1 1 1 1 1 1I 1 1 1 1 1 1 1 1 1 1 1 1 1J 1 1 1 1 1 1 1 0 0 1 1 1 1K 0 0 0 0 0 0 0 0 0 0 1 0 0L 1 1 1 1 1 1 1 0 0 1 1 1 1M 1 1 1 1 1 1 1 0 0 1 1 1 1

Ma tr n k c n ng v ib c cu i cùng c a gi ithu t Warshall

Tính ch t 5.3.1 Gi ithu t Warshall tính baoóng truy n v i chi phí

O(V3).

Page 51: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

51

Bài toán các l i i ng n nh t

i v i th có tr ng s (có h ng ho c không) ta có thmu i xây d ng m t ma tr n cho phép ng i ta tìm c l i ing n nh t t x n y i v i m i c p nh. y là bài toánnh ng l i i ng n nh t cho m i c p nh (all-pairs shortestpath problem).

A

B GC

F

D E

L M

KJ

IH

23

1

11

4

2

53

2

1

2

2

1

11

1

Page 52: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

52

Gi i thu t Floyd

Có th dùng m t ph ng pháp t ng t nh ph ng phápWarshall, mà c a ra b i R. W. Floyd:

for y : = 1 to V dofor x : = 1 to V do

if a [x, y] > 0 thenfor j: = 1 to V do

if a [y, j] > 0 thenif (a[x, j] = 0) or (a[x, y] + a[y, j] < a [x, j])then

a[x, j] = a[x, y] + a[y, j];

Page 53: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

53

M t thí d dùng gi i thu t Floyd (cho thi hình 4.7)

A B C D E F G H I J K L MA 0 1 0 0 0 2 4 0 0 0 0 0 0B 0 0 0 0 0 0 0 0 0 0 0 0 0C 1 0 0 0 0 0 0 0 0 0 0 0 0D 0 0 0 0 0 1 0 0 0 0 0 0 0E 0 0 0 2 0 0 0 0 0 0 0 0 0F 0 0 0 0 2 0 0 0 0 0 0 0 0G 0 0 1 0 1 0 0 0 0 1 0 0 0H 0 0 0 0 0 0 3 0 1 0 0 0 0I 0 0 0 0 0 0 0 1 0 0 0 0 0J 0 0 0 0 0 0 0 0 0 0 1 3 2K 0 0 0 0 0 0 0 0 0 0 0 0 0L 0 0 0 0 0 5 5 0 0 0 0 0 1M 0 0 0 0 0 0 0 0 0 0 0 1 0

Ma tr n k c nng v i b c

kh i u c agi i thu t Floyd

Page 54: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

54

A B C D E F G H I J K L MA 6 1 5 6 4 2 4 0 0 5 6 8 7B 0 0 0 0 0 0 0 0 0 0 0 0 0C 1 2 6 7 5 3 5 0 0 6 7 9 8D 0 0 0 5 3 1 0 0 0 0 0 0 0E 0 0 0 2 5 3 0 0 0 0 0 0 0F 0 0 0 4 2 5 0 0 0 0 0 0 0G 2 3 1 3 1 4 6 0 0 1 2 4 3H 5 6 4 6 4 7 3 2 1 4 5 7 6I 6 7 5 7 5 8 4 1 2 5 6 8 7J 10 11 9 11 9 12 8 0 0 9 1 3 2K 0 0 0 0 0 0 0 0 0 0 0 0 0L 7 8 6 8 6 9 5 0 0 6 7 2 1M 8 9 7 9 7 10 6 0 0 7 8 1 2

Ma tr n k c n ngv i b c cu i c agi i thu t Floyd

Tính ch t 5.3.2 Gi ithu t Floyd gi i bàitoán nh ng l i ing n nh t gi anh ng c p cóph c t p tính toánO(V3).

Page 55: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

55

Gi i thích gi i thu t Floyd

Gi i thu t Floyd l p V b c trên ma tr n k c n a.

Sau b c l p th y, a[x, j] s ch a chi u dài nh nh t c ab t k l i i nào t nh x n nh j mà không i quanh ng nh mang ch s l n h n y. Ngh a là, x và j có thb t k nh nào nh ng nh ng nh trung gian trên l i iph i nh h n hay b ng y.

T i b c l p th y, ta tính các ph n t c a ma tr n a b ngcông th c sau:

ay[x,j] = min( ay-1[x,j], ay-1[x, y] + ay-1[y, j])

Ch s y ch tr c a m t ph n t trong ma tr n a sau b cl p th y.

Page 56: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

56

y

xj

ay-1[x,y] ay-1[y,j ]

ay-1[x,j ]

Công th c này c minh h a b ng hình v sau ây.

Page 57: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

57

X p th t tôpô

th có h ng không chu trình (Directed Acyclic Graph)th có h ng mà không có chu trình c g i là các

th có h ng không chu trình (dags).

T p th t riêng ph n và x p th t tôpôCho G là m t th có h ng không chu trình. Xét quanh th t < c nh ngh a nh sau:

u < v n u có m t l i i t u n v trong G.

Quan h này có 3 tính ch t:(1) V i m i nh trong V[G], not (u < u). (không ph n x )(2) n u u < v, thì not( v < u) . (không i x ng)(3) n u u < v và v < w, thì u < w. (Truy n)

Page 58: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

58

T p th t riêng ph n

M t quan h < trên t p S mà th a hai tính ch t b t i x ngvà truy n là m t quan h th t riêng ph n (partial ordering)c a S, và m t t p có trên nó m t quan h th t riêng ph nthì c g i là t p th t riêng ph n (partially order set ).

Nh v y, b t k th có h ng không chu trình có th ccoi nh là m t t p th t riêng ph n.

Page 59: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

59

T p th t riêng ph n (tt.)

M t khác, gi s S là m t t p th t riêng ph n v i quan hth t riêng ph n <, thì S có th c coi nh là m t thcó h ng mà các nh là nh ng ph n t trong t p S và cácc nh c nh ngh a nh sau:

(u,v) là m t c nh n u u < v.H n n a, ta có th ch ng minh thêm r ng m t t p th t

riêng ph n S, có th c coi nh là m t th có h ng,thì không có chu trình.

Page 60: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

60

X p th t tôpô

Cho G là m t th có h ng không chu trình. M tth t tôpô (topological sort)T c a G là m t th ttuy n tính mà b o toàn th t riêng ph n ban utrong t p nh V[G].

Ngh a là: n u u < v trong V (t c là n u có m t l i it u n v trong G), thì u xu t hi n tr c v trong tht tuy n tính T.

Page 61: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

61

A

B GC

F

D E

L M

KJ

IH

Các nút trong th hình trên có th c s p th t tôpôtheo th t sau:

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

Page 62: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

62

S p th t tôpô1 (Ph ng pháp 1)Có vài ph ng pháp s p th t tôpô.Ph ng pháp 1Ý t ng c n b n là tìm m t nút không có nút i sau (nosuccessor) lo i b nó ra kh i th và a nó vào m t danhsách.L p l i quá trình này cho n khi th r ng thì s sinh ra m tdanh sách. o ng c danh sách này ta s c th t tôpô.Algorithm:while the graph has a node with no successors do

remove one such node from the graph andadd it to the end of a list.

if the loop terminates with the graph emptythen the list shows the reserse of a topological order.else the graph contains a cycle.

Page 63: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

63

A

B GC

F

D E

L M

KJ

IH

C B D E F I H G A M L K JJ K L M A G H I E F D B C

Hình 4.8 S p th t tôpô b ng ph ng pháp 1

Page 64: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

64

Ph ng pháp 2 (s p x p tôpô)

Ph ng pháp th hai là th c hi n theo ki u tìm ki m theochi u sâu tr c và thêm m t nút vào danh sách m i khi c nthi t l y m t nút ra kh i stack ti p t c. Khi g p m t nútkhông có nút i sau thì ta s l y ra (pop) m t ph n t t

nh stack.

Algorithm:Start with nodes with no predecessor, put them in the stack.while the stack is not empty do

if the node at top of the stack has some successorsthen

push all its successors onto the stackelse pop it from the stack and add it to the list.

Page 65: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

65

1

6

3

2

10

4

8

5

9

7

8 65 5 5 4 4 4

3 3 3 3 3 10 10 10 102 2 2 2 2 2 2 2 2 2 2

1 1 1 1 1 1 1 1 1 1 1 1 1 97 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7

Hình 4.9 S p th th tôpôb ng ph ng pháp 2.

Page 66: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

66

Bài toán nh ng l i i ng n nh t t m t nh ngu n

Th xét bài toán nh ng l i i ng n nh t t m t nh ngu n(single-source shortest-paths problem):

Cho m t th G = (V, E), chúng ta mu n tìm m t l i i ng nnh t t m t nh ngu n nào ó s V n m i nút v V.

Bi u di n nh ng l i i ng n nh tChúng ta mu n tính không ch tr ng s c a nh ng l i i ng nnh t mà còn xác nh nh ng nh trên nh ng l i i ng n nh t.Cho m t th G = (V, E), ta duy trì cho m i nh v V m t

nh i tr c p[v] mà là m t nh khác hay là NIL. Gi i thu tgán tr cho thu c tính p sao cho dãy các nh i tr c xu tphát t nh v s cho ra l i i ng n nh t t s n v.

Page 67: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

67

Gi i thu t tìm nh ng l i i ng n nh t th ng dùng m t k thu tc g i là s n i l ng (relaxation).

S n i l ng là m t ph ng pháp mà liên ti p gi m c n trên c atr ng s c a l i i ng n nh t th c s c a m i nh cho n khic n trên b ng v i tr ng s l i i ng n nh t.

Nh v y, v i m i nh v V, ta duy trì thu c tính d[v], mà là c ntrên c a tr ng s c a m t l i i ng n nh t t nh ngu n s n v.Ta g i d[v] là c l ng l i i ng n nh t (shortest path estimate).

Quá trình n i l ng m t c nh (u, v) bao g m vi c th xem ta cóth c i thi n l i i ng n nh t n v mà ang tìm th y b ng cách iqua u và n u nh v y, ta c p nh t d[v] và p[v]. M t b c n i l ngs làm gi m c l ng l i i ng n nh t d[v] và c p nh t thu ctính p[v].

Nh ng l i i ng n nh t và s n i l ng

Page 68: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

68

5 9

76

65

55

2

2

Relax(u,v)

u v

u v

(a)2

2u

u

v

v

Relax(u,v)

(b)

Hình 4.10: S n i l ng c a m t c nh

Page 69: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

69

Gi i thu t này gi i bài toán nh ng l i i ng n nh t t nhngu n cho m t th có h ng, có tr ng s G = (V, E) trongtr ng h p các tr ng s c a các c nh là tr không âm.

Gi i thu t này duy trì m t t p S c a các nh mà tr ng s c acác l i i ng n nh t t nh ngu n ã c xác nh. Ngh alà, v i m i nh v S, ta có

d[v] = min( c l ng l i i ng n nh t t s n v)

Gi i thu t liên ti n ch n nh u V – S v i thu c tính d nhnh t, a u vào S, và n i l ng m i c nh i ra t u.

Trong gi i thu t sau ây, ta dùng hàng i có u tiên Qch a t t c các nh trong V-S, l p khóa theo thu c tính d. Vàgi nh th G c di n t b ng các danh sách k c n.

Gi i thu t Dijkstra

Page 70: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

70

procedure dijkstra(G, w, s);/* G is a graph, w is a weight function and s is the source node */begin

for each vertex v V[G] do /* initialization */begin d[v]: = ; p[s]: = NIL end;d[s]: = 0; S: = ; Q: = V[G]while Q is not empty dobegin

u: = EXTRACT-MIN (Q); S: = S {u};for each vertex v Adj [u] do /* relaxation */

if d[v] > d [u] + w(u, v) thenbegin d[v]: = d[u] + w(u, v); p[v]: = u end

endend

Page 71: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

71

• Vì gi i thu t Dijkstra luôn luôn ch n nh “g n nh t” trongV-S a vào t p S, nó th c s s d ng chi n l c thamlam.

• Gi i thu t tham lam th ng không m b o em l i l i gi it i u trong tr ng h p t ng quát, nh ng i v i bài toánnày, gi i thu t Dijkstra th c s ã em l i nh ng l i i ng nnh t.

• Gi i thu t Dijkstra t ng t nh gi i thu t Prim dùngtính cây bao trùm t i thi u. Nó c ng dùng m t hàng i có

u tiên tìm m t nh “nh nh t” bên ngoài m t t p, anh ó vào t p, và i u ch nh l i tr ng s c a nh ng nh

còn l i bên ngoài t p.

Gi i thu t Dijkstra

Page 72: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

72

M t thí d

5

10

00

10

5

s

u v

x y

10

5

s

u v

x y

Page 73: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

73

8

7

14

5

0

8

5 7

13

0

93

2

7

2

1

10

5

4

6

u v

x y

s s

10

1

2

7

23

9

4

6

u v

x y

Page 74: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

74

8

7

9

5

0 0

8 9

75

x y

u v u v

x y

1

2

s

10

5

23

9

74

6

1

2

4

6910

5

s 72

3

(s, u): <s, x, u> (s, v): <s, x, u, v>

(s, x): <s, x> (s, y): <s, x, y, y>

Page 75: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

75

• N u hàng i có u tiên Q = V – S c th c hi n b im t m ng tuy n tính, m i thao tác EXTRACT-MIN t nO(V), và có t t c |V| thao tác nh v y, do ó ta có m t chiphí tính toán cho thao tác này là O(V2).

• M i nh v V c a vào t p S úng m t l n, do ó m inh trong các danh sách k c n Adj[v] c xét úng m t

l n trong su t ti n trình c a gi i thu t.

Vì t ng s nh trong t t các các danh sách k c n là |E|, cót t c |E| b c l p cho vòng l p for, v i m i l n l p t n O(1).Th i gian tính toán c a gi i thu t là

O(V2 + E) = O(V2).

ph c t p c a gi i thu t Dijkstra

Page 76: Ch ng4 - WordPress.com · 6 Thu tng (tt.) M t chutrình (cycle)làmtli i nngo itr nh u tiênvà nhcu icùngtrùngnhau(m tli it mt nh quay v chínhnó). M t th khôngcóchutrình cgilàcây(tree).M

76

• N u hàng i có u tiên Q c hi n th c b i m t c utrúc heap, m i thao tác EXTRACT-MIN t n chi phí O(lgV),và có t t c |V| thao tác này, do ó ta có t ng chi phí chothao tác EXTRACT-MIN là O(VlgV).

Phép gán d[v]: = d[u] + w(u, v) òi h i m t thao tác c pnh t khóa c a nh v trong heap và nó t n O(lgV). Có t t c|E| thao tác nh v y. Do ó t ng th i gian tính toán c a gi ithu t là

O(V lgV + E lgV).

ph c t p c a gi i thu t Dijkstra