Bài giảng Thiết kế và đánh giá thuật toán - Đường đi ngắn nhất - Lê Nguyên Khôi

Tóm tắt Bài giảng Thiết kế và đánh giá thuật toán - Đường đi ngắn nhất - Lê Nguyên Khôi: ...ỉnh  ∈   Nếu tất cả các trọng số  ,  không âm, thì mọi đường đi ngắn nhất tồn tại  Áp dụng chiến lược tham ăn có thể tìm được lời giải tối ưu  Do ĐĐNN có tính chất cấu trúc con tối ưu 9 Đường Đi Ngắn Nhất Từ Một Đỉnh Nguồn  Chiến lược tham ăn: 1. Duy trì một tập = là các đỉnh sao ...2 > 4 = min 5, >[3] + ∞ =5 14 0 3 2 1 4 2 5 9 1 4 8 1 Thuật Toán Dijkstra – Minh Họa Thêm 1 vào = = = {0, 3, 1} > 0 = 0 > 1 = 3 > 2 = min 9, >[1] + 4 =7 > 3 = 2 > 4 = min 5, >[1] + ∞ =5 15 0 3 2 1 4 2 5 9 1 4 8 1 Thuật Toán Dijkstra – Minh ...ừ một đỉnh nguồn Thuật toán Dijkstra’s Giữa mọi cặp đỉnh Thuật toán Dijkstra’s  lần Chiến lược tham ăn Thuật toán Floyd-Warshall Chiến lược quy hoạch động 22 Thuật Toán Floyd-Warshall Định nghĩa _ ,  trọng số đường đi ngắn nhất từ / tới 0 chỉ đi qua các đỉnh trong tập đỉnh =  1,...

pdf31 trang | Chia sẻ: havih72 | Lượt xem: 402 | Lượt tải: 0download
Nội dung tài liệu Bài giảng Thiết kế và đánh giá thuật toán - Đường đi ngắn nhất - Lê Nguyên Khôi, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Thiết Kế & Đánh Giá Thuật Toán
Đường Đi Ngắn Nhất
TS. Lê Nguyên Khôi
Trường Đại Học Công Nghệ - ĐHQGHN
Nội Dung
 Đường đi
 Tính chất đường đi ngắn nhất
 Đường đi ngắn nhất từ một đỉnh
Thuật toán Dijkstra
 Đường đi ngắn nhất giữa mọi đỉnh
Thuật toán Floyd–Warshall
1
Đường Đi – Định Nghĩa
 Trong đồ thị vô hướng  = , 
 Đường đi
 là dãy  các đỉnh , 	,  , 
2 đỉnh liên tiếp , 
 được nối bởi 1 cạnh trong .
 được gọi là đường đi từ  đến 
 Chu trình
 là đường đi , 	,  ,  với  > 1
 trong đó  đỉnh đầu tiên phân biệt và  = 
 Với đồ thị có hướng, trong một đường đi hay 
chu trình, 2 đỉnh liên tiếp ( , 
) phải là một
cung thuộc 
2
Đường Đi – Trọng Số
Đồ thị có hướng  = ,  với hàm trọng số
cung : 	 → . Trọng số của đường đi
   →  → ⋯ →  được định nghĩa:
   , 

Ví dụ:    2
3
Đường Đi Ngắn Nhất – Định Nghĩa
Đường đi ngắn nhất (ĐĐNN) từ  đến  là
đường đi có trọng số nhỏ nhất từ  đến . 
Trọng số đường đi ngắn nhất từ  đến 
được định nghĩa:
 ,  = min   : 	đường	đi	từ		đến	
Chú ý: ,  = ∞	không tồn tại đường đi
từ  đến .
4
Đường Đi Ngắn Nhất – Tính Chất
Cấu trúc con tối ưu
 Một đường đi con của một đường đi 
ngắn nhất là một đường đi ngắn nhất
   , 	,  ,  là ĐĐNN từ  đến 
 , =  , 	,  , , là đường đi con của 
từ  đến , với 0 ≤ / ≤ 0 ≤ 
 , =  , 	,  , , là ĐĐNN từ  đến ,
5
Đường Đi Ngắn Nhất – Tính Chất
Cấu trúc con tối ưu – chứng minh
 Chia  thành các đoạn con 
123 
134 ,
145 
 Khi đó,      + , + ,
 Giả sử có đường ′, từ  đến ,, với trọng số
 ′, <  ,
 Khi đó, 
123 
1934 ,
145  là đường đi từ 
đến  với trọng số nhỏ hơn  
 Mâu thuẫn với giả thiết  là ĐĐNN từ  đến 
6
Đường Đi Ngắn Nhất – Tính Chất
Bất đẳng thức tam giác
 Với mọi đỉnh , , : ∈ , ta có
 ,  . , : + :, 
7
Đường Đi Ngắn Nhất – Tính Chất
Trọng số âm
 Nếu đồ thị  có chu trình với trọng số âm, một
số đường đi ngắn nhất có thể không tồn tại
8
Đường Đi Ngắn Nhất Từ Một Đỉnh Nguồn
 Bài toán. Từ một đỉnh nguồn < ∈ , tìm
đường đi ngắn nhất (trọng số <,  ) tới
mọi đỉnh  ∈ 
 Nếu tất cả các trọng số  ,  không âm, 
thì mọi đường đi ngắn nhất tồn tại
 Áp dụng chiến lược tham ăn có thể tìm
được lời giải tối ưu
 Do ĐĐNN có tính chất cấu trúc con tối ưu
9
Đường Đi Ngắn Nhất Từ Một Đỉnh Nguồn
 Chiến lược tham ăn:
1. Duy trì một tập = là các đỉnh sao cho độ
dài đường đi ngắn nhất từ < là xác định
2. Mỗi bước, thêm vào tập = đỉnh  ∈  − =
sao cho đường đi từ < đến  là nhỏ nhất
3. Cập nhật khoảng cách từ < đến các đỉnh
liền kề 
10
Thuật Toán Dijkstra
 Gọi đường đi từ < tới đỉnh  là đường đi đặc biệt
nếu đường đi đó chỉ đi qua các đỉnh trong =
 Dùng mảng >: Độ dài đường đi từ < tới  lưu
trong >[]
 Ban đầu =     <,  với < ≠ 
11
< =    = 
Thuật Toán Dijkstra
 Dùng mảng >: Độ dài đường đi từ < tới  lưu
trong >[]
 Ban đầu =     <,  với 
< ≠ 
 Tại mỗi bước:
 Chọn một đỉnh  không thuộc = sao cho >  nhỏ
nhất, thêm  vào =. Khi đó >  là đường đi ngắn
nhất từ < đến 
 Sau đó xác định lại các >  với  ở ngoài =
>  = min >  , >[] 	+ 	(, )
 Lặp lại cho tới khi = gồm tất cả các đỉnh của đồ thị
12
Thuật Toán Dijkstra – Minh Họa
Ban đầu
=  {0}
> 0  0
> 1  ∞
> 2 = 9
> 3 = 2
> 4 = 5
13
0
3 2
1 4
2
5
9
1 4
8
1
Thuật Toán Dijkstra – Minh Họa
Thêm 3 vào =
= = {0, 3}
> 0 = 0
> 1 = min ∞, >[3] 	+ 1 = 3
> 2 = min 9, >[3] 	+ ∞ =9
> 3 = 2
> 4 = min 5, >[3] 	+ ∞ =5
14
0
3 2
1 4
2
5
9
1 4
8
1
Thuật Toán Dijkstra – Minh Họa
Thêm 1 vào =
= = {0, 3, 1}
> 0 = 0
> 1 = 3
> 2 = min 9, >[1] 	+ 4 =7
> 3 = 2
> 4 = min 5, >[1] 	+ ∞ =5
15
0
3 2
1 4
2
5
9
1 4
8
1
Thuật Toán Dijkstra – Minh Họa
Thêm 4 vào =
= = {0, 3, 1, 4}
> 0 = 0
> 1 = 3
> 2 = min 7, >[4] 	+ 1 =6
> 3 = 2
> 4 = 5
16
0
3 2
1 4
2
5
9
1 4
8
1
Thuật Toán Dijkstra – Minh Họa
Thêm 2 vào =
= = {0, 3, 1, 4,2}
> 0 = 0
> 1 = 3
> 2 = 6
> 3 = 2
> 4 = 5
>  lưu độ dài đường đi
ngắn nhất từ <  0 tới  với mọi  ∈ V
17
0
3 2
1 4
2
5
9
1 4
8
1
Thuật Toán Dijkstra – Bài Tập
=  {A, C, E, B, D}
> A  0 > B  7 > C  3 > D  9 > E  5
18
Thuật Toán Dijkstra – Mã Giả
>[<] 	← 0
for each  ∈ – {<} do
>[] 	← ∞
= ← ∅
S ← 
while S	 ≠ ∅ do
	 ← EXTRACT −MIN(S)
= ← = ∪ 
for each  ∈ [>0  do
if >[] 	> 	>[] 	+ 	(, ) then
>[] 	← >[] 	+ 	(, )
19
Đồ Thị Không Trọng Số
Giả sử (, ) = 1 cho mọi (, ) ∈ . Có áp dụng
được thuật toán Dijkstra không?
 Sử dụng hàng đợi FIFO thay vì hàng đợi ưu tiên
Tìm kiếm theo bề rộng (BFS)
while S	 ≠ ∅ do
	 ← DEQUEUE(S)
for each  ∈ [>0  do
if >  = ∞ then
>[] 	← >[] 	+ 1
ENQUEUE(S, )
Phân tích: Thời gian = ^( + 	)
20
Tìm Kiếm Theo Bề Rộng – Minh Họa
21
Đường Đi Ngắn Nhất Giữa Mọi Cặp Đỉnh
Từ một đỉnh nguồn
Thuật toán Dijkstra’s
Giữa mọi cặp đỉnh
Thuật toán Dijkstra’s  lần
Chiến lược tham ăn
Thuật toán Floyd-Warshall
Chiến lược quy hoạch động
22
Thuật Toán Floyd-Warshall
Định nghĩa _,   trọng số đường đi ngắn
nhất từ / tới 0 chỉ đi qua các đỉnh trong tập
đỉnh =  1,2,  , 
Khi đó, /, 0 = _, ` , ban đầu _,  = a,
23
Thuật Toán Floyd-Warshall
 Nếu đỉnh  nằm trên đường đi ngắn nhất từ / tới 0 thì
đường đi từ / tới  và đường đi từ  tới 0 là đường đi
ngắn nhất
 Nếu _,  là độ dài đường đi không qua , tức là
đường đi này chỉ đi qua các đỉnh trong =  , khi đó
_,
  _,

 Nếu _,  là độ dài đường đi qua , thì trên đường
đi này đoạn từ / tới  có độ dài _  , còn đoạn từ
 tới 0 có độ dài _, 
 Do đó
_,
  min
_,
 , _
 + _,

24
Thuật Toán Floyd-Warshall – Minh Họa
  0, tập =  rỗng, _,   a,
25
1 2 3 4
1 0 5 ∞ ∞
2 50 0 15 5
3 30 ∞ 0 15
4 15 ∞ 5 0
1 4
2 3
5 3050
15
5
15
15
5
Thuật Toán Floyd-Warshall – Minh Họa
_,
  min
_,
 , _
 + _,

26
1 2 3 4
1 0 5 ∞ ∞
2 50 0 15 5
3 30 ∞ 0 15
4 15 ∞ 5 0
1 2 3 4
1 0 5 ∞ ∞
2 50 0 15 5
3 30 35 0 15
4 15 20 5 0
_,

_,

1 4
2 3
5 3050
15
5
15
15
5
Thuật Toán Floyd-Warshall – Minh Họa
_,
  min
_,
 , _
 + _,

27
1 2 3 4
1 0 5 ∞ ∞
2 50 0 15 5
3 30 35 0 15
4 15 20 5 0
1 2 3 4
1 0 5 20 10
2 50 0 15 5
3 30 35 0 15
4 15 20 5 0
_,

_,
1 4
2 3
5 3050
15
5
15
15
5
Thuật Toán Floyd-Warshall – Minh Họa
_,
  min
_,
 , _
 + _,

28
1 2 3 4
1 0 5 20 10
2 50 0 15 5
3 30 35 0 15
4 15 20 5 0
1 2 3 4
1 0 5 20 10
2 45 0 15 5
3 30 35 0 15
4 15 20 5 0
_,
_,
b
1 4
2 3
5 3050
15
5
15
15
5
Thuật Toán Floyd-Warshall – Minh Họa
_,
  min
_,
 , _
 + _,

29
1 2 3 4
1 0 5 20 10
2 45 0 15 5
3 30 35 0 15
4 15 20 5 0
1 2 3 4
1 0 5 15 10
2 20 0 10 5
3 30 35 0 15
4 15 20 5 0
_,
b
_,
c
1 4
2 3
5 3050
15
5
15
15
5
Thuật Toán Floyd-Warshall – Mã Giả
for  ← 1 to d do
for  ← 1 to d do
for  ← 1 to d do
if _, > _ + _, then
_, ← _ + _,
 Thời gian chạy e db
 Đơn giản
 Hiệu quả
30

File đính kèm:

  • pdfbai_giang_thiet_ke_va_danh_gia_thuat_toan_duong_di_ngan_nhat.pdf