You are on page 1of 53

BÀI 9

BÀI TOÁN ĐƯỜNG ĐI NGẮN


NHẤT TRÊN ĐỒ THỊ

Giáo viên: TS. Nguyễn Văn Hiệu


Email: nvhieuqt@dut.udn.vn

CuuDuongThanCong.com https://fb.com/tailieudientucntt
1
Nội dung

q Giới thiệu
q Bài toán
q Thuật toán Dijkstra
q Thuật toán Bellman-Ford
q Thuật toán Floyd – Warshall
q Ứng dụng

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2014, Discrete Mathematics


https://fb.com/tailieudientucntt
2
Giới thiệu

qĐồ thị trọng số (weighted graph) là đồ thị


có gắn một số (số nguyên hay số thực) cho
mỗi cạnh hoặc mỗi cung
qSố nguyên hay số thực cho mỗi cạnh:
ü cự ly,
ü thời gian
ü chi phí,
ü tốc độ.

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
3
Bài toán

q Cho đồ thị trọng số G =(V,E,W). Ký hiệu


w(u,v) là trọng số của cạnh (u,v)
q Độ dài đường đi
d = 𝑣$ → 𝑣& →…. → 𝑣'($ → 𝑣'
là tổng trọng số
𝐿 𝑑 = ∑'($
/3$ 𝑤(𝑣/ , 𝑣/1$ )

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
4
Bài toán

Bài toán 1:Tìm đường đi ngắn nhất từ đỉnh


a và đỉnh z
Bài toán 2: Tìm đường đi ngắn nhất từ
đỉnh a đến tất cả các đỉnh còn lại

Bài toán 3: Tìm đường đi ngắn nhất giữa


mọi cặp đỉnh

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
5
Bài toán

q Để chắc chắn tìm được đường đi ngắn


nhất thì điều kiện
q Phải tồn tại đường đi
q Đồ thị vô hướng liên thông, đồ thị có hướng liên
thông mạnh
q Không tồn tại chu trình âm:
q Đồ thị vô hướng không tồn tại cạnh âm

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
6
Bài toán

qĐường đi ngắn nhất từ Etna đến Oldtown là:


Etna – Bangor – Orono – OldTown
qĐường đi ngắn nhất từ Hermae đến Etna là:
Hermae – Hampdea – Bangor - Etna

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
7
Bài toán

If ( d[v] > d[u] + c[u,v]) {


d[v] = d[u] + c[u,v];
T[v] = u;
}
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Thuật toán Dijkstra

q Mục tiêu: Tìm đường đi ngắn nhất từ


đỉnh a đến đỉnh z
q Điều kiện: Trọng số của cạnh w(u,v)>0
với mọi cạnh (u,v)
q L(u) - chiều dài ngắn nhất từ a đến u.
q Thuật toán kết thúc thì L(z) – chiều dài
ngắn nhất từ a đến z.

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
9
Thuật toán Dijkstra

q Input:
G = (V,E,W),
w(i,j)>0,∀ (𝑖, 𝑗) ∈ E,
𝑎, 𝑧 ∈ V,
qOutput:
L(z),
đường đi từ a đến z (nếu có)

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
10
Thuật toán Dijkstra
Step 1
L(a)=0, L(x)=∞, ∀ 𝑥 ≠ 𝑎,
T=V, P(x) =∅.

Step 2
m = min {L(u),u∈ 𝑇}
§ Nếu m=+∞ → 𝐾𝑇, ∄ đườ𝑛𝑔 đ𝑖 𝑡ừ 𝑎 đê𝑛 𝑧
§ Nếu m<+∞ →
- chọn v ∈ 𝑇: 𝐿 𝑣 = 𝑚,
- T = T- {v}
- step 3
CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics
https://fb.com/tailieudientucntt
11
Thuật toán Dijkstra
Step 3
§ Nếu v = z → 𝐾𝑇 và L(z), P(z)
(𝑧$ = 𝑃 𝑧 , 𝑧& = 𝑃 𝑧$ ,…., 𝑧' = 𝑃 𝑧'($ , 𝑎 = 𝑃(𝑧' ))
§ Nếu v ≠ z → Step 4

Step 4:
∀𝑢 ∈ 𝑇, 𝑘ề 𝑘ề 𝑠𝑎𝑢 𝑣
𝑁ế𝑢 𝐿 𝑢 > 𝐿 𝑣 + 𝑤 𝑣, 𝑢 , 𝑡ℎì
𝐿 𝑢 = 𝐿 𝑣 + 𝑤 𝑣, 𝑢
P(u) = v
→ Step 2.

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
12
Thuật toán Dijkstra
G – đồ thị liên thông có trọng số với n đỉnh
f(n) – số lần thuật toán Dijkstra khảo sát một
cạnh của G:
f(n) = 0(n*n)

Thuật toán Dijkstra là tối ưu


Kn - có số cạnh là n(n-1)/2
Tìm đường đi ngắn nhất từ a đến z phải khảo sát
qua mỗi cạnh một lần.
Thuật giải khảo sát ít nhất 0(n*n)

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
13
Ví dụ thuật toán Dijkstra (1)

∞,∅ ∞,∅
b c b c
5 5
6 6
4 4
1 z 1 z ∞,∅
a 8 2 a 8 2
2 3 0,∅ 2 3

d e d e
10 10
∞,∅ ∞,∅

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ thuật toán Dijkstra(2)

∞,∅ 4,a ∞,∅


∞,∅
b b c
c 5
5
6 6
4 4
1 1 z ∞,∅
a z ∞,∅ a 8 2
8 2
0,∅ 0,∅ 2 3
2 3

e d e
d 10
10 2,a ∞,∅
∞,∅ ∞,∅

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ thuật toán Dijkstra (3)

4,a ∞,∅ 3,d 10,d

b c b c
5 5
6 6
4 4
1 z ∞,∅ 1 z ∞,∅
a 2 a 8 2
8
0,∅ 0,∅ 2 3
2 3

d e d e
10 10
2,a ∞,∅ 2,a 12,d

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ thuật toán Dijkstra (4)

3,d 8,b
3,a 10,d
b c
b c 5
5
6
6 4
4 1 z ∞,∅
1 z ∞,∅ a 8 2
a 8 2
0,∅ 2 3
0,∅ 2 3
d e
d e 10
10 2,a 12,d
2,a 12,d

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ thuật toán Dijkstra(5)

3,d 8,b
3,a 8,b
b c
b c 5
5
6
6 4
4 1 z 14, 𝑐
1 z ∞,∅ a 8 2
a 8 2
0,∅ 2 3
0,∅ 2 3
d e
d e 10
10 2,a 10,𝑐
2,a 12,d

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ thuật toán Dijkstra (6)

3,d 8,b
3,a 8,b
b c
b c 5
5
6
6 4
4 1 z 13, 𝑒
1 z 14, 𝑐 a 8 2
a 8 2
0,∅ 2 3
0,∅ 2 3
d e
d e 10
10 2,a 10,𝑐
2,a 10,c

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Phương pháp lập bảng ghi nhãn

q Bản chất là thuât toán Dijkstra


q Các cột tương ứng với các đỉnh
q Các hàng tương ứng với số lần tính nhãn
(bước 4)
q Các nhãn “gạch dưới” tương ứng với
nhãn nhỏ nhất ở (bước 2)
q Số đỉnh được cố định chính là số đỉnh
loại ra (bước 2)

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
20
Ví dụ lập bảng tính nhãn (1)
b c a b c d e z
5
6
4 𝟎, ∅ ∞, ∅ ∞, ∅ ∞, ∅ ∞, ∅ ∞, ∅ a
1 z
a 8 2
2 3 𝟒, 𝒂 ∞, ∅ 𝟐, 𝒂 ∞, ∅ ∞, ∅ d

d e - 3,d 10,d - 12,d ∞, ∅ b


10
- - 8,b - 12,d ∞, ∅ c

- - - - 10.c 14,c e

- - - - - 13,e z

- - - - - -

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ lập bảng tính nhãn (2)
2 3
5
1
7 6
1 2
1 1
4 2
2
4 3 5

k 1 2 3 4 5 6
0,o oo,o oo,o oo,o oo,o oo,o
1 - 1,1 oo,o 2,1 oo,o oo,o
2 - 6,2 2,1 oo,o 8,2
3 3,4 - 6,4 8,2
4 - 6,4 4,3
6,4 -
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ lập bảng tính nhãn (3)

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Thuật toán Bellman-Ford

q Dijkstra cho kết quả sai nếu đồ thị có trọng số


âm
b
3 -2

s z
2

q Bellman-Ford khắc phục kết quả trên


q Belman-Ford giúp xác định đồ thị có chu trình
âm hay không

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
24
Thuật toán Bellman-Ford

q Input:
G = (V,E,W),
s ∈ V,
qOutput:
L(v),
P(v) – đỉnh kề trước v (s---v)
Đồ thị có chu trình âm qua đỉnh khả
nối với s
CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics
https://fb.com/tailieudientucntt
25
Thuật toán Bellman-Ford
Step 1
L(s)=0, L(v)=+∞, ∀ 𝑣 ≠ 𝑠,
P(v) = nil, ∀ 𝑣 ∈ 𝑉,

Step 2
For i:=1 to n do // |V| = n
For (u,v) ∈ 𝐸 𝑑𝑜
if L(v)>L(u)+w(u,v) then {
L(v)=L(u)+w(u,v);
P(v)= u;
}
CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics
https://fb.com/tailieudientucntt
26
Thuật toán Bellman-Ford
Step 3
If ∃ 𝑢, 𝑣 ∈ 𝐸: 𝐿 𝑣 > 𝐿 𝑢 + 𝑤 𝑢, 𝑣 𝑡ℎ𝑒𝑛
→ 𝐾𝐿 (1)
Else
{
L(v); P(v);
}

Độ phức tạp của thuật toán Bellman – Ford


0(n*m)

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
27
Thuật toán Bellman-Ford
b
3 -2

s z
2

Bước s b z
1 0 +∞,nil +¥ ,nil
2 0 3,s 2 ,s

0 3,s 1,b
3 ∄ 𝑢, 𝑣 ∈ 𝐸: 𝐿 𝑣 > 𝐿 𝑢 + 𝑤 𝑢, 𝑣

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
28
Ví dụ thuật toán Bellman-Ford
2 3
3
1 2
1
8
1 -5 3

3 4
5 4

k 1 2 3 4 5
1 0,1 1,1 ¥ ,0 ¥ ,0 3,1
2 0,1 1,1 4,2 4,2 3,1
3 0,1 1,1 4,2 4,2 -1,3
5 0,1 1,1 4,2 3,5 -1,3

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ví dụ thuật toán Bellman-Ford

k 1 2 3 4 5 6
0,1 1,1 ¥ ,1 ¥ ,1 ¥,1 ¥,1
1 0,1 1,1 6 ,2 3 ,2 7,4 7,3
2 0,1 1,1 4 ,4 3 ,2 7,4 5,3
3 0,1 1,1 4 ,4 3 ,2 6,6 5,3
S=1
4 0,1 1,1 4 ,4 3 ,2 6,6 5,3

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Thuật toán Floyd- Warshall

q Mục tiêu: Tìm đường đi ngắn nhất giữa


mọi cặp đỉnh của đồ thị (có hướng) có
trọng số
q Giải pháp
– Dijkstra nhiều lần
– Floyd- Warshall

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
31
Thuật toán Floyd- Warshall
q Input:
G = (V, E, W), V = {1,2,…,n}
qOutput:
D = {d[i,j]}nxn,
d[i,j] độ dài đường đi ngắn nhất từ i đến j
P = {p[i,j]}nxn,,
p[i,j] – đỉnh đi trước j trên đường đi
ngắn nhất từ i đến j

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
32
Thuật toán Floyd- Warshall

Step 1
𝑤 𝑖, 𝑗 , ∃ (𝑖, 𝑗) ∈ 𝐸
D0 = {d0 [i,j]} , d0 [i,j] = p
+ ∞, 𝑖, 𝑗 ∉ 𝐸
𝑗, ∃ (𝑖, 𝑗) ∈ 𝐸
P0 = {p0 [i,j]}, p0 [i,j] = p
∄, 𝑖, 𝑗 ∉ 𝐸

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
33
Thuật toán Floyd- Warshall
Step 2
For k:=1 to n do // |V| = n
// Tính Dk và Pk theo Dk-1, Pk-1
For n:=1 to n do //∀ i, j ∈ 𝐸
For m:=1 to n do
if dk -1[i,j]> dk -1[i,k]+ dk -1[k,j] then {
dk[i,j]=dk -1[i,k]+dk -1[k,j];
pk[i,j]= pk -1[i,k];
}
else {
dk[i,j]=dk -1[i,j]; pk[i,j]= pk -1[i,j];
}

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
34
Thuật toán Floyd- Warshall
Step 3
D = Dn
P = Pn
// Phương pháp xác định đường đi ngắn nhất từ i đến j
// Đường đi ngắn nhất từ i đến j là các đỉnh:
i→ 𝑖$ → 𝑖& → ⋯ → 𝑖v → 𝑖v1$ → 𝑖' → 𝑗 :
𝑖$ = 𝑝 𝑖, 𝑗 , 𝑖& = p(𝑖$ , j),…., 𝑖v1$ = p(𝑖v , j),
𝑗 = p(𝑖v1$ , j),

Độ phức tạp của thuật Floyd Warshall


0(n*n*n)

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
35
Ví dụ thuật toán Floyd- Warshall (1)
6

2 4
1 4
7
1
7 11
5

3
1 2 3 4
1 2 3 4
1 é¥ 7 5 ¥ ù 1 é¥ 2 3 ¥ ù
2
ê¥ ¥ 7 6 ú ê¥ ¥ 3 4 ú
ê ú 2
ê ú
3 ê¥ ¥ ¥ 11ú 3 ê¥ ¥ ¥ 4 ú
4 ê ú ê ú
ë 4 1 ¥ ¥ û 4
ë 1 2 ¥ ¥û
Ma trận D0
Ma trận P0
CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics
https://fb.com/tailieudientucntt
36
Ví dụ thuật toán Floyd- Warshall (2)
Cập nhật qua đỉnh 1 6

2 4
1 4
7
1
7 11
5

3
1 2 3 4
1 2 3 4
1 é¥ 7 5 ¥ ù 1 é¥ 2 3 ¥ ù
2
ê¥ ¥ 7 6 ú ê¥ ¥ 3 4 ú
ê ú 2
ê ú
3 ê¥ ¥ ¥ 11ú 3 ê¥ ¥ ¥ 4 ú
4 ê ú ê ú
ë 4 1 9 ¥ û 4
ë 1 2 1 ¥û
Ma trận D1
Ma trận P1
CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics
https://fb.com/tailieudientucntt
37
Ví dụ thuật toán Floyd- Warshall(3)
Cập nhật qua đỉnh 2 6

2 4
1 4
7
1
7 11
5

3
1 2 3 4
1 2 3 4
1 é¥ 7 5 13ù 1 é¥ 2 3 2 ù
2
ê¥ ¥ 7 6 ú ê¥ ¥ 3 4 ú
ê ú 2
ê ú
3 ê¥ ¥ ¥ 11ú 3 ê¥ ¥ ¥ 4ú
4 ê ú ê ú
ë 4 1 8 7 û 4
ë 1 2 2 2û
Ma trận D2
Ma trận P2
CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics
https://fb.com/tailieudientucntt
38
Ví dụ thuật toán Floyd- Warshall (4)
Cập nhật qua đỉnh 3 6

2 4
1 4
7
1
7 11
5

3
1 2 3 4
1 2 3 4
1 é¥ 7 5 13ù 1 é¥ 2 3 2 ù
2
ê¥ ¥ 7 6 ú ê¥ ¥ 3 4 ú
ê ú 2
ê ú
3 ê¥ ¥ ¥ 11ú 3 ê¥ ¥ ¥ 4ú
4 ê ú ê ú
ë 4 1 8 7 û 4
ë 1 2 2 2û
Ma trận D3
Ma trận P3
CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics
https://fb.com/tailieudientucntt
39
Ví dụ thuật toán Floyd- Warshall (5)
Cập nhật qua đỉnh 4 6

2 4
1 4
7
1
7 11
5

3
1 2 3 4
1 2 3 4
1 é17 7 5 13ù 1 é2 2 3 2ù
ê10 7 7 6 ú ê4
2
ê ú 2
ê 4 3 4 úú
3 ê15 12 19 11ú ê4
ê ú 3 4 4 4ú
4 ê ú
ë 4 1 8 7 û 4
ë1 2 2 2û
Ma trận D4
Ma trận P4
CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics
https://fb.com/tailieudientucntt
40
Ví dụ thuật toán Floyd- Warshall (6)
6

2 4
1 4
7
1
7 11
5

3
1 2 3 4
1 2 3 4
1 é17 7 5 13ù Kết quả: 4 → 3
ê10 7 7 6 ú 1 é2 2 3 2ù
+8 ê4
2
ê ú + 4 –2 --3 2
ê 4 3 4 úú
3 ê15 12 19 11ú ê4
ê ú p(4,3) = 2 3 4 4 4ú
4 ê ú
ë 4 1 8 7 û p(2,3) = 3 4
ë1 2 2 2û

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
41
Ví dụ thuật toán Floyd- Warshall (2.1)
10
1 2
3
2 6 5

1
4 3

1 2 3 4 1 2 3 4

1 é ¥ 10 6 2 ù 1 é¥ 2 3 4ù
ê10 ¥ 5 3 ú 2
ê1 ¥ 3 4 úú
2
ê ú ê
3 ê 6 5 ¥ 1ú 3 ê1 2 ¥ 4ú
ê ú ê ú
4 ë 2 3 1 ¥û 4
ë1 2 3 ¥û

Ma trận D0
Ma trận P0

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
42
Ví dụ thuật toán Floyd- Warshall (2.2)
10
1 2
3
2 6 5

1
4 3

1 2 3 4 1 2 3 4

1 é ¥ 10 6 2 ù 1 é¥ 2 3 4ù
ê10 ¥ 5 3 ú 2
ê1 ¥ 3 4 úú
2
ê ú ê
3 ê 6 5 ¥ 1ú 3 ê1 2 ¥ 4ú
ê ú ê ú
4 ë 2 3 1 ¥û 4
ë1 2 3 ¥û

Ma trận D1
Ma trận P1

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
43
Ví dụ thuật toán Floyd- Warshall(2.3)
10
1 2
3
2 6 5

1
4 3

1 2 3 4 1 2 3 4

1 é ¥ 10 6 2 ù 1 é¥ 2 3 4ù
ê10 ¥ 5 3 ú 2
ê1 ¥ 3 4 úú
2
ê ú ê
3 ê 6 5 ¥ 1ú 3 ê1 2 ¥ 4ú
ê ú ê ú
4 ë 2 3 1 ¥û 4
ë1 2 3 ¥û

Ma trận D2
Ma trận P2

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
44
Ví dụ thuật toán Floyd- Warshall(2.4)
10
1 2
3
2 6 5

1
4 3

1 2 3 4 1 2 3 4

1 é ¥ 10 6 2 ù 1 é¥ 2 3 4ù
ê10 ¥ 5 3 ú 2
ê1 ¥ 3 4 úú
2
ê ú ê
3 ê 6 5 ¥ 1ú 3 ê1 2 ¥ 4ú
ê ú ê ú
4 ë 2 3 1 ¥û 4
ë1 2 3 ¥û

Ma trận D3
Ma trận P3

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
45
Ví dụ thuật toán Floyd- Warshall(2.5)
10
1 2
3
2 6 5

1
4 3

1 2 3 4 1 2 3 4
1 é¥ 5 3 2 ù 1 é¥ 4 4 4ù
ê5 ¥ 4 3ú 2
ê4 ¥ 4 4 úú
2
ê ú ê
3 ê3 4 ¥ 1ú 3 ê4 4 ¥ 4ú
ê ú ê ú
4 ë 2 3 1 ¥ û 4
ë1 2 3 ¥û

Ma trận D4
Ma trận P4

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
46
Ví dụ thuật toán Floyd- Warshall(2.6)
10
1 2
3
2 6 5

1
4 3

1 2 3 4 1 2 3 4
1 é¥ 5 3 2 ù 1 é¥ 4 4 4ù
ê5 ¥ 4 3ú 2
ê4 ¥ 4 4 úú
2
ê ú ê
3 ê3 4 ¥ 1ú 3 ê4 4 ¥ 4ú
ê ú ê ú
4 ë 2 3 1 ¥ û 4
ë1 2 3 ¥û

Ma trận D4
Ma trận P4

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
47
Ứng dụng

qBài toán chọn địa điểm đặt cơ sở dịch vụ, sao cho
hiệu quả nhất về mặt kinh tế
qBài toán cực tiểu tổng
§ Tìm vị trí để đặt cơ sở sao cho khoảng cách giữa các vùng đến
cơ sở là nhỏ nhất
§ Vị trí đặt trường học, bưu điện, bệnh viện.
qBài toán cực tiểu trị lớn nhất
§ Tìm vị trí đặt cơ sở sao cho khoảng cách từ cơ sở đến điểm xa
nhất của cộng đồng là nhỏ nhất
§ Vị trí đặt cơ quan phòng cháy chữa cháy.

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ứng dụng

qBài toán cực tiểu tổng


G=(V, E, W), V={1,2,…,n},w(i,j)>0,∀ (𝑖, 𝑗) ∈ 𝐸
D={d[i,j]} là ma trận khoảng cách ngắn nhất của G
(Floyd-Warshall)
∀𝑖 ∈ 𝑉, 𝑠 𝑖 − 𝑡ổ𝑛𝑔 𝑐á𝑐 𝑝ℎầ𝑛 𝑡ử 𝑡𝑟ê𝑛 hàng i của ma trận D
Đỉnh j gọi là cực tiểu tổng nếu 𝑠 𝑗 ≤ 𝑠 𝑖 , ∀𝑖 ∈ 𝑉.
q Tập tất cả các đỉnh tâm gọi là tâm đồ thị

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ứng dụng

qBài toán cực tiểu trị lớn nhất


G=(V, E, W), V={1,2,…,n},w(i,j)>0,∀ (𝑖, 𝑗) ∈ 𝐸
D={d[i,j]} là ma trận khoảng cách nhỏ nhất của G
(Floyd-Warshall)
∀𝑖 ∈ 𝑉, 𝑒 𝑖 − 𝑝ℎầ𝑛 𝑡ử 𝑙ớ𝑛 𝑛ℎấ𝑡(độ 𝑙ệ𝑐ℎ 𝑡â𝑚)𝑡𝑟ê𝑛 ℎà𝑛𝑔 i
của ma trận D
Đỉnh j gọi là đỉnh tâm tổng nếu e 𝑗 ≤ 𝑒 𝑖 , ∀𝑖 ∈ 𝑉

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Ứng dụng
6

1
1 1 1 1
1 2 3 4 5

1 2 3 4 5 6 7
7
1 é0 1 2 3 4 4 4ù
ê1 0 1 2 3 3 3ú
2
ê ú
- Đỉnh 4 là đỉnh cực tiểu 3 ê2 1 0 1 2 2 2ú
- Đỉnh 3 là tâm đồ thị ê ú
4
ê3 2 1 0 1 1 1ú
5 ê4 3 2 1 0 2 2ú
6
ê ú
ê4 3 2 1 2 0 2ú
7 ê4 3 2 1 2 2 0ú
ë û
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Bài tập

q Lập trình thực hiện các thuật toán mô tả:


q Thuật toán Dijkstra
q Thuật toán Floyd-Warshall
q Thuật toán Bellman-Ford
q Xác định độ phức tạp của 3 thuật toán trên

CuuDuongThanCong.com Nguyễn Văn Hiệu, 2012, Discrete Mathematics


https://fb.com/tailieudientucntt
52
THAT’S ALL; THANK YOU

What NEXT?

CuuDuongThanCong.com https://fb.com/tailieudientucntt

You might also like