Thuat Toan Bellman - Ford

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

THUT TON BELLMAN - FORD

1. Khi nim ng i v ng i ngn nht.


Cho th G=<V,E>, ta c khi nim ng i v ng i ngn nht trong th nh sau:
1.1 ng i.
( p , p ) E, i :1 i k
P p0 , p1 ,..., pk
Mt dy cc nh
sao cho i 1 i
c gi l mt ng i
(p , p ), ( p1 , p2 ),..., ( pk 1 , pk )
p , p ,..., pk
(path), ng i ny gm k 1 nh 0 1
v k cnh 0 1
. Nu c 1
p
p
p
p
p
ng i nh trn th ta ni k n c t 0 hay 0 n c k . nh 0 c gi l nh u v
p , p ,..., pk 1
p
nh k c gi l nh cui ca ng i P . Cc nh 1 2
c gi l nh trong ca ng
P
i .

Ta c th lit k mt s ng i trong th trn t nh 3 n nh 6:


P1= (3, 2, 1, 6);
P2= (3, 2, 4, 1, 6);
P3= (3, 2, 1, 4, 5, 6);
P4= (3, 4, 1, 2, 4, 5, 6);
P5= (3, 4, 5, 6)
Trong th c trng s, trng s ca ng i s bng tng cc trng s ca cnh/cung m n i
qua. Trng s ca cc ng i k trn l:
P1: 2+20+2=24
P2: 2+7+11+2=22
P3: 2+20+11+3+5=31
P4: 6+11+20+7+3+5=52
P5: 6+3+5=14
1.2 ng i ngn nht.
P p0 , p1 ,..., pk
ng i
c gi l ng i ngn nht khi trng s ca P l nh nht trong
p
p
tt c cc ng i t 0 n k .
Trong cc ng i t 3 n 6 th trn, ng i ngn nht l P5= (3, 4, 5, 6) c trng s l 14.
Nhn xt:
+ Nu th khng c chu trnh m th ng i ngn nht l mt ng i n.
+ Nu th c chu trnh m th ng i ngn nht gia mt s cp nh no c th khng xc
nh, bi v bng cch i vng theo chu trnh m ny mt s ln ln ta c th ch ra ng i gia
hai nh no trong chu trnh ny nh hn bt k mt s cho trc no. Trong trng hp nh vy c
th t vn tm ng i n ngn nht. Vn l mt ng i n NP-y . Hin cha c ai
chng minh c s tn ti hay khng mt thut ton a thc tm ng i n ngn nht trn th c
chu trnh m.

2. Bi ton ng i ngn nht.


Trong cc ng dng thc t, v d trong mng li giao thng ng b, ng thy hoc ng
khngNgi ta khng ch quan tm n vic tm ng i gia hai im bt k m cn phi la chn
mt hnh trnh tit kim nht (theo khng gian, thi gian hay chi ph). Khi pht sinh yu cu tm
ng i ngn nht gia hai nh cyar th. Bi ton c th c pht biu nh sau:
Cho th c trng s G=(V, E, W), hy tm mt ng i ngn nht xut pht t nh sV n mt
nh ch fV. di ng i ny k hin l d[s,f] v gi l khong cch t s n f. Nu nh khng
tn ti ng i t s n f th ta s t d[s,f]=+.
Mt s dng bi ton tm ng i ngn nht:
+ Tm cc ng i ngn nht t mi nh ti mt nh t cho trc. Bng cch o chiu cc cung
ca th ta c th quy v bi ton tm ng i ngn nht xut pht t t.
+ Tm ng i ngn nht t nh s ti nh t cho trc. Nu ta tm c ng i ngn nht t s
n tt c cc nh khc th d nhin bi ton tm ng i ngn nht t s n t cng c gii quyt.
+ Tm ng i ngn nht gia mi cp nh ca th.
+ Tm ng i ngn nht trn th c chu trnh m. y s l vn cn gii quyt trong ti
ny. Mc d c nhiu thut ton tm ng i khc nhau nhng khng phi thut ton no cng tm
c c i ngn nht trong th c chu trnh m.
2.1. Nhn khong cch v php co.
Trong tt c cc thut ton v tm ng i ngn nht trong th u s dng k thut gn nhn
khong cch: Vi mi nh vV, nhn khong cch d[v] l di mt ng i no t s n v.
Trong trng hp chng ta cha xc nh c ng i no t s n v th nhn d[v] c gn bng
gi tr +. d[v] c gi tr khi to l:

on khi to trn c th c vit bng gi m Pascal nh sau:


Procedure Init;
Begin
For vV do d[v]:=+;
D[s]:=0;
End;
Gi (s,v) l di ng i ngn nht t s n v.
Do tnh cht ca nhn khong cch d[v] l di ca mt ng i bt k t nh n v nn d[v]>=
(s,v), vV. Cc thut ton tm ng i ngn nht s cc tiu ha dn cc nhn d[.] cho ti khi d[v]>=
(s,v), vV. Vic cc tiu ha s c thc hin bng php co.
Php co theo cnh (u,v) E, gi tt l php co (u,v) dd[cj] thc hin nh sau: Gii s chng ta
xc nh c d[u] l di mt ng i t s n u, ta ni thm cnh (u,v) c mt ng i t s
n v c di d[u]+w(u,v) vi w(u,v) l trng s ca cnh (u,v). Nu ng i ny c di ngn hn
d[v] th ta ghi nhn li d[v] bng d[u]+w(u,v).
Minh ha php co nh hnh di:

