Bai Toan Tim Duong Di Ngan Nhat

Embed Size (px)

Citation preview

  • 8/8/2019 Bai Toan Tim Duong Di Ngan Nhat

    1/9

    BI 14Chng 8

    Bi ton ng i ngn nht

    Trc mi chuyn xut hnh, chng ta thng phi suy nghv chn ra chomnh mt hnh trnh tit kim nht theo ngha tn t thi gian, tn t nhin liuhoc tn t tin nht L thuyt th s gip chng ta tm ra gii php .

    8.1. Bi ton ng i ngn nht

    Bi ton: Cho th G = (V, E) v hai nh a, b. Tm ng i ngn nht (nu c)i tnh a n nh b trong th G.

    ngha thc t: Bi ton ny gip chng ta chn cc hnh trnh tit kim nht

    (qung ng, thi gian, chi ph ...) trong giao thng, lp lch thi cng cc cngtrnh mt cch ti u, x l trong truyn tin ...

    Thut ton duyt th theo chiu rng cho ta li gii ca bi ton ny.Song ta c thm thut ton sau y.

    Thut ton 8.1:

    1. Ln lt gn nhn cho cc nh ca th, mi nh khng qu mt ln, nh sau:- nh a c gn nhn l s 0.- Nhng nh k vi nh a c gn s 1.- Nhng nh k vi nh c gn nhn s 1, c gn s 2..

    - Tng t, nhng nh k vi nh c gn s i c gn nhn l si+1.

    .Thc hin cho n khi gn c nhn cho nh b hoc khng gn nhn

    c na.

    2. Nu nh bc gn nhn no l k th kt lun c ng i ngn nht tnh a ti nh b vi di k, ngc li th tr li l khng c.

    3. Khi phc ngi: Nu bc 2. ch ra bc gn nhn kno th ta ingc li theo quy tc sau y: Nu nhy c gn nhn j vij 1 th s cnh x c gn nhn j-1 sao cho c cnh i tx tiy. i ngc li cho n khigp nh a, ta nhn c ng i ngn nht cn tm.

  • 8/8/2019 Bai Toan Tim Duong Di Ngan Nhat

    2/9

  • 8/8/2019 Bai Toan Tim Duong Di Ngan Nhat

    3/9

    di ng i ngn nht ti nh a n nh b cn c gi l khongcch tnh a n nh b trong th. Nu khng c ng i t a n b tht khong cch bng .

    8.3. Thut ton Dijkstra tm ng i ngn nhtNm 1959 E. W. Dijkstra a ra mt thut ton rt hiu qu gii bi ton

    ng i ngn nht.Thut ton thc hin vic gn v gim gi tr ca nhn l(i) ti mi nh i

    ca th G nh sau:

    Thut ton 8.2 (Tm ng i ngn nht):

    1. Vi nh xut pht a, gn nhn l(a) := 0.2.Nu c cnh (i,j) m nh i c gn nhn v nh j cha c gn

    nhn hoc nh j c gn nhn nhng l(i) + c(i,j) < l(j) th gim nhnl(j) := l(i) + c(i,j).

    3. Lp li bc 2. cho n khi khng gn hoc gim nhn c na.nh l 8.3: Ti mi nh b gi tr nhn l(b) cui cng (nu c) chnh l dica ng i ngn nht tnh a n nh b.Chng minh:

    Sau khi thc hin xong thut ton trn, nu gi tr nhn l(b) xc nh th ta cng i tnh a ti nh b.

    Ta khi phc ng i t a n b nh sau:Xut pht tnh b, tm cnh c nh cui l b v nh u l i sao cho:l(i) + c(i,b) = l(b).

    nh i nh th chc chn phi tn ti v xy ra ng thc ln gn hoc gim gitr nhn l(j) cui cng. C tip tc nh th cho n khi gp nh a.

    Gi s ta nhn c dy cc cnh:(a, a1) , (a1, a2) , ... , (ak-1, b)

    m trn : l(a) + c(a,a1) = l(a1)l(a1) + c(a1,a2) = l(a2)

    .. . .. . . . .. .. .. . . .. .. . .l(ak-1) + c(ak-1, b) = l(b).

    Cng tng v v kh cc gi tr chung c hai v ta c:c(a,a1) + c(a1,a2) + ... + c(ak-1,b) = l(b).

    Vy gi tr nhn l(b) chnh l di ng i ni trn.

  • 8/8/2019 Bai Toan Tim Duong Di Ngan Nhat

    4/9

    Bt kng i no khc tnh a n nh b cng c cc h thc tng tnhng c du .

    Vy nhn l(b) l di ca ng i ngn nht.

    V d 8.3: Xt th c trng s sau y:

    Hnh 8.2. th c trng s

    di ng i ngn nht tnh a n nh b l 5.

    n gin vic tnh ton, ta xy dng ma trn trng s C :

    c(i,j) , nu (i, j) EC[i,j] = , nu (i, j) E

    0 , nu i = j.Khi , thut ton Dijkstra c trnh by chi tit hn nh sau:

    1 procedure DIJKSTRA(a) ;2 begin3 for j V do4 begin5 L[j] := C[a, j] ; Truoc[j] := a6 end ;7 T := V \ {a} ;8 while T do9 begin10 chn nh i T m L[i] = min {L[j] jT } ;11 T := T \ {i} ;12 for j T do13 if L[j] > L[i] + C[i, j] then14 begin15 L[j] := L[i] + C[i, j] ;16 Truoc[j] := i ;

  • 8/8/2019 Bai Toan Tim Duong Di Ngan Nhat

    5/9

    17 end ;18 end ;19 end ;

    Bin mng Truoc dng khi phc ng i.

    8.4. ng i trn th phi chu trnh

    S dng Thut ton 4.5 (Chng 4) nh s cc nh trn thnhhng phi chu trnh, ta xy dng c thut ton ngn gn hn tm khong cchtnh ngun ti tt c cc nh trong mt th phi chu trnh.

    Thut ton 8.4:

    D

    liu: Biu din mng DK_V cc danh sch k ca thnh hng phi chu

    trnh G = (V, E) vi tp nh V = {v1, v2 , ..., vn} c nh s m danh schDK_V[vj] cha cc nh nhn vj l nh k v ma trn trng s C ca th G.

    Kt qu: Mng D cc s nguyn vi D[vi] cha khong cch d(v1,vi) , i = 2, 3, ..., n.

    1 Begin2 D[v1] := 0 ;3 forj := 2 to n do D[vj] := ;4 forj := 2 to n do5 for vi DK_V[vj] do D[vj] := min( D[vj] , D[vi] + C[vi,vj]

    6 End.Tnh ng n ca thut ton suy t chi tit sau y: tt c cc nh trung

    gian trn ng i ngn nht tv1 ti vj c ch s nh hnj. Mi cnh (vi,vj) cxt trong dng lnh 5 ng mt ln, do vy phc tp ca thut ton l O(m).

    Ta cng c th p dng thut ton trn tm ng i di nht tnhngun ti cc nh khc ca th hoc tm ng i di nht trn thnhhng phi chu trnh c trng s.

    V d 8.4: Tm ng i di nht trn thnh hng phi chu trnh c trng s

    di y.

  • 8/8/2019 Bai Toan Tim Duong Di Ngan Nhat

    6/9

    Hnh 8.3. ng i di nht trn th phi chu trnh c trng s

    8.5. ng i ngn nht gia tt c cc cp nh

    Bi ton: Cho mt th c trng s (G, c). Hy tm ng i ngn nht gia tt ccc cp nh.

    Bi ton ny thng g p trong vic xy dng bng khong cch gia ccthnh ph, bng gi cc vn chuyn gia cc nh ga ...

    Bi ton ny c th gii quyt bng cch s dng thut ton Dijkstra vi minh ca th ln lt l cc nh xut pht. Tuy nhin, ta c th gii quyt trctip bi ton nhthut ton Floyd nh sau:

    Ta s dng ma trn Dn x n tnh di ng i ngn nht gia tt c cccp nh.

    1. Bt u gn D := C - ma trn trng s.2. Thc hin n ln lp trn D. Sau bc lp th k, D[i,j] cha di ng

    i ngn nht tnh i n nh j m chi qua cc nh c ch s khngvt qu k. Vy trong bc lp th k ta thc hin theo cng thc sau y:

    D(k)[i,j] := min (D(k-1)[i,j] , D(k-1)[i,k] + D(k-1)[k,j]) ,vi k= 1, 2, ... , n.

    V d 8.5: Gi s ta c bn giao thng sau y:

    Hnh 8.4. Bn giao thng

  • 8/8/2019 Bai Toan Tim Duong Di Ngan Nhat

    7/9

    Cc kt qu tnh ton:

    D(0) = L D(1) D(2) D(3)

    D0 D1 D2 D3

    Thut ton 8.5 (Floyd):

    Dliu: Ma trn trng s C ca th.Kt qu: Ma trn D cho bit khong cch ca tt c cc cp nh.

    1 BEGIN

    2 for i := 1 to n do3 for j := 1 to n do4 begin D[i,j] := C[i,j] ; TRUOC[i,j] := 0 end ;5 for k := 1 to n do6 for i := 1 to n do7 for j := 1 to n do8 if D[i,k] + D[k,j] < D[i,j] then9 begin10 D[i,j] := D[i,k] + D[k,j] ;11 TRUOC[i,j] := k12 end ;13 END .

    Nu TRUOC[i,j] = 0 th ng i ngn nht tnh i n nh j chnh lcnh (i, j).

    in ra cc nh trung gian trn ng i ngn nht tnh i n nh j tadng th tc quy sau y:

    1 procedure Duong_di( i, j ) ;2 begin

    3 k := TRUOC[i,j] ;4 if k= 0 then Exit ;5 Duong_di( i, k) ;6 write( k) ;7 Duong_di( k, j ) ;8 end ;

    0 8 43 0 2 0

    0 8 43 0 7 2 0

    0 8 43 0 75 2 0

    0 6 43 0 7

    5 2 0

  • 8/8/2019 Bai Toan Tim Duong Di Ngan Nhat

    8/9

    Chng hn, ma trn TRUOC ca v d trn l:

    xc nh ng i ngn nht tnh 1 n nh 2 ta ly k = TRUOC[1,2] = 3.Vy ng i ngn nht l: < 1, 3, 2 >.

    8.6. Tm ca th

    Gi s G = (V, E) l mt th c trng s khng m trn cc cnh.K hiu: d(x,y) l khong cch gia nh x v nhy trong th G.

    i lng d(a) = max { d(x,a)x V } c gi l lch ca nh a trong th G.

    Cc khi nim bn knh, tm v ng knh ca mt thc nh nghanh sau:

    nh ngha 8.6:1.Bn knh R ca th G l lch b nht trn cc nh:

    R = min { d(a) a V}.2. Tm ca th G l nh a c lch b nht:

    x V, d(a) d(x).3.ng knh ca th l khong cch di nht gia cc cp nh trong

    th:d = max { d(x,y) x, y V }.

    V d 8.7: Cho th G nh sau:

    Hnh 8.5. th c trng s

    0 3 00 0 12 0 0

  • 8/8/2019 Bai Toan Tim Duong Di Ngan Nhat

    9/9

    Vy tm ca th l nh d.

    ngha ca tm th: Dng xc nh th ca mt nc, nt giao thng

    quan trng trong mt thnh ph, v tr t my ch trong mt mng my tnh ...

    Thut ton 8.6(Tm tm ca th):

    1) Dng thut ton Floyd tnh ma trn D cc khong cch ca cc cp nh.2) Tm gi tr ln nht trn mi ct, cho ta lch ca nh tng ng.3) Tm nh vi lch b nht, chnh l tm ca th.

    Ma trn khong cch D ca v d trn l:

    a b c d e

    Tm: dBn knh: 5ng knh:

    6 8 5 7

    6 8 5 7

    Nu v mt vng trn c tm v bn knh nhnh ngha th tt c cc nhca th s nm trong vng trn ny.

    0 1 3 5 7 0 2 4 6 3 0 2 4 1 3 0 7 6 8 5 0