-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
1/76
1
Chng 4
phc tp ca cc gii thut th
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
2/76
2
Ni dung
1. Cc gii thut th cn bn2. th c trng s
3. th c hng
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
3/76
3
1.Cc gii thut th cn bn
C nhiu bi ton c nh ngha theo i tng v cc
kt ni gia cc i tng y.
Mt th l mt i tng ton hc m m t nhng biton nh vy.Cc ng dng trong cc lnh vc:
Giao thngVin thngin lcMng my tnh
C s d liuTrnh bin dchCc h iu hnhL thuyt th
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
4/76
4
Mt th d
A
B GC
F
D E
L M
KJ
IH
Hnh 4.1a Mt th th d
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
5/76
5
Thut ng
Mt th l mt tp cc nh v cc cnh. Cc nh lnhng i tng n m c th c tn v c mt s tnhcht khc v cnh l ng kt ni gia hai nh.
Mt li it x n y trong mt th l mt danh sch
nhng nh m nhng nh k tip nhau c kt ni nhvo nhng cnh trn th.
Mt th l lin thngnu c mt li i t mi nt nmt nt khc trong th. Mt th m khng lin thng
th bao gm nhiu thnh phn lin thng.
Mt li i n l mt li i m trn khng c nh nolp li.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
6/76
6
Thut ng (tt.)
Mt chu trnh (cycle )l mt li i n ngoi tr nh u
tin v nh cui cng trng nhau (mt li i t mt nhquay v chnh n).
Mt th khng c chu trnh c gi l cy (tree). Mtnhm cc cy khng lin thng c gi l rng(forest).
Cy bao trm ca mt th l mt th con m cha tt ccc nh trong cy nhng mt s cnh chm n mi nh.
Gi s nh trong mt th l V, s cnh l E, s cnh ca
th c th c t 0 n V (V-1)/2. (Chng minh truy chng).
th c tt c mi cnh hin din gia mi cp nh cgi l th y (complete graphs).
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
7/76
7
Thut ng (tt.)
Cc th vi s cnh tng i t c gi l th tha;cc th vi ch mt s t cnh mt i c gi l th dy.
Cc th m t cho n gi l nhng th v hng(undirected graphs). Trong cc th c trng s (weighted
graphs), nhng gi tr s (trng s) c gn vo mi cnh din t th d khong cch hay chi ph.
Trong th c hng(directed graphs) cc cnh l mt
chiu: mt cnh i txsangy ch khng phi i ty sangx.Cc th c hng, c trng s cn c gi l ccmng(networks).
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
8/76
8
Cch biu din th
Ta phi nh x cc tn nh thnh nhng s nguyn trongtm tr gia 1 v V.
Gi s c tn ti hai hm:
- hm index: chuyn i t tn nh thnh s nguyn- hm name: chuyn i s nguyn thnh tn nh.
C hai cch biu din th:- dng ma trn k cn
- dng tp danh sch k cn
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
9/76
9
Cch biu din ma trn k cn
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 0
E 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 1
K 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
Mt ma trn Vhng V ct chacc gi tr Booleanm a[x, y]l true if
nu tn ti mtcnh t nhxnnhy vfalse nungc li.
Hnh 4.1b: Ma trn kcn ca th hnh4.1a
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
10/76
10
Ghi ch v cch biu din ma trn k cn
Mi cnh tng ng vi 2 bit trong ma trn: micnh ni giaxvy c biu din bng gi tr trueti c a[x, y]v a[y, x].
tin li gi nh rng c tn ti mt cnh ni minh v chnh n.
Li biu din ny ch thch hp khi cc th l dy.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
11/76
11
Gii thutprogram adjmatrix (input, output);const maxV = 50;
var j, x, y, V, E: integer;a: array[1..maxV, 1..maxV] ofboolean;
beginreadln (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 do begin
readln (v1, v2);x := index(v1); y := index(v2);
a[x, y] := true; a[y, x] := true
end;end.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
12/76
12
Cch biu din bng tp danh sch k cn
Trong cch biu din ny, mi nh m ni ti mtnh c kt thnh mt danh sch k cn(adjacency-list) cho nh .
program adjlist (input, output);const maxV = 100;type link = node
node = record v: integer; next: linkend;var j, x, y, V, E: integer;
t, x: link;
adj: array[1..maxV] oflink;
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
13/76
13
beginreadln(V, E);
new(z); z.next: = z;
for j: = 1 to V do adj[j]: = z; for j: 1 to E do begin
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
ys adjacency list */
new(t); t.v = y; t.next: = adj[x];
adj[x]:= t; /* insert y to the first element ofxs adjacency list */
end;end.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
14/76
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
Hnh 4.1c: Biu din bng tp danhsch k cn ca th hnh 4.1
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
15/76
15
Cc phng php duyt th
Duyt hay tm kim trn th: ving mi nh/nttrong th mt cch c h thng.
C hai cch chnh duyt th:
- duyt theo chiu su trc (depth-first-search )- duyt theo chiu rng trc (breadth-first-search).
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
16/76
16
Duyt theo chiu su trc gii thut quy
procedure dfs; procedure visit(n:vertex);
beginadd n to the ready stack;
while the ready stack is not empty doget 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;beginInitialize status;
for each vertex, say n, in the graph do ifthe status of n is not yet visited then visit(n)
end;
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
17/76
17
Tm kim theo chiu su trc biu dindanh sch k cn
procedure list-dfs;var id, k: integer;
val: array[1..maxV] ofinteger;procedure visit (k: integer);var t: link;beginid: = 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 do begin ifval[t .v] = 0 then visit(t.v);
t: = t.next end
end;
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
18/76
18
beginid: = 0;
for k: = 1 to V do val[k]: = 0; /initializethe status of all vetices */
for k: = 1 to V do ifval[k] = 0 then visit(k)end;
Ghi ch: Mng val[1..V]cha trng thi ca ccnh.val[k] = 0 nu nh kcha h c ving (not yet visited),val[k] 0 nu nh k c ving.val[k]: = j ngha l nhjth m c ving trong qu trnhduyt l nh k.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
19/76
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
20/76
20
Nh vy kt qu ca gii thut duyt DFS trn th cho hnh 4.1a vi tp danh sch k cn cho hnh 4.1c l
A F E G D C G
Lu : th t ca cc nh trong cc danh sch k cn c nh
hng n th t duyt ca cc nh khi p dng DFS.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
21/76
21
phc tp ca duyt theo chiu su trc
Tnh cht 5.1.1Duyt theo chiu su trc mt th biu din bng cc danh sch k cn i hi thi
gian t l V+ E.
Chng minh: Chng ta phi gn tr cho mi phnt ca mng val(do t l vi O(V)), v xt mint trong cc danh sch kt cn biu din th (do
t l vi O(E)).
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
22/76
22
Duyt theo chiu su trc biu din bng matrn k cn
Cng mt phng php c th c p dng cho th c biu din bng ma trn k cn bngcch dng th tc visitsau y:
procedure visit(k: integer);var t: integer;begin
id: = id + 1; val[k]: = id;
for t: = 1 to V do ifa[k, t] then
ifval[t] = 0 then visit(t)end;
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
23/76
23
phc tp ca duyt theo chiu su trc biu din ma trn
Tnh cht 5.1.2Duyt theo chiu su trc mt th biu din bng ma trn k cn t l vi V2.
Chng minh: Bi v mi bit trong ma trn k cnca th u phi kim tra.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
24/76
24
Duyt theo chiu su trc khng quy
procedure list-dfs;varid, k: integer; val: array[1..max V] of integer;
procedure visit(k: integer);vart: 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 do begin
ifval[t.v] = 0 then begin
push(t.v); val[t.v]: = -1 /* change the status of t.v to ready */ end
else ifval[t.v] = -1 then shift t.v to the top of the stack;t: = t.next
enduntil stackempty
end;
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
25/76
25
beginid: = 0; stackinit;
fork: = 1 to V do val[k]: = 0; /* initialize the
status of all vertices */ fork: = 1 to V do
ifval[k] = 0 then visit(k)end;
Vi gii thut khng quy, ta cn dng mt stack c gil ready stack.Ghi ch:
val[k] = 0 nu nh kl cha c ving thm,
val[k] = -1 nu nh kang trong ready stackval[k] l mt tr dng nu nh k c ving thm.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
26/76
26
A
B C G
F
A
E
F
B C
A
D
G
F
B C
A
E
Hnh 4.3a DFS da vo stack
G
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
27/76
27
G E DB B B B M
C C C C C L L
A F F F F F F H I J K K K
Hnh 4.3b Ni dung ca stack khi thc hin duyt theo chiu su trc
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
28/76
28
Duyt theo chiu rng trc
Khi duyt th nu ta dng mt queue thay v mt stack, ta s
i n mt gii thut duyt theo chiu rng trc(breadth-first-search).
procedure bfs; procedure visit(n: vertex); begin
add n to the ready queue;while the ready queue is not empty doget a vertex from the queue, process it, and add any neighborvertex that has not been processed to the queue andchange their status to ready.
end;beginInitialize status;
foreach vertex, say n, in the graphifthe status ofn is not yet visited then visit(n)
end;
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
29/76
29
procedure list-bfs;var id, k: integer; val: array[1..max V] ofinteger;
procedure visit(k: integer);var t: link;
beginput(k); /* put a vertex to the queue */
repeatk: = 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 do begin ifval[t .v] = 0 then begin
put(t.v); val [t.v]: = -1 /* change the vertex t.v to ready */ end;t: = t.next
enduntil queueempty
end;
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
30/76
30
beginid: = 0; queue-initialze;
for k: = 1 to V do val[k]: = 0; /initialize thestatus of all vertices */ for k: = 1 to V do
ifval[k] = 0 then visit(k)end;
Duyt theo chiu su trc v duyt theo chiu rng trcch khc nhau ch gii thut u dng stack v gii thutsau dng hng i. Do , phc tp tnh ton ca DFS v
BFS l nh nhau.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
31/76
31
A
Hnh 4.4 Ni dung ca hng i khi thc hin 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
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
32/76
32
2. th c trng s
Chng ta mun m hnh ha nhng bi ton thc t s dng
nhng trng s(weights ) hay chi ph (costs) c gn vomi cnh.
C hai bi ton c gii quyt trong phn ny:
- tm mt cch t tn ch ph nht ni tt c cc nhtrong th.- Tm mt li i vi tng chi ph t nht gia hai nh
cho.
Bi ton th nht l bi ton cy bao trm ti thiu; bi tonth hai l bi ton tm ng i ngn nht.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
33/76
33
Cy bao trm ti thiu
Mt cy bao trm ti thiu (minimum spanning tree ) ca mt
th c trng s l mt tp cc cnh chm tt c cc nhsao cho tng trng s ca cc cnh l nh nht.
Cy bao trm ti thiu khng nht thit l duy nht trongmt th.
cb d
ai e
fgh
8 7
9
14
10
4
6
1 2
7
2
4
8
11
Hnh 4.5 Cy baotrm ti thiu
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
34/76
34
Gii thut Prim
Gii thut Prim l gii thut gii bi ton cy bao trm
ti thiu. Gii thut ny cng trnh by mt chin lc gii mt bi ton ti u ha: gii thut tham lam(greedy):
Ti mi bc ca gii thut, ta phi chn mt trong mt
s kh nng la chn. Chin lc tham lam xut vicla chn kh nng m xem ra tt nht ti lc .
Mt chin lc nh vy thng khng m bo em li ligii ti u ton cc cho cc bi ton.
Tuy nhin i vi bi ton cy bao trm ti thiu, ta c thchng minh rng chin lc tham lam c th em licy bao trm vi tng trng s ti thiu.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
35/76
35
Xy dng cy bao trm ti thiu
Gi s chng ta c mt th v hng, lin thng
G = (V, E) vi hm gn trng s w: E R v mun tmmt cy bao trm ti thiu cho G.
C mtgii thut tng qutm to dng dn cy bao trm
ti thiu mt lc thm mt cnh.
Gii thut ny duy tr mt tp A m lun lun l mt tpcon ca mt cy bao trm ti thiu.
Ti mi bc, mt cnh (u, v) c chn thm vo tp Am khng vi phm h thc bt bin A {(u, v)} lun lun lmt tp con ca mt cy bao trm ti thiu.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
36/76
36
Ta gi mt cnh nh th l cnh an ton cho tp A v n cth c thm vo A mt cch an ton m khng vi phm h
thc bt bin nu trn.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 do begin
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;
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
37/76
37
Gii thut Prim
Trong gii thut Prim, tp A hnh thnh mt cu trc cy. Mt
cnh an ton c a vo A thng l cnh c trng s nhnht ni cy A vi mt nh khng thuc v cy.
Cy bao trm khi i t mt nt r bt k rv pht trin chon khi cy ph tt c mi nh trong V. Ti mi bc, mt
cnh nh (lightedge) ni mt nh trong A vi mt cnh trongV - A.Trong qu trnh thc hin gii thut ny, tt c nhng nhm khng thuc v cy A c t trong mt hng i c
u tin Q da trn mt trng l key. Vi mi nh v, key[v]lcnh c trng s nh nht ca nhng cnh ni v vi mt nhtrong cy. Theo qui c key[v] = nu khng tn ti mtcnh nh vy.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
38/76
38
Trng p[v] lu tn ca nh cha ca nh v trong cy.
procedure MST-PRIM (G, w, r);/* G is weighted graph with the weight function w, and r is an arbitrary
root vertex */begin
Q: = V[G]; foreach u Q do key[u]: = ;
key[r]: = 0; p[r]: = NIL;
while Q is not empty dobeginu: = EXTRACT-MIN(Q);
foreach v Q and w(u, v) < key[v] then/ * update the key field of vertice v */
beginp[v] := u; key[v]: = w(u, v) end
endend;
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
39/76
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
Hnh 4.6. Mt thd v gii thutPrim.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
40/76
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
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
41/76
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
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
42/76
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
43/76
43
cb d
a i e
h g f
8 7
8
10
14
4
21
2
67
11
8
4
phc tp ca gii thut Prim ty thuc vo cch
m chng ta thi cng hng i c u tin.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
44/76
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
45/76
45
3. th c hng
Cc th c hng l cc th trong cc cnh ni vi
cc nt c hng.
A
B GC
F
D E
L M
KJ
IH
Hnh 4.7. Mt th d v th c hng
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
46/76
46
Thng th hng ca cc cnh biu th mi lin h trc
sau (precedence relationship) trong ng dng c m hnhha.
Th d, th c hng c th c dng m hnh ha
mt ng dy sn xut (assembly line).Trong phn ny, chng ta xem xt cc gii thut sau:
- tnh bao ng truyn (transitive closure)- sp th t topo (topological sorting)
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
47/76
47
Tnh bao ng truyn
Trong th c hng, chng ta quan tm n tp nhm n c t mt nh no bng cch duyt cccnh trong th theo mt hng c n nh.
Mt tc v m ta mun thc hin l thm mt cnh tx
ny nu tn ti mt cch no i txny th to ra bng cch thm tt c cc cnh c tnh
cht trn c gi l bao ng truyn ca th.
V th bao ng truyn th thng l th dy, do chng ta dng cch biu din ma trn k cn.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
48/76
48
Gii thut Warshall
C mt gii thut n gin tnh bao ng truyn ca
mt th c biu din bng ma trn k cn.for y : = 1 to V do
for x : = 1 to V doifa[x, y] then
for j: = 1 to V do ifa[y, j] then a[x, j]: = true;
S. Warshall ra gii thut ny nm 1962, da trn mtquan st n gin: Nu tn ti mt cch i t nt x nnt y v cch i t nt y n nt j, th s c cch i tnt x n nt j.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
49/76
49
Mt th d tnh bao ng truyn ( cho th hnh 4.7)
A B C D E F G H I J K L MA 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 0
F 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 0
J 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 trn k cn ngvi bc khi uca gii thut
Warshall
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
50/76
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
51/76
51
Bi ton cc li i ngn nht
i vi th c trng s (c hng hoc khng) ta c th
mui xy dng mt ma trn cho php ngi ta tm c li ingn nht txny i vi mi cp nh. y l bi tonnhng li i ngn nht cho mi cp nh (all-pairs shortest
path problem).
A
B GC
F
D E
L M
KJ
IH
2
3
1
11
4
2
5
3
2
1
2
2
1
1
11
Gii h Fl d
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
52/76
52
Gii thut Floyd
C th dng mt phng php tng t nh phng phpWarshall, m c a ra bi R. W. Floyd:
for y : = 1 to V dofor x : = 1 to V do
ifa [x, y] > 0 thenfor j: = 1 to V do
ifa [y, j] > 0 thenif(a[x, j] = 0) or (a[x, y] + a[y, j] < a [x, j])
thena[x, j] = a[x, y] + a[y, j];
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
53/76
53
Mt th d dng gii thut Floyd (cho thi hnh 4.7)
A B C D E F G H I J K L M
A 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 0
F 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 0
J 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 trn k cnng vi bckhi u cagii thut Floyd
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
54/76
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 7
B 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 0
G 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 2
K 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 trn k cn ngvi bc cui ca
gii thut Floyd
Tnh cht 5.3.2 GiithutFloyd gii biton nhng li i
ngn nht gia nhngcp c phc tptnh ton O(V3).
Gii th h ii th t Fl d
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
55/76
55
Gii thch gii thut Floyd
Gii thut Floyd lp Vbc trn ma trn k cn a.
Sau bc lp thy, a[x, j] s cha chiu di nh nht cabt k li i no t nhxn nhjm khng i quanhng nh mang ch s ln hny. Ngha l,xvjc thbt k nh no nhng nhng nh trung gian trn li i
phi nh hn hay bngy.
Ti bc lp thy, ta tnh cc phn t ca ma trn a bngcng thc sau:
ay[x,j] = min( ay-1[x,j], ay-1[x, y] + ay-1[y, j])
Ch sy ch tr ca mt phn t trong ma trn a sau bclp thy.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
56/76
56
y
xj
ay-1[x,y] ay-1[y,j ]
ay-1[x,j ]
Cng thc ny c minh ha bng hnh v sau y.
X th t t
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
57/76
57
Xp th t tp
th c hng khng chu trnh (Directed Acyclic Graph)
th c hng m khng c chu trnh c gi l cc th c hng khng chu trnh (dags).
Tp th t ring phn v xp th t tp
Cho G l mt th c hng khng chu trnh. Xt quanh th t< c nh ngha nh sau:u < v nu c mt li i tu n v trong G.
Quan h ny c 3 tnh cht:(1) Vi mi nh trong V[G], not (u < u). (khng phn x)(2) nu u < v, th not( v < u) . (khng i xng)(3) nu u < v v v < w, th u < w. (Truyn)
T th t i h
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
58/76
58
Tp th t ring phn
Mt quan h < trn tp S m tha hai tnh cht bt i xngv truyn l mt quan h th t ring phn (partial ordering)ca S, v mt tp c trn n mt quan h th t ring phnth c gi l tp th t ring phn (partially order set).
Nh vy, bt k th c hng khng chu trnh c th ccoi nh l mt tp th t ring phn.
T th t i h (tt )
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
59/76
59
Tp th t ring phn (tt.)
Mt khc, gi s S l mt tp th t ring phn vi quan h
th t ring phn
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
60/76
60
Xp th t tp
Cho G l mt th c hng khng chu trnh. Mtth t tp (topological sort)T ca G l mt th ttuyn tnh m bo ton th t ring phn ban utrong tp nh V[G].
Ngha l: nuu < v trong V(tc l nu c mt li it u n v trong G), th u xut hin trc v trong th
t tuyn tnh T.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
61/76
61
A
B GC
F
D E
L M
KJ
IH
Cc nt trong th hnh trn c th c sp th t tp
theo th t sau:J K L M A G H I F E D B C
Sp th t tp1 (Phng php 1)
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
62/76
62
Sp th t tp1 (Phng php 1)
C vi phng php sp th t tp.Phng php 1
tng cn bn l tm mt nt khng c nt i sau (nosuccessor) loi b n ra khi th v a n vo mt danhsch.Lp li qu trnh ny cho n khi th rng th s sinh ra mt
danh sch. o ngc danh sch ny ta s c th t tp.Algorithm:while the graph has a node with no successors do
remove one such node from the graph and
add it to the end of a list.ifthe loop terminates with the graph emptythen the list shows the reserse of a topological order.else the graph contains a cycle.
Hnh 4 8 Sp th t tp bng phng php 1
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
63/76
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
Hnh 4.8 Sp th t tp bng phng php 1
Phng php 2 (sp xp tp)
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
64/76
64
Phng php 2 (sp xp tp)
Phng php th hai l thc hin theo kiu tm kim theo
chiu su trc v thm mt nt vo danh sch mi khi cnthit ly mt nt ra khi stack tip tc. Khi gp mt ntkhng c nt i sau th ta s ly ra (pop) mt phn t tnh stack.
Algorithm:Start with nodes with no predecessor, put them in the stack.while the stack is not empty do ifthe node at top of the stack has some successors
thenpush all its successors onto the stack
elsepop it from the stack and add it to the list.
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
65/76
Bi ton nhng li i ngn nht t mt nh ngun
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
66/76
66
Bi ton nhng li i ngn nht t mt nh ngun
Th xt bi ton nhng li i ngn nht t mt nh ngun
(single-source shortest-paths problem):Cho mt th G = (V, E), chng ta mun tm mt li i ngnnht t mt nh ngun no s V n mi nt v V.
Biu din nhng li i ngn nhtChng ta mun tnh khng ch trng s ca nhng li i ngnnht m cn xc nh nhng nh trn nhng li i ngn nht.Cho mt th G = (V, E), ta duy tr cho mi nh v V mt
nh i trcp[v]m l mt nh khc hay l NIL. Gii thutgn tr cho thuc tnhp sao cho dy cc nh i trc xutpht t nh v s cho ra li i ngn nht ts n v.
Nhng li i ngn nht v s ni lng
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
67/76
67
Gii thut tm nhng li i ngn nht thng dng mt k thutc gi l s ni lng(relaxation).
S ni lng l mt phng php m lin tip gim cn trn catrng s ca li i ngn nht thc s ca mi nh cho n khicn trn bng vi trng s li i ngn nht.
Nh vy, vi mi nh v V, ta duy tr thuc tnh d[v], m l cntrn ca trng s ca mt li i ngn nht t nh ngun s n v.Ta gi d[v]l c lng li i ngn nht(shortest path estimate).
Qu trnh ni lng mt cnh (u, v) bao gm vic th xem ta c
th ci thin li i ngn nht n v m ang tm thy bng cch iqua u v nu nh vy, ta cp nht d[v]vp[v]. Mt bc ni lngs lm gim c lng li i ngn nht d[v]v cp nht thuctnhp[v].
Nhng li i ngn nht v s ni lng
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
68/76
68
5 9
7
6
65
55
2
2
Relax(u,v)
u v
u v
(a)
2
2u
u
v
v
Relax(u,v)
(b)
Hnh 4.10: S ni lng ca mt cnh
Gii thut Dijkstra
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
69/76
69
Gii thut ny gii bi ton nhng li i ngn nht t nhngun cho mt th c hng, c trng s G = (V, E) trong
trng hp cc trng s ca cc cnh l tr khng m.
Gii thut ny duy tr mt tp S ca cc nh m trng s cacc li i ngn nht t nh ngun c xc nh. Nghal, vi mi nh v S, ta c
d[v] = min(c lng li i ngn nht ts n v)
Gii thut lin tin chn nh u V S vi thuc tnh dnhnht, a u vo S, v ni lng mi cnh i ra t u.
Trong gii thut sau y, ta dng hng i c u tin Qcha tt c cc nh trong V-S, lp kha theo thuc tnh d. Vgi nh th G c din t bng cc danh sch k cn.
Gii thut Dijkstra
procedure dijkstra(G w s);
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
70/76
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 do begin
u: = EXTRACT-MIN (Q); S: = S {u};
for each vertex v Adj [u] do /* relaxation */ ifd[v] > d [u] + w(u, v) then begin d[v]: = d[u] + w(u, v); p[v]: = u end
endend
Gii thut Dijkstra
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
71/76
71
V gii thut Dijkstra lun lun chn nh gn nht trong
V-S a vo tp S, n thc s s dng chin lc thamlam.
Gii thut tham lam thng khng m bo em li li giiti u trong trng hp tng qut, nhng i vi bi ton
ny, gii thut Dijkstra thc s em li nhng li i ngnnht.
Gii thut Dijkstra tng t nh gii thut Prim dng
tnh cy bao trm ti thiu. N cng dng mt hng i c u tin tm mt nh nh nht bn ngoi mt tp, anh vo tp, v iu chnh li trng s ca nhng nhcn li bn ngoi tp.
Gii thut Dijkstra
Mt th d
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
72/76
72
Mt th d
5
10
00
10
5s
u v
x y
10
5
s
u v
x y
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
73/76
73
8
7
14
5
0
8
5 7
13
0
93
2
7
2
1
10
5
4
6
u v
x y
ss
10
1
2
7
2
39
4
6
u v
x y
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
74/76
74
8
7
9
5
0 0
8 9
75
x y
u v u v
x y
1
2
s
10
5
2
9
7 4
6
1
2
4
69
10
5
s 72
3
(s, u): (s, v):
(s, x): (s, y):
phc tp ca gii thut Dijkstra
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
75/76
75
Nu hng i c u tin Q = V S c thc hin bi
mt mng tuyn tnh, mi thao tc EXTRACT-MIN tnO(V), v c tt c |V| thao tc nh vy, do ta c mt chiph tnh ton cho thao tc ny l O(V2).
Mi nh v V c a vo tp S ng mt ln, do mi
nh trong cc danh sch k cnAdj[v]c xt ng mtln trong sut tin trnh ca gii thut.
V tng s nh trong tt cc cc danh sch k cn l |E|, ctt c |E| bc lp cho vng lpfor, vi mi ln lp tn O(1).
Thi gian tnh ton ca gii thut lO(V2 + E) = O(V2).
phc tp ca gii thut Dijkstra
phc tp ca gii thut Dijkstra
-
8/14/2019 Chapter4 Do phuc tap cua cac giai thuat do thi
76/76
Nu hng i c u tin Q c hin thc bi mt cu
trc heap, mi thao tc EXTRACT-MIN tn chi ph O(lgV),v c tt c |V| thao tc ny, do ta c tng chi ph chothao tc EXTRACT-MIN l O(VlgV).
Php gn d[v]: = d[u] + w(u, v) i hi mt thao tc cpnht kha ca nh v trong heap v n tn O(lgV). C tt c|E| thao tc nh vy. Do tng thi gian tnh ton ca gii
thut l
O(V lgV + E lgV).
phc tp ca gii thut Dijkstra