Bài giảng Toán tổ hợp - Chương 6: Các bài toán về đường đi

Chương 6  
CÁC BÀI TOÁN VỀ ĐƯỜNG ĐI  
Nội dung  
1. Tìm đường đi ngắn nhất  
2. Đồ thị Euler  
3. Đồ thị Hamilton  
2
1. TÌM ĐƯỜNG ĐI NGẮN  
NHẤT  
3
Định nghĩa  
Định nghĩa. Cho G = (V,E) là đồ thị có trọng số. Với  
H G thì trọng lượng của H là tổng trọng lượng của  
các cạnh của H.  
w(H) w(e)  
eH  
Nếu H là đường đi, chu trình, mạch thì w(H) được  
gọi là độ dài của H.  
Nếu mạch H có độ dài âm thì H được gọi là mạch  
âm.  
Khoảng cách giữa 2 đỉnh u và v là độ dài ngắn  
nhất của các đường đi từ u đến v.  
4
Ma trận khoảng cách  
Định nghĩa. Cho đồ thị G = (V, E), V = {v1,v2,…,vn}  
có trọng số. Ma trận khoảng cách của G là ma  
trận D= (dij) xác định như sau:  
0
khi i j  
d w(v v ) khi v v E  
ij  
i j  
i j  
khi vivj E  
Nhận xét. Mọi đồ thị được hoàn toàn xác định bởi  
ma trận khoảng cách.  
5
Ví dụ. Tìm ma trận khoảng  
cách của đồ thị sau  
0 5 31 40     
0 27 73    
26 0 8 49 25 38  
   0 16   
70   0 9  
    23 0 12  
    10 0  
D   
6
Ví dụ. Tìm đồ thị có ma trận khoảng cách sau:  
0 12 7 5   
12 0 15 16 6  
7 15 0 10  
5 16 0 5  
6 10 5 0  
Đáp án.  
5
16  
6
D
12  
B
A
7
5
15  
E
10  
C
7
Bài toán. Cho G = (V, E) là đồ thị có trọng số. Tìm  
đường đi ngắn nhất từ u đến v và tính khoảng cách  
d(u ,v).  
Nhận xét. Nếu đồ thị G có mạch âm trên một  
đường đi từ u tới v thì đường đi ngắn nhất từ u đến v  
sẽ không tồn tại.  
v
u
8
Một số lưu ý  
Khi tìm đường đi ngắn nhất ta có thể bỏ bớt đi các  
cạnh song song và chỉ để lại một cạnh có trọng  
lượng nhỏ nhất.  
Đối với các khuyên có trọng lượng không âm thì  
cũng có thể bỏ đi mà không làm ảnh hưởng đến kết  
quả của bài toán.  
Đối với các khuyên có trọng lượng âm thì có thể  
đưa đến bài toán tìm đường đi ngắn nhất không có  
lời giải.  
9
Nguyên lý Bellman  
Gọi P là đường đi ngắn nhất từ đỉnh u đến đỉnh v; t   
P. Giả sử P=P1P2 với P1 là đường đi con của P từ u  
đến t và P2 là đường đi con của P từ t đến v. Khi đó  
P1 cũng là đường đi ngắn nhất từ u đến t.  
’
Chứng minh. Giả sử tồn tại P1 là đường đi ngắn hơn  
t
P1 ta có  
P1  
P2  
v
u
’
P1  
w(P1’) < w(P1) w(P1’P2) < w(P1P2)=w(P)  
Vô lý vì P là đường đi ngắn nhất từ u đến v  
10  
Thuật toán tìm đường đi ngắn nhất  
Để tìm đường đi ngắn nhất, chúng ta quan tâm tới  
hai thuật toán:  
. Thuật toán Dijkstra không thể thực hiện khi đồ thị  
có cạnh âm  
. Thuật toán Ford – Bellman xác định các mạch  
(chu trình) âm hay trả về cây đường đi ngắn nhất  
11  
Thuật toán Dijkstra  
Xác định tuần tự các đỉnh có khoảng cách đến u0 từ nhỏ  
đến lớn.  
. Trước tiên đỉnh có khoảng cách nhỏ nhất đến u0 là u0.  
. Trong V\{u0} tìm đỉnh có khoảng cách đến u0 nhỏ nhất  
(đỉnh này phải là một trong các đỉnh kề với u0) giả sử  
đó là u1  
. Trong V\{u0,u1} tìm đỉnh có khoảng cách đến u0 nhỏ  
nhất (đỉnh này phải là một trong các đỉnh kề với u0  
hoặc u1) giả sử đó là u2  
12  
Tiếp tục như trên cho đến bao giờ tìm được khoảng  
cách từ u0 đến mọi đỉnh.  
Nếu G có n đỉnh thì:  
0 = d(u0,u0) < d(u0,u1) d(u0,u2) …d(u0,un-1)  
13  
Thuật toán Dijkstra  
Bước 1. i:=0, S:=V\{u0}, L(u0):=0, L(v):= với mọi v S  
và đánh dấu đỉnh v bởi (,-). Nếu n=1 thì dừng và xuất  
d(u0,u0)=0=L(u0)  
Bước 2. Với mọi vS và kề với ui (nếu đồ thị có hướng  
thì v là đỉnh sau của ui), đặt  
L(v):= min{ L(v), L(ui)+w(ui v)}.  
Xác định k= min L(v) , vS.  
Nếu k= L(vj) thì xuất d(u0,vj )= k và đánh dấu đỉnh vj bởi  
(k; ui). Đặt ui+1:= vj và S:=S\{ui+1}  
Bước 3. i:=i+1. Nếu i = n-1 thì kết thúc.  
Nếu không thì quay lại Bước 2  
14  
Một số ví dụ  
Bài tập 1. Tìm đường đi ngắn nhất từ u đến các đỉnh  
còn lại.  
s
7
r
1
4
3
3
x
u
1
2
3
t
4
1
w
z
y
3
5
15  
s
7
r
1
4
3
3
x
u
1
2
3
t
4
1
w
z
3
5
y
u r s t x y z w  
0* (,-) (,-) (,-) (,-) (,-) (,-) (,-)  
(4,u0)  
(1,u0)*  
-
-
(,-) (,-) (,-)  
(,-) (,-)  
(4,y) (,-)  
(3,y)*  
(,-) (,-) (,-) -  
s
7
r
1
4
3
3
x
u
1
2
3
t
4
1
w
z
y
3
5
u r s t x y z w  
0* (,-) (,-) (,-) (,-) (,-) (,-) (,-)  
(4,u0)  
(1u0)*  
-
-
(,-) (,-) (,-)  
(,-) (,-)  
(,-) (,-) (,-) - (4,y) (,-)  
(3,y)*  
(10,r)  
(4,y)*  
- -  
- -  
(6,r) (,-) -  
(,-)  
(10,r)  
(6,r)* (,-) - - (9,z)  
(7,t)*  
- - (9,t) -  
- - (9,z)  
(8,x)*  
- -  
- - - - (9,z)  
(9,z)*  
- - - - - - -  
s
1
Cây đường đi  
r
1
3
x
t
u
2
1
3 z  
y
5
w
18  
Ví dụ. Cho đồ thị có trọng số G = (V, E), V = { v1, v2, v3,  
v4, v5, v6, v7} xác định bởi ma trận trọng số D. Dùng  
thuật toán Dijkstra tìm đường đi ngắn nhất từ v1 đến  
các đỉnh v2, v3, v4, v5, v6, v7  
0 5 31 40     
0 27 73    
26 0 8 49 25 38  
   0 16   
70   0 9  
    23 0 12  
    10 0  
D   
20  
Tải về để xem bản đầy đủ
pdf 56 trang Mãnh Khiết 15/01/2024 14700 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Toán tổ hợp - Chương 6: Các bài toán về đường đi", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_toan_to_hop_chuong_6_cac_bai_toan_ve_duong_di.pdf