C th hnh dung hot ng ca php co nh sau: Cng mt on dy n hi dc theo ng i t


s n v, on dy s dn ra ti di d[v]. Tip theo ta th ly on dy cng dc theo ng i t
s ti u ri n v. Nu on dy b chng xung (co li) hn so vi on dy c ta ghi nhn ng i
tng ng vi cch cng mi, nu on dy khng chng xung th ta vn gi ng i cng theo
ng c. Chnh v vy php co khng lm di thm d[v], ta ni rng d[v] v cc tiu ha qua php co
(u,v)
Php co(u,v) c thc hin bi hm Relax, hm nhn vo cnh (u,v) v tr v True nu nhn d[v]
b gim i qua php co (u,v):
Function Relax(e:canh):boolean;
begin
with e do
if (d[x]<maxd)and(d[y]>d[x]+w) then
begin
d[y]:=d[x]+w;
trace[y]:=x;
exit(true);
end;
exit(false);
end;
Mi khi d[v] b gim xung sau php co(u,v), ta lu li vt trace[v]:=u vi ngha ng i ngn nht
t s n v ti thi im c ghi nhn l ng i qua u trc ri i tip theo cung (u,v). Vt ny c
s dng truy vt tm ng i khi thut ton kt thc.
2.2. Tnh ng n ca thut ton Dijkstra trong th c trng s m.
Trong trng hp th vi cc cnh c trng s khng m, thut ton Dijkstra cho kt qu chnh
xc trong thi gian cho php (C phc tp thut ton l O(n2) vi n l s nh ca th). Tuy nhin
trong th vi trng s ca 1 s cung no m nhng khng to thnh chu trnh m th thut ton
Dijkstra thng khng chnh xc. Sau y ta xt mt v d chng minh iu .
V d cho th nh sau:

Lc nh t s c c nh nhn d[t]=2, nhng trn thc t di ng i ngn nht t s n t


l 1 (3+4-6=1)
T c th kt lun rng trong th khng c chu trnh m nhng c cung m, thut ton Dijkstra
cho kt qu chnh xc trong mt s trng hp. Do vy ta cn tm mt thut ton khc c phc tp
tng ng thay th.

3.. Thut ton Bellman-Ford.


3.1. Thut ton.
Thut ton Bellman-Ford c pht biu nh sau: Khi to cc nhn khong cch d[s]:=0 v
d[v]:=+, vs, sau thc hin php co theo mi cnh ca th. C lp li nh vy cho n khi
khng th cc tiu ha thm bt k mt nhn d[v] no na.
Thut ton bng gi m Pascal:
Init; //Khi to
Repeat
Stop:=true;
For eE do
If Relax(e) then Stop:=false;
Until false;
3.2. V d minh ha.
Ngun: http://www.geeksforgeeks.org
Vi th nh hnh di, trong mi lt s xt ln lt cc cung l: (B,E), (D,B), (B,D), (A,B),
(A,C), (D,C), (B,C), (E,D). Cc nh ban u u c gn nhn , cn nh A c gn nhn 0 v
y l nh xut pht.

Lt 1:

+ Ln lt xt cc cung (B,E), (B,D), (D,B): khng thay i nhn


+ Xt cung (A,B) lm thay i D[B]=-1
+ Xt cung (A,C) lm thay i D[C]=4
+ Xt cung (D,C) khng lm thay i nhn
+ Xt cung (B,C) lm thay i D[C]=2
+ Xt cung (E,D) khng lm thay i nhn
Nhn cc nh c thay i sau lt u tin l:

Lt 2:

+ Xt cung (B,E) lm thay i nhn D[E]=1


+ Xt cung (B,D) lm thay i nhn D[D]=1
+ Xt cung (D,B), (A,B), (A,C), (D,C), (B,C): khng thay i nhn
+ Xt cung (E,D) lm thay i nhn D[D]=-1
Nhn cc nh c thay i sau lt th 2 l:

Lt 3: Xt ln lt tt c cc cung: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) u khng
lm thay i nhn.
Thut ton kt thc.
4. Bi tp
Bi 1: HAI NG I
Ngun: http://vn.spoj.com/problems/HIWAY/
Mt mng giao thng gm N nt giao thng, v c M ng hai chiu ni mt s cp nt, thng tin
v mt ng gm ba s nguyn dng u, v l tn hai nt u mt ca ng, v l l di on ng
. Bit rng hai nt giao thng bt k c khng qu 1 ng hai chiu nhn chng lm hai u mt.
Cho hai nt giao thng s v t, hy tm hai ng i ni gia s vi t sao cho hai trn hai ng khng
c cnh no c i qua hai ln v tng di 2 ng i l nh nht.
D liu vo: T tp vn bn HIWAY.INP
+ Dng u ghi N, M (N 100)
+ Dng th 2 ghi hai s s, t.
+ M dng tip theo, mi dng m t mt ng gm ba s nguyn dng u, v, l.
D liu ra: ghi vo tp vn bn HIWAY.OUT
+ Dng u ghi T l tng di nh nht tm c hoc -1 nu khng tm c.
+ Nu tm c, hai dng sau, mi dng m t mt ng i gm: s u l s nt trn ng i ny,
tip theo l dy cc nt trn ng i bt u t s, kt thc ti t.
V d:
HIWAY.INP
57
15
123
148
235
244
355
438
453

HIWAY.OUT
24
3145
41245

Hng dn
Coi mi cnh ca th tng ng vi hai cung c hng ngc chiu nhau, trng s trn cung
(u,v) c gn bng c[u,v]
Dng thut ton Dijkstra tm ng i ngn nht t s n t: <s=v0, v1, v2,,vp-1, vp=t>. Dc trn
ng i Dijkstra, vi mi cnh (vi-1, vi) ta b i cung (vi-1,vi) gi li cung (vi, vi-1) v gn trng s cung
ny l -c[vi,vi-1]. Sau nhng php bin i c nhng cung c trng s m nhng khng to thnh chu
trnh m.

Dng thut ton Bellman-Ford tm ng i ngn nht t s n t: <s=u0, u1,,uq-1,uq=t). Dc trn


ng i Bellman-Ford vi mi cnh (ui-1,ui) ta b i cung (ui-1,ui).
Vi mi cnh (u,v) ca th, nu c cung (u,v) v (v,u) u c duy tr n bc ny th b lun
c hai, nhng cung cn li ch ng i t t v s, bng cch lt ngc chiu ta c li gii.
V d: th ban u vi 2 nh s=1 v t=5

ng i Dijkstra: 1, 2, 4, 5 vi di 10

B i cc cung (1,2); (2,4); (4,5). t li trng s cc cung ngc chiu i: c[2,1]=-3; C[4,2]=-4;
C[5,4]=-3

ng i Bellman-Ford: 1, 4, 2, 3, 5 vi di 14

B cc cung: (1,4); (4,2); (2,3); (3,5)

B nt cnh (3,4) ta c 2 ng i t 5 v 1:
+ 5, 4, 1
+ 5, 3, 2, 1

i chiu ln th ban u, tng di 2 ng i tm c bng di ng i Dijkstra cng


vi di ng i Bellman-Ford=24. Lt ngc th t cc nh trong hai ng i trn ta c cp
ng i t 1 n 5 c tng da nh nht cn tm.
Bi 2: H RNG BUC
Cho n bin s nguyn v1, v2,,vn v mt tp m rng buc. Mi rng buc c biu din bi 3 s
nguyn i, j, c c dng vj-vi<=c (c l s nguyn).
Hy tm cch gn gi tr nguyn nm trong phm vi [a,b] cho cc bin v1, v2,,vn tha mn tt
c m rng buc cho.
D liu vo: T tp vn bn SDC.INP bao gm:
+ Dng u cha 4 s nguyn dng n, m,a, b vi n<=1000, m<=10000, a<b<=106;
+ Mi dng trong m dng tip theo cha 3 s nguyn i, j, c tng ng vi mt rng buc (1<=i,
j<=n; |c|<=106)
D liu ra: ghi vo tp vn bn SDC.OUT bao gm:
+ Dng 1 ghi t YES nu c phng n thc hin, ghi t NO nu khng c phng n.
+ Trong trng hp c phng n thc hin, dng 2 ghi n gi tr ca v1, v2,,vn tm c.
Cc s trn dng ca tp SDC.INP v SDC.OUT c ghi cch nhau t nht 1 du cch.
V d:
SDC.INP SDC.OUT
3314
YES
125
142
2 3 -2
3 1 -1
Hng dn
Dng th G=(V,E) vi n nh ng vi n bin, mi rng buc dng vj-vicij ng vi mt cung ni
t nh i n nh j vi trng s cj. B sung thm 1 nh 0 ni ti mi nh khc bng cung c trng s
bng 0.
+ Nu th c chu trnh m th khng tn ti cch gn gi tr cho cc bin nm tha mn cc rng
buc.
+ Nu th khng c chu trnh m, thut ton FordBellman c th p dng xc nh d[v] l
ng i ngn nht t 1 n v. (v=1..n)
(i, j) E : d[j] d[i] cij
T bt ng thc tam gic:
Ta c: d[j]-d[i]cij
Tc l cc gi tr d[.] tha mn tt c cc rng buc. Vic cui cng l cng thm cc d[.] cng 1
hng s cc gi tr ny ri vo on [a,b].
Nu d[.]max-d[.]min >b-a th khng tn ti cch gn gi tr theo yu cu

You might also like