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
1
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
Thiết Kế & Đánh Giá Thuật Toán
Đường Đi – Định Nghĩa
Trong đồ thị vô hướng
Đường đi
là dãy các đỉnh
được nối bởi 1 cạnh
2 đỉnh liên tiếp ,
trong .
được gọi là đường đi từ
đến
Chu trình
là đường đi
với
trong đó đỉnh đầu tiên phân biệt và
Thiết Kế & Đánh Giá Thuật Toán
2
Đường Đi – Trọng Số
3
Đồ 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ụ:
Thiết Kế & Đánh Giá Thuật Toán
Đường Đi Ngắn Nhất – Định Nghĩa
4
Đường đi ngắn nhất từ đến là đường
đi có trọng số nhỏ nhất từ đến .
Trọng số đường đi ngắn nhất từ
được định nghĩa:
Chú ý:
từ đến .
đến
không tồn tại đường đi
Thiết Kế & Đánh Giá Thuật Toán
Đường Đi Ngắn Nhất – Tính Chất
5
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à đường đi ngắn nhất
từ
đến
là đường đi con của
từ đến với
là đường đi ngắn nhất từ
Thiết Kế & Đánh Giá Thuật Toán
đến
Đường Đi Ngắn Nhất – Tính Chất
6
Cấu trúc con tối ưu – chứng minh
Chia thành các đoạn con
Khi đó,
Giả sử có đường
từ đến
, với trọng số
Khi đó,
là đường đi từ
đến
với trọng số nhỏ hơn
Mâu thuẫn với giả thiết đường đi ngắn nhất
từ
đến
Thiết Kế & Đánh Giá Thuật Toán
Đườ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ó
Thiết Kế & Đánh Giá Thuật Toán
7
Đường Đi Ngắn Nhất – Tính Chất
8
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
Thiết Kế & Đánh Giá Thuật Toán
9
Đườ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
khơng âm,
Nếu tất cả các trọng số
thì mọi đường đi ngắn nhất tồn tại
Áp dụng chiến lược tham lam có thể tìm
được lời giải tối ưu
Do đường đi ngắn nhất có tính chất cấu trúc
con tối ưu
Thiết Kế & Đánh Giá Thuật Toán
10
Đường Đi Ngắn Nhất Từ Một Đỉnh Nguồn
Chiến lược tham lam:
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ề
Thiết Kế & Đánh Giá Thuật Toán
11
Chiến Lược Tham Lam
Ban đầu
0
9
2
3
2
5
1
4
1
Thiết Kế & Đánh Giá Thuật Toán
1
8
4
12
Chiến Lược Tham Lam
Thêm
vào
0
9
2
3
2
5
1
4
1
Thiết Kế & Đánh Giá Thuật Toán
1
8
4
13
Chiến Lược Tham Lam
Thêm
vào
0
9
2
3
2
5
1
4
1
Thiết Kế & Đánh Giá Thuật Toán
1
8
4
14
Chiến Lược Tham Lam
Thêm
vào
0
9
2
3
2
5
1
4
1
Thiết Kế & Đánh Giá Thuật Toán
1
8
4
15
Chiến Lược Tham Lam
Thêm
vào
0
9
2
3
2
5
1
4
1
lưu độ dài đường đi
ngắn nhất từ
tới với mọi
Thiết Kế & Đánh Giá Thuật Toán
1
8
4
16
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
,
,
Thiết Kế & Đánh Giá Thuật Toán
với
17
Thuật Toán Dijkstra
Dùng mảng : Độ dài đường đi từ
trong
Ban đầu
,
,
tới
lưu
với
Tại mỗi bước:
Chọn một đỉnh
sao cho
nhỏ nhất
Thêm vào , khi đó
lưu đường đi ngắn nhất từ
đến
Sau đó xác định lại các
với
Lặp lại cho tới khi
gồm tất cả các đỉnh của đồ thị
Thiết Kế & Đánh Giá Thuật Toán
Thuật Toán Dijkstra – Bài Tập
Thiết Kế & Đánh Giá Thuật Toán
18
19
Thuật Toán Dijkstra – Mã Giả
for each
do
while
lần
do
for each
if
lần
do
then
Thiết Kế & Đánh Giá Thuật Toán
20
Đồ Thị Khơng Trọng Số
Giả sử
cho mọi
được thuật tốn Dijkstra khơng?
. Có áp dụ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
do
for each
if
do
then
Phân tích: Thời gian
Thiết Kế & Đánh Giá Thuật Tốn
Tìm Kiếm Theo Bề Rộng – Minh Họa
Thiết Kế & Đánh Giá Thuật Toán
21
22
Đườ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
Chiến
Thuật
lần
lược tham lam
toán Floyd-Warshall
Chiến
lược quy hoạch động
Thiết Kế & Đánh Giá Thuật Toán
23
Thuật Toán Floyd-Warshall – Minh Họa
, tập
rỗng,
15
1
4
1
2
3
4
1
0
5
∞
∞
2
50
0
15
5
3
30
∞
0
15
4
15
∞
5
0
5
5
50
2
30
15
5
15
3
Thiết Kế & Đánh Giá Thuật Toán
24
Thuật Toán Floyd-Warshall – Minh Họa
15
1
4
5
5
50
2
30
15
5
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
15
3
Thiết Kế & Đánh Giá Thuật Toán