1
30 October 2012 1
Toán ri rc (5):
MT S BÀI TOÁN TI ƯU
TRÊN ĐỒ TH
Ts. Hoàng ThThanh
Khoa Thng –Tin hc
Trường Đại hc Kinh tế
30 October 2012 2
Ni dung
1. MT S BÀI TOÁN TRÊN ĐỒ TH
2. THUẬT TOÁN DIJKSTRA
3. THUẬT TOÁN FLOYD M KHOẢNG
CH CỦA C CẶP ĐỈNH
30 October 2012 3
MT S BÀI TOÁN TRÊN ĐỒ TH
M đầu:
Trong đời sng, chúng ta thường gp nhng
tình hung nhưsau: để đi t địađim A đếnđịa
đim B trong thành ph, nhiuđường đi,
nhiu cách đi; lúc ta chnđường đi ngn
nht (theo nghĩa cly), lúc li cn chn
đường đi nhanh nht (theo nghĩa thi gian)
lúc phi cân nhcđể chnđường đi chi phí
thp nht, v.v...
30 October 2012 4
MT S BÀI TOÁN TRÊN ĐỒ TH
thcoi sơ đồ cađường đi tAđến B trong
thành ph mtđồ th, viđỉnh các giao l
(A B coi nhưgiao l), cnh đonđường
ni hai giao l. Trên mi cnh cađồ thnày, ta
gán mt sdương, ng vi chiu dài cađon
đường, thi gian điđonđường hoc cước phí
vn chuyn trên đonđường đó, ...
30 October 2012 5
MT S BÀI TOÁN TRÊN ĐỒ TH
a) ĐN: Đồ th trng s đồ thG=(V,E) mi cnh
eEđược gán bi mt sthc m(e), gi trng sca
cnh (hoc cung) e
đây trng sca mi cnh được xét mt sdương còn
gi chiu dài ca cnh đó.
Miđường đi t đỉnh u đếnđỉnh v, chiu dài m(u,v), bng
tng chiu dài các cnh đi qua. Khong cách d(u,v) gia
hai đỉnh u v chiu dài đường đi ngn nht trong c đường
đi tuđến v.
thxem mtđồ thG bt k mtđồ th trng s
mi cnh đều chiu dài 1. Khi đó, khong cách
d(u,v) gia hai đỉnh u và v chiu dài cađường đi tu
đến v ngn nht, tc đường đi qua ít cnh nht.
30 October 2012 6
THUT TOÁN DIJKSTRA
Cho đơnđồ thliên thông, trng sG=(V,E). Tìm
khong cách d(u0,v) tmtđỉnh u0cho trướcđến mt
đỉnh v bt kca G tìm đường đi ngn nht tu0đến v.
mt sthut toán tìm đường đi ngn nht; đây, ta
thut toán do E. Dijkstra, nhà toán hc người Lan, đề
xut năm 1959. Trong phiên bn ta strình bày, người
ta gis đồ th hướng, các trng s dương. Ch
cn thay đổiđôi chút thgiiđược bài toán m
đường đi ngn nht trong đồ th hướng.
2
30 October 2012 7
THUT TOÁN DIJKSTRA
b) Phương pháp ca thut toán Dijkstra: xác định tun
t đỉnh khong cách đến u0tnh đến ln.
Trước tiên, đỉnh khong cách đến a nhnht chính là a,
vi d(u0,u0)=0. Trong các đỉnh v u0, tìm đỉnh khong
cách k1đến u0 nhnht. Đỉnh này phi là mt trong c
đỉnh kvi u0. Gis đó u1. Ta có: d(u0,u1) = k1.
Trong các đỉnh v u0 v u1, tìm đỉnh khong cách
k2đến u0 nhnht. Đỉnh này phi mt trong các đỉnh
kvi u0hoc vi u1. Gis đó u2. Ta có: d(u0,u2) = k2.
Tiếp tc nhưtrên, cho đến bao gitìm được khong cách
tu0đến miđỉnh v ca G. Nếu V={u0, u1, ..., un} thì:

30 October 2012 8
THUT TOÁN DIJKSTRA
b). Ma trn khong cách.
Cho G=(V,E) V={v1,v2,,vn}làđơn đ th
cótrng s.Ma trn khong cách ca G
làma trn D= (dij) xác đnh như sau
d(ij)= {0 nếu i=j
W(vi,vj) khi (vi,vj) E
khi E
30 October 2012 9
THUT TOÁN DIJKSTRA
c)Thut toánDijkstra
Bưc1. i:=0, S:=V\{u0}, L(u0):=0, L(v):= vi mi vS
vàđánh duđnh v bi (,-). Nu n=1 thìxut
d(u0,u0)=0 =L(u0)
Bưc2. Vi mi v S vàkvi ui(nuđ thcóhung
thìv làđnh sau ca ui), đt L(v):=min
{L(v),L(ui)+w(ui,v)}, đánh du v bi (L(v);ui) nu L(v)
cósthay đi.
Xácđnh k =min L(v) (vS)
Nu k=L(vj) thìxut d(u0,vj)=k vàui+1:=vjS:=S\{ui+1}
Bưc3 i:=i+1
Nu i = n-1 thìkt thúc (hoc S rng) , nu không thì
quay li Bưc 2
30 October 2012 10
THUT TOÁN DIJKSTRA
Bài tp 1. Tìm đưng đi ngn nht t u0đn các
đnh còn li
30 October 2012 11
THUT TOÁN DIJKSTRA
30 October 2012 12
THUT TOÁN DIJKSTRA
3
30 October 2012 13
THUT TOÁN FLOYD
S dng ma trn Wn x n để tính độ dài đường đi ngn
nht gia tt c các cp đỉnh.
1) Bt đầu gán W0:= ma trn trng s M
2) Thc hin nln lp trên W. Sau bước lp th
k, W[i,j] cha độ dài đường đi ngn nht t đỉnh
i đến đỉnh j mà ch đi qua các đỉnh có ch s
không vượt quá k:
W(k)[i,j] := min ( W(k-1)[i,j] , W(k-1)[i,k] + W(k-1)[k,j] ) ,
vi k= 1, 2, ... , n.
30 October 2012 14
THUT TOÁN FLOYD
Dliu vào: Ma trn trng sM cađồ th kết qu: Ma
trn Wn chứa khong cách ca tt ccác cpđỉnh.
BEGIN
for i:= 1 to ndo
for j:= 1 to ndo W[i,j] := M[i,j]
for i := 1 to ndo W[i,i] := 0 {Khong cách t mt đim đến
chính nó = 0}
for k:= 1 to ndo
for i:= 1 to ndo
for j:= 1 to ndo
if W[i,j] > W[i,k] + W[k,j] then
W[i,j] := W[i,k] + W[k,j]
{W[i,j] là phn t dòng i ct j ca ma trn Wk}
END .
30 October 2012 15
THUT TOÁN FLOYD
Định lý: Thut toán Floyd cho ta ma trn W*=Wn
ma trn khong cách nhnht cađ thG.
30 October 2012 16
THUT TOÁN FLOYD
d:Xét đồ thG sau:
v1v2v3
v4v5v6
4
7
22
4
11
2
3
30 October 2012 17
THUT TOÁN FLOYD
Áp dng thut toán Floyd, ta tìm được (các ô
trng )

1
22
4
3
14
27
30 October 2012 18
THUT TOÁN FLOYD
1
4292
4
3
14
27
251
104292
584
3
14
82117

4
30 October 2012 19
THUT TOÁN FLOYD
8251
5104292
11584
3
714
1482117
8251
594282
11584
3
714
1372106

30 October 2012 20
THUT TOÁN FLOYD
726414
594282
1059747
3
615393
1272969
726414
574262
1059747
359747
615373
1272969
