1. Trang chủ
  2. » Giáo án - Bài giảng

Toán Rời Rạc Chương 5

20 270 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 551 KB

Nội dung

Kiến thức chuyên ngành luôn yêu cầu bạn phải cập nhật và trau dồi từng ngày.Để có nền tảng kiến thức vững chắc trước các kì thi…bạn không thể thiếu các tài liệu tham khảo hay được chia sẻ trên mạng Internet.Share to be share more

lazycatnct@gmail.com www.free4vn.org CHƯƠNG V MỘT SỐ BÀI TOÁN TỐI ƯU TRÊN ĐỒ THỊ 5.1 ĐỒ THỊ CÓ TRỌNG SỐ VÀ BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT 5.1.1 Mở đầu: Trong đời sống, thường gặp tình sau: để từ địa điểm A đến địa điểm B thành phố, có nhiều đường đi, nhiều cách đi; có lúc ta chọn đường ngắn (theo nghĩa cự ly), có lúc lại cần chọn đường nhanh (theo nghĩa thời gian) có lúc phải cân nhắc để chọn đường rẻ tiền (theo nghĩa chi phí), v.v Có thể coi sơ đồ đường từ A đến B thành phố đồ thị, với đỉnh giao lộ (A B coi giao lộ), cạnh đoạn đường nối hai giao lộ Trên cạnh đồ thị này, ta gán số dương, ứng với chiều dài đoạn đường, thời gian đoạn đường cước phí vận chuyển đoạn đường đó, Đồ thị có trọng số đồ thị G=(V,E) mà cạnh (hoặc cung) e∈E gán số thực m(e), gọi trọng số cạnh (hoặc cung) e Trong phần này, trọng số cạnh xét số dương gọi chiều dài cạnh Mỗi đường từ đỉnh u đến đỉnh v, có chiều dài m(u,v), tổng chiều dài cạnh mà qua Khoảng cách d(u,v) hai đỉnh u v chiều dài đường ngắn (theo nghĩa m(u,v) nhỏ nhất) đường từ u đến v Có thể xem đồ thị G đồ thị có trọng số mà cạnh có chiều dài Khi đó, khoảng cách d(u,v) hai đỉnh u v chiều dài đường từ u đến v ngắn nhất, tức đường qua cạnh 5.1.2 Bài toán tìm đường ngắn nhất: Cho đơn đồ thị liên thông, có trọng số G=(V,E) Tìm khoảng cách d(u 0,v) từ đỉnh u0 cho trước đến đỉnh v G tìm đường ngắn từ u0 đến v Có số thuật toán tìm đường ngắn nhất; đây, ta có thuật toán E Dijkstra, nhà toán học người Hà Lan, đề xuất năm 1959 Trong phiên mà ta trình bày, người ta giả sử đồ thị vô hướng, trọng số dương Chỉ cần thay đổi đôi chút giải toán tìm đường ngắn đồ thị có hướng Phương pháp thuật toán Dijkstra là: xác định đỉnh có khoảng cách đến u0 từ nhỏ đến lớn Trước tiên, đỉnh có khoảng cách đến a nhỏ a, với d(u 0,u0)=0 Trong đỉnh v ≠ u0, tìm đỉnh có khoảng cách k đến u0 nhỏ Đỉnh phải đỉnh kề với u0 Giả sử u1 Ta có: d(u0,u1) = k1 upsoft.blogspot.com Trang 67 lazycatnct@gmail.com www.free4vn.org Trong đỉnh v ≠ u0 v ≠ u1, tìm đỉnh có khoảng cách k2 đến u0 nhỏ Đỉnh phải đỉnh kề với u0 với u1 Giả sử u2 Ta có: d(u0,u2) = k2 Tiếp tục trên, tìm khoảng cách từ u đến đỉnh v G Nếu V={u0, u1, , un} thì: = d(u0,u0) < d(u0,u1) < d(u0,u2) < < d(u0,un) 5.1.3 Thuật toán Dijkstra: procedure Dijkstra (G=(V,E) đơn đồ thị liên thông, có trọng số với trọng số dương) {G có đỉnh a=u0, u1, , un=z trọng số m(ui,uj), với m(ui,uj) = ∞ (ui,uj) không cạnh G} for i := to n L(ui) := ∞ L(a) := S := V \ {a} u := a while S ≠ ∅ begin for tất đỉnh v thuộc S if L(u) +m(u,v) < L(v) then L(v) := L(u)+m(u,v) u := đỉnh thuộc S có nhãn L(u) nhỏ {L(u): độ dài đường ngắn từ a đến u} S := S \ {u} end Thí dụ 1: Tìm khoảng cách d(a,v) từ a đến đỉnh v tìm đường ngắn từ a đến v cho đồ thị G sau b 1 a n upsoft.blogspot.com c 2 e 3 d g 3 m h k Trang 68 lazycatnct@gmail.com www.free4vn.org L(a) L(b) L(c) L(d) L(e) L(g) L(h) L(k) L(m) L(n) ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ − ∞ ∞ ∞ ∞ ∞ − − ∞ ∞ ∞ ∞ − − ∞ ∞ ∞ ∞ − − − ∞ − ∞ ∞ − − − ∞ − ∞ − − − − − 10 − ∞ − − − − − − − − − − − − − − − − − − − − − − − − − − 5.1.4 Định lý: Thuật toán Dijkstra tìm đường ngắn từ đỉnh cho trước đến đỉnh tuỳ ý đơn đồ thị vô hướng liên thông có trọng số Chứng minh: Định lý chứng minh quy nạp Tại bước k ta có giả thiết quy nạp là: (i) Nhãn đỉnh v không thuộc S độ dài đường ngắn từ đỉnh a tới đỉnh này; (ii) Nhãn đỉnh v S độ dài đường ngắn từ đỉnh a tới đỉnh đường chứa đỉnh (ngoài đỉnh này) không thuộc S Khi k=0, tức chưa có bước lặp thực hiện, S=V \ {a}, độ dài đường ngắn từ a tới đỉnh khác a ∞ độ dài đường ngắn từ a tới (ở đây, cho phép đường cạnh) Do bước sở Giả sử giả thiết quy nạp với bước k Gọi v đỉnh lấy khỏi S bước lặp k+1, v đỉnh thuộc S cuối bước k có nhãn nhỏ (nếu có nhiều đỉnh có nhãn nhỏ chọn đỉnh làm v) Từ giả thiết quy nạp ta thấy upsoft.blogspot.com Trang 69 lazycatnct@gmail.com www.free4vn.org trước vào vòng lặp thứ k+1, đỉnh không thuộc S gán nhãn độ dài đường ngắn từ a Đỉnh v phải gán nhãn độ dài đường ngắn từ a Nếu điều không xảy cuối bước lặp thứ k có đường với độ dài nhỏ Lk(v) chứa đỉnh thuộc S (vì Lk(v) độ dài đường ngắn từ a tới v chứa đỉnh không thuộc S sau bước lặp thứ k) Gọi u đỉnh đường thuộc S Đó đường với độ dài nhỏ L k(v) từ a tới u chứa đỉnh không thuộc S Điều trái với cách chọn v Do (i) cuối bước lặp k+1 Gọi u đỉnh thuộc S sau bước k+1 Đường ngắn từ a tới u chứa đỉnh không thuộc S chứa v không Nếu không chứa v theo giả thiết quy nạp độ dài Lk(v) Nếu chứa v tạo thành đường từ a tới v với độ dài ngắn chứa đỉnh không thuộc S khác v, kết thúc cạnh từ v tới u Khi độ dài L k(v)+m(v,u) Điều chứng tỏ (ii) Lk+1(u)=min(Lk(u), Lk(v)+m(v,u)) 5.1.5 Mệnh đề: Thuật toán Dijkstra tìm đường ngắn từ đỉnh cho trước đến đỉnh tuỳ ý đơn đồ thị vô hướng liên thông có trọng số có độ phức tạp O(n2) Chứng minh: Thuật toán dùng không n−1 bước lặp Trong bước lặp, dùng không 2(n−1) phép cộng phép so sánh để sửa đổi nhãn đỉnh Ngoài ra, đỉnh thuộc Sk có nhãn nhỏ nhờ không n−1 phép so sánh Do thuật toán có độ phức tạp O(n2) 5.1.6 Thuật toán Floyd: Cho G=(V,E) đồ thị có hướng, có trọng số Để tìm đường ngắn cặp đỉnh G, ta áp dụng thuật toán Dijkstra nhiều lần áp dụng thuật toán Floyd trình bày Giả sử V={v1, v2, , vn} có ma trận trọng số W ≡ W0 Thuật toán Floyd xây dựng dãy ma trận vuông cấp n Wk (0 ≤ k ≤ n) sau: procedure Xác định Wn for i := to n for j := to n W[i,j] := m(vi,vj) {W[i,j] phần tử dòng i cột j ma trận W0} for k := to n if W[i,k] +W[k,j] < W[i,j] then W[i,j] := W[i,k] +W[k,j] {W[i,j] phần tử dòng i cột j ma trận Wk} 5.1.7 Định lý: Thuật toán Floyd cho ta ma trận W*=Wn ma trận khoảng cách nhỏ đồ thị G upsoft.blogspot.com Trang 70 lazycatnct@gmail.com www.free4vn.org Chứng minh: Ta chứng minh quy nạp theo k mệnh đề sau: Wk[i,j] chiều dài đường ngắn đường nối đỉnh v i với đỉnh vj qua đỉnh trung gian {v1, v2, , vk} Trước hết mệnh đề hiển nhiên với k=0 Giả sử mệnh đề với k-1 Xét Wk[i,j] Có hai trường hợp: 1) Trong đường chiều dài ngắn nối v i với vj qua đỉnh trung gian {v1, v2, , vk}, có đường γ cho vk ∉ γ Khi γ đường ngắn nối vi với vj qua đỉnh trung gian {v1, v2, , vk-1}, nên theo giả thiết quy nạp, Wk-1[i,j] = chiều dài γ ≤ Wk-1[i,k]+Wk-1[k,j] Do theo định nghĩa Wk Wk[i,j]=Wk-1[i,j] 2) Mọi đường chiều dài ngắn nối v i với vj qua đỉnh trung gian {v1, v2, , vk}, chứa vk Gọi γ = vi vk vj đường ngắn v1 vk vk vj đường ngắn qua đỉnh trung gian {v1, v2, , vk-1} Wk-1[i,k]+Wk-1[k,j] = chiều dài(v1 vk) + chiều dài(vk vj) = chiều dài γ < Wk-1[i,j] Do theo định nghĩa Wk ta có: Wk[i,j] = Wk-1[i,k]+Wk-1[k,j] Thí dụ 2: Xét đồ thị G sau: v1 2 v3 1 v4 v2 v5 v6 Áp dụng thuật toán Floyd, ta tìm (các ô trống ∞)        3  W = W0 =    2        upsoft.blogspot.com Trang 71 lazycatnct@gmail.com www.free4vn.org     W1 =   2       3  , W2 =            2       3   10       W3 =   2    11 14   7 3  , W4 = 11  10         2    10 13      11    9  3  W5 =  7 2  4  12   6 3  , W* = W6 = 10    11 9  3 7  7 2  4  4 7 9 5 12    3  10    Thuật toán Floyd áp dụng cho đồ thị vô hướng đồ thị có hướng Ta cần thay cạnh vô hướng (u,v) cặp cạnh có hướng (u,v) (v,u) với m(u,v)=m(v,u) Tuy nhiên, trường hợp này, phần tử đường chéo ma trận W cần đặt Đồ thị có hướng G liên thông mạnh phần tử nằm đường chéo ma trận trọng số ngắn W* hữu hạn 5.2 BÀI TOÁN LUỒNG CỰC ĐẠI 5.2.1 Luồng vận tải: 5.2.1.1 Định nghĩa: Mạng vận tải đồ thị có hướng, khuyên có trọng số G=(V,E) với V={v0, v1, , vn} thoả mãn: 1) Mỗi cung e ∈ E có trọng số m(e) số nguyên không âm gọi khả thông qua cung e 2) Có đỉnh v0 cung vào, tức deg t(v0)=0 Đỉnh v0 gọi lối vào hay đỉnh phát mạng 3) Có đỉnh cung ra, tức dego(vn)=0 Đỉnh gọi lối hay đỉnh thu mạng upsoft.blogspot.com Trang 72 lazycatnct@gmail.com www.free4vn.org 5.2.1.2 Định nghĩa: Để định lượng khai thác, tức xác định lượng vật chất chuyển qua mạng vận tải G=(V,E), người ta đưa khái niệm luồng vận tải định nghĩa sau Hàm ϕ xác định tập cung E nhận giá trị nguyên gọi luồng vận tải mạng vận tải G ϕ thoả mãn: 1) ϕ(e) ≥ 0, ∀e ∈ E ϕ (e) ϕ (e) 2) ∑ = ∑ , ∀v ∈V, v≠v0, v≠vn Ở đây, Γ − (v)={e∈E | e có đỉnh cuối v}, + − e∈Γ ( v ) e∈Γ (v ) Γ + (v)={e∈E | e có đỉnh đầu v} 3) ϕ(e) ≤ m(e), ∀e ∈ E Ta xem ϕ(e) lượng hàng chuyển cung e=(u,v) từ đỉnh u đến đỉnh v không vượt khả thông qua cung Ngoài ra, từ điều kiện 2) ta thấy v lối vào v0 hay lối vn, lượng hàng chuyển tới v lượng hàng chuyển khỏi v Từ quan hệ 2) suy ra: ϕ (e ) ϕ (e) ϕ 4) ∑ = ∑ =: + − e∈Γ ( v0 ) e∈Γ (vn ) Đại lượng ϕ (ta ký hiệu ϕ n ) gọi luồng qua mạng, hay cường độ luồng điểm hay giá trị luồng ϕ Bài toán đặt tìm ϕ để ϕ đạt giá trị lớn nhất, tức tìm giá trị lớn luồng 5.2.1.3 Định nghĩa: Cho mạng vận tải G=(V,E) A ⊂ V Ký hiệu Γ − (A)={(u,v)∈E | v∈A, u∉A}, Γ + (A)={(u,v)∈E | u∈A, v∉A} ϕ (e) Đối với tập cung M tuỳ ý, đại lượng ϕ(M)= ∑ gọi luồng tập e∈M cung M Từ điều kiện 2) dễ dàng suy hệ sau 5.2.1.4 Hệ quả: Cho ϕ luồng mạng vận tải G=(V,E) A ⊂ V \{v0,vn} Khi đó: ϕ( Γ − (A))=ϕ( Γ + (A)) 5.2.2 Bài toán luồng cực đại: Cho mạng vận tải G=(V,E) Hãy tìm luồng ϕ để đạt ϕ max mạng G Nguyên lý thuật toán giải toán tìm luồng cực đại sau 5.2.2.1 Định nghĩa: Cho A ⊂ V tập tuỳ ý không chứa lối vào v chứa lối Tập Γ − (A) gọi thiết diện mạng vận tải G m( e) Đại lượng m( Γ − (A))= ∑ gọi khả thông qua thiết diện − e∈Γ ( A) Γ − (A) Từ định nghĩa thiết diện khả thông qua ta nhận thấy rằng: đơn vị hàng hoá chuyển từ v đến phải lần qua cung upsoft.blogspot.com Trang 73 lazycatnct@gmail.com www.free4vn.org thiết diện Γ − (A) Vì vậy, dù luồng ϕ thiết diện Γ − (A) thoả mãn quan hệ: ϕn ≤ m( Γ − (A)) Do đó, luồng ϕ thiết diện W mà có: ϕn = m(W) chắn luồng ϕ đạt giá trị lớn thiết diện W có khả thông qua nhỏ 5.2.2.2 Định nghĩa: Cung e mạng vận tải G với luồng vận tải ϕ goi cung bão hoà ϕ(e)=m(e) Luồng ϕ mạng vận tải G gọi luồng đầy đường từ v đến chứa cung bão hoà Từ định nghĩa ta thấy rằng, luồng ϕ mạng vận tải G chưa đầy định tìm đường α từ lối vào v0 đến lối không chứa cung bão hoà Khi ta nâng luồng ϕ thành ϕ’ sau: ϕ (e) + e∈α , ϕ ' (e ) =  e∉α ϕ (e) Khi ϕ’ luồng, mà giá trị là: ϕ’n = ϕn +1 > ϕn Như vậy, luồng không đầy ta nâng giá trị nâng nhận luồng đầy Tuy vậy, thực tế cho thấy có luồng đầy, chưa đạt tới giá trị cực đại Bởi vậy, cần phải dùng thuật toán Ford-Fulkerson để tìm giá trị cực đại luồng 5.2.2.3 Thuật toán Ford-Fulkerson: Để tìm luồng cực đại mạng vận tải G, ta xuất phát từ luồng tuỳ ý ϕ G, nâng luồng lên đầy, sau áp dụng thuật toán Ford-Fulkerson ta áp dụng thuật toán Ford-Fulkerson trực tiếp luồng ϕ Thuật toán gồm bước: Bước (đánh dấu đỉnh mạng): Lối vào v0 đánh dấu 1) Nếu đỉnh vi đánh dấu ta dùng số +i để đánh dấu cho đỉnh y chưa đánh dấu mà (vi,y)∈E cung chưa bão hoà (ϕ(vi,y)0) Nếu với phương pháp ta đánh dấu tới lối G tồn v0 xích α, đỉnh khác đánh dấu theo số đỉnh liền trước (chỉ sai khác dấu) Khi chắn ta nâng giá trị luồng Bước (nâng giá trị luồng): Để nâng giá trị luồng ϕ, ta đặt: upsoft.blogspot.com Trang 74 lazycatnct@gmail.com www.free4vn.org ϕ’(e) = ϕ(e), e∉α, ϕ’(e) = ϕ(e)+1, e∈α định hướng theo chiều xích α từ vo đến vn, ϕ’(e) = ϕ(e)−1, e∈α định hướng ngược với chiều xích α từ vo đến +i y vj -j e vi z v0 ϕ’ thoả mãn điều kiện luồng, nên ϕ’ luồng ta có: ϕ’n = ϕn+1 Như vậy, ta nâng luồng lên đơn vị Sau lặp lại vòng Vì khả thông qua cung hữu hạn, nên trình phải dừng lại sau số hữu hạn bước Bước 3: Nếu với luồng ϕ0 phương pháp ta nâng giá trị luồng lên nữa, nghĩa ta đánh dấu đỉnh v n, ta nói trình nâng luồng kết thúc ϕ0 đạt giá trị cực đại, đồng thời gọi ϕ0 luồng kết thúc Khi mạng vận tải G=(V,E) đạt tới luồng ϕ0, bước ta đánh dấu tới lối Trên sở trạng đánh dấu bước này, ta chứng minh luồng ϕ0 đạt giá trị cực đại 5.2.2.4 Bổ đề: Cho luồng ϕ mạng vận tải G=(V,E) A ⊂ V, chứa lối không chứa lối vào v0 Khi đó: ϕ = ϕ (Γ − ( A)) − ϕ (Γ + ( A)) Chứng minh: Đặt A1=A \{vn} Theo Hệ 5.2.1.4, ta có: ϕ (Γ − ( A1 )) = ϕ (Γ + ( A1 )) (1) Đặt C1={(a,vn)∈E | a∉A} Khi Γ − ( A) = Γ − ( A1 ) ∪ C1 Γ − ( A1 ) ∩ C1 = ∅, nên ϕ (Γ − ( A)) = ϕ (Γ − ( A1 )) + ϕ (C1) (2) Đặt C2={(b,vn)∈E | b∈A1} Khi C2={(b,vn)∈E | b∈A}, Γ + ( A1 ) = Γ + ( A) ∪ C2 Γ + ( A) ∩ C2 = ∅, nên ϕ (Γ + ( A)) = ϕ (Γ + ( A1 )) − ϕ (C2) (3) Ngoài ra, Γ − (v n ) = C1∪C2 C1∩C2 = ∅, nên ϕ = ϕ (Γ − (v n )) = ϕ (C1)+ ϕ (C2) (4) Từ (1), (2), (3) (4), ta có: upsoft.blogspot.com Trang 75 lazycatnct@gmail.com www.free4vn.org ϕ = ϕ (Γ − ( A)) − ϕ (Γ + ( A)) 5.2.2.5 Định lý (Ford-Fulkerson): Trong mạng vận tải G=(V,E), giá trị lớn luồng khả thông qua nhỏ thiết diện, nghĩa max ϕ = ϕ A⊂V ,v0∉A,vn∈A m(Γ − ( A)) Chứng minh: Giả sử mạng vận tải G, ϕ0 luồng cuối cùng, mà sau phương pháp đánh dấu thuật toán Ford-Fulkerson không đạt tới lối v n Trên sở trạng đánh dấu lần cuối này, ta dùng B để ký hiệu tập gồm đỉnh G không đánh dấu Khi v 0∉B, vn∈B Do Γ − (B) thiết diện mạng vận tải G theo Bổ đề 5.2.2.4, ta có: ϕ v0 = ϕ (Γ − ( B )) − ϕ (Γ + ( B )) (1) n Đối với cung e=(u,v)∈ Γ − (B) u∉B v∈B, tức u đánh dấu v không đánh dấu, nên theo nguyên tắc đánh dấu thứ nhất, e cung bão hoà: ϕ0(e) = m(e) ∑ ϕ (e) = ∑ m(e) = m(Γ − ( B)) ϕ (Γ − ( B )) = Do đó, e∈Γ − ( B ) e=(s,t)∈ + (B) e∈Γ − ( B ) (2) Đối với cung s∈B t∉B, tức s không đánh dấu Γ t đánh dấu, nên theo nguyên tắc đánh dấu thứ hai: ϕ0(e) = ϕ (Γ + ( B)) = Do đó, ∑ ϕ (e) = e∈Γ + ( B ) (3) Từ (1), (2) (3) ta suy ra: ϕ v0 = m(Γ − ( B)) n Vì vậy, ϕ v0 n giá trị lớn luồng đạt được, m( Γ − (B)) giá trị nhỏ khả thông qua thiết diện thuộc mạng vận tải G Thí dụ 3: Cho mạng vận tải hình với khả thông qua đặt khuyên tròn, luồng ghi cung Tìm luồng cực đại mạng Luồng ϕ có đường (v0,v4), (v4,v6), (v6,v8) gồm cung chưa bão hoà nên chưa đầy Do nâng luồng cung lên đơn vị, để ϕ1 Do đường xuất phát từ v0 đến v8 chứa cung bão hoà, nên luồng ϕ1 luồng đầy Song chưa phải luồng cực đại Áp dụng thuật toán Ford-Fulkerson để nâng luồng ϕ1 v1 v0 upsoft.blogspot.com v5 6 v2 v43 Trang 76 v7 v8 lazycatnct@gmail.com www.free4vn.org 5 v6 12 11 6 4 ϕ v1 8 6 12 12 v6 v3 4 −6 v5 v2 5 v0 4 +4 +7 4 v4 v8 v7 +3 ϕ1 Xét xích α=(v0, v4, v6, v3, v7, v8) Quá trình đánh dấu từ v0 đến v8 để nâng luồng ϕ1 lên đơn vị cách biến đổi luồng cung thuộc xích α đánh dấu Sau ta có luồng ϕ2 +0 +4 3+1 +0 7+1 3−1 v6 −6 v3 2+1 v4 +3 v7 xích α v0 6+1 v8 +7 Xét xích β=(v0, v1, v5, v2, v6, v3, v7, v8) Quá trình đánh dấu từ v đến v8 để nâng luồng ϕ2 lên đơn vị cách biến đổi luồng cung thuộc xích β đánh dấu Sau ta có luồng ϕ3 +0 v1 4 +1 upsoft.blogspot.com v0 Trang 77 v4 v7 v8 v5 lazycatnct@gmail.com −5 5 v2 +2 v6 v3 −6 4 ϕ2 +1 +0 7+1 3+1 v5 −5 3−1 v +2 2−1 v1 −6 3+1 v7 xích β v3 6 v6 4 v4 7+1 v5 4 +3 v8 +7 v2 4 5 v0 v6 v3 v1 v0 +3 2+1 v0 12 12 +7 4 www.free4vn.org 12 12 v8 4 ϕ v7 Tiếp theo ta đánh dấu đỉnh v0 nên trình nâng luồng kết thúc ta giá trị luồng cực đại là: ϕ v3 = 6+12+8 = 26 Mặt khác, thiết diện nhỏ Γ − (B) với B={v1, v2, , v8} Γ − (B)={(v0,v1), (v0,v2), (v0,v3), (v0,v4)} 5.3 BÀI TOÁN DU LỊCH 5.3.1 Giới thiệu toán: upsoft.blogspot.com Trang 78 lazycatnct@gmail.com www.free4vn.org Một người xuất phát từ thành phố muốn tới thăm n−1 thành phố khác, thành phố lần, quay thành phố ban đầu Hỏi nên theo trình tự để độ dài tổng cộng đoạn đường qua ngắn (khoảng cách hai thành phố hiểu cự ly thông thường thời gian cần chi phí hành trình, xem cho trước) Xét đồ thị đầy đủ G=(V,E), với V={1, 2, , n}, có trọng số với trọng số m ij= m(i,j) khác mji = m(j,i) Như vậy, ta xem G đồ thị có hướng đầy đủ “mạnh” theo nghĩa với i, j=1, 2, , n, i≠j, có (i,j), (j,i)∈E Bài toán trở thành tìm chu trình Hamilton có độ dài ngắn G Bài toán tiếng có lời giải cách sử dụng phương pháp “nhánh cận” 5.3.2 Phương pháp nhánh cận: Giả sử tập hữu hạn phương án toán, ta phải chọn phương án tối ưu theo tiêu chuẩn (thí dụ làm cho hàm mục tiêu đạt giá trị nhỏ nhất) Ta tìm cách phân chia tập phương án xét thành hai tập không giao Với tập này, ta tính “cận dưới” (chặn đủ tốt) giá trị hàm mục tiêu ứng với phương án Mang so sánh hai cận vừa tính được, ta phán đoán xem tập có nhiều triển vọng chứa phương án tối ưu tiếp tục phân chia tập thành hai tập khác không giao nhau, lại tính cận tương ứng Lặp lại trình sau số hữu hạn bước, cuối phương án tốt, nói chung tối ưu Nếu không lặp lại trình phân chia để kiểm tra sau vài bước, ta phương án tối ưu Người ta thường mô tả trình phân chia “cây có gốc” mà gốc tượng trưng cho tập toàn phương án, đỉnh phía tượng trưng cho tập trình “phân nhánh nhị phân” Vì vậy, phương pháp mang tên nhánh cận 5.3.3 Cơ sở lý luận phép toán: Nếu không xác định thành phố xuất phát có n! hành trình, hành trình ứng với hoán vị tập {1, 2, , n} Còn cho trước thành phố xuất phát có tất (n−1)! hành trình Giả sử h=(π(1), π(2), , π(n), π(1)) (π hoán vị) hành trình qua thành phố π(1), , π(n) theo thứ tự quay π(1) hàm mục tiêu m +  + mπ ( n −1)π ( n ) + mπ ( n )π (1) = ∑ mij f(h) = π (1)π ( 2) , (i , j )∈h biểu thị tổng độ dài theo hành trình h, (i,j) ký hiệu chặng đường hành trình, tức cặp thành phố kề theo hành trình h 5.3.4 Ma trận rút gọn: Quá trình tính toán thực ma trận suy từ ma trận trọng số M=(mij) ban đầu phép biến đổi rút gọn để số liệu đơn giản upsoft.blogspot.com Trang 79 lazycatnct@gmail.com www.free4vn.org Phép trừ phần tử nhỏ dòng (t.ư cột) vào tất phần tử dòng (t.ư cột) gọi phép rút gọn dòng (t.ư cột) Phần tử nhỏ gọi số rút gọn dòng (t.ư cột) xét Ma trận với phần tử không âm có phần tử dòng cột gọi ma trận rút gọn ma trận ban đầu Thí dụ 4: 4  1   0 2       5 M = 6 7  M’ =   , →  →  10  4 0 3        0 tất nhiên rút gọn cách khác 4    M = 6 7  → M’’ =  10    0     2 5    5.3.5 Mệnh đề: Phương án tối ưu xét ma trận trọng số ban đầu phương án tối ưu toán xét ma trận rút gọn đảo lại Chứng minh: Có thể xem việc tìm chu trình Hamilton người du lịch toán vận tải đặc biệt dạng bảng Như bảng (ma trận trọng số ma trận rút gọn) ta phải có n ô chọn, ô chọn tượng trưng cho cặp thành phố hành trình cần tìm, dòng cột có ô chọn Mỗi hành trình h tương ứng một−một với tập n ô chọn xác định f(h) tổng trọng số ban đầu ghi n ô chọn xét m' Với hành trình h bất kỳ, ký hiệu f′(h)= ∑ ij giá trị hàm mục (i , j )∈h tiêu ứng với ma trận rút gọn M’ s tổng số rút gọn ta có: f(h) = f′(h)+s Gọi X tập toàn phương án xét giai đoạn đó, h phương án tối ưu toán xét ma trận trọng số ban đầu M, ta có: f(h0) ≤ f(h), ∀h∈X hay f(h0)−s ≤ f(h)−s, ∀h∈X hay f′(h0) ≤ f′(h), ∀h∈X hay h0 phương án tối ưu toán xét ma trận rút gọn M’ 5.3.6 Phân nhánh: Sự phân hoạch tập hợp tất hành trình giai đoạn thành hai tập rời biểu diễn phân nhánh Trên cây, đỉnh biểu diễn thành vòng tròn tượng trưng cho môt tập hành trình Đỉnh X tập toàn hành trình Đỉnh (i,j) biểu diễn tập upsoft.blogspot.com Trang 80 lazycatnct@gmail.com www.free4vn.org hành trình có chứa cặp (i,j) kề Đỉnh (i, j ) biểu diễn tập hành trình không chứa cặp (i,j) kề Tại đỉnh (i,j) lại có phân nhánh: đỉnh (k,l) biểu diễn tập hành trình có chứa cặp (i,j) cặp (k,l), đỉnh (k , l ) biểu diễn tập hành trình có chứa cặp (i,j) không chứa cặp (k,l) Nếu trình diễn đủ lớn cuối có đỉnh biểu diễn hành trình Vấn đề đặt nên chọn cặp thành phố để tiến hành phân nhánh xuất phát từ đỉnh cho trước cây? Một cách tự nhiên ta nên chọn cặp thành phố gần để phân nhánh trước, ma trận rút gọn cặp thành phố (i,j) có m'ij =0 hành trình chứa cặp (i,j) có triển vọng tốt Trên ma trận rút gọn thường có nhiều cặp thành phố thoả mãn điều kiện ( m'ij =0) Để định ta phải tìm cách so sánh Vì thành phố i thiết phải nối liền với thành phố nên hành trình h không chứa (i,j) tức h∈ (i, j ) phải ứng với độ dài hành trình có chứa phần tử nhỏ dòng i không kể m'ij =0 phần tử nhỏ cột j không kể m'ij =0 thành phố j thiết phải nối liền với thành phố trước hành trình Ký hiệu tổng hai phần tử nhỏ θij ta có f′(h) ≥ θij, ∀h∈ (i, j ) Vì lý trên, số θij dùng làm tiêu chuẩn so sánh cặp thành phố (i,j) có m'ij =0 Một cách tổng quát, giai đoạn ta chọn cặp thành phố (i,j) có m'ij =0 ma trận rút gọn có θij lớn để tiến hành phân nhánh từ đỉnh 5.3.7 Tính cận: Với đỉnh phân nhánh, ta phải tính cận giá trị hàm mục tiêu ứng với tập phương án mà đỉnh biểu diễn Cận tính ghi bên đỉnh xét Theo công thức f(h)=f′(h)+s f′(h) ≥ nên f(h) ≥ s, ∀h∈X Vì tổng số rút gọn ma trận ban đầu lấy làm cận đỉnh X Mặt khác, ta lại có f′(h) ≥ θij, ∀h∈ (i, j ) , f(h)=f′(h)+s ≥ θij+s, ∀h∈ (i, j ) Vì tổng θij+s lấy làm cận cho đỉnh (i, j ) Sau chọn (i,j) để phân nhánh xuất phát từ đỉnh X bảng xoá dòng i cột j ô chọn (i,j) Sau bỏ dòng i cột j ma trận M’ lại rút gọn thành ma trận M’’ với s’ tổng số rút gọn, f″(h) giá trị hàm mục tiêu xét M’’ Khi ta có f′(h)=f″(h)+s’, ∀h∈(i,j), f(h)=f′(h)+s=f″(h)+s+s’, ∀h∈(i,j) Do f″(h) ≥ nên f(h) ≥ s+s’, ∀h∈(i,j), nghĩa tổng s+s’ lấy làm cận cho đỉnh (i,j) phân nhánh Nếu tiếp tục phân nhánh cận đỉnh tiếp sau tính toán tương tự, trình lặp Ta cần xem đỉnh xuất phát nhánh giống upsoft.blogspot.com Trang 81 lazycatnct@gmail.com www.free4vn.org đỉnh X ban đầu Để tiết kiệm khối lượng tính toán, người ta thường chọn đỉnh có cận nhỏ để phân nhánh tiếp tục 5.3.8 Thủ tục ngăn chặn hành trình con: Một đường chu trình Hamilton chứa chu trình với số cạnh tạo thành nhỏ n Vì ta đặt m ii=∞ (i=1, , n) để tránh khuyên Với i≠j (i,j) ô chọn phải đặt m’ji=∞ ma trận rút gọn Nếu chọn (i,j) (j,k) n>3 phải đặt m’ji=m’kj=m’ki=∞ Chú ý việc đặt m’ij=∞ tương đương với việc xoá ô (i,j) bảng xem (i,j) ô cấm, nghĩa hai thành phố i j không kề hành trình định kiến thiết Ở giai đoạn trình phải tiến hành thủ tục ngăn chặn trước tiếp tục rút gọn ma trận 5.3.9 Tính chất tối ưu: Quá trình phân nhánh, tính cận, ngăn chặn hành trình con, rút gọn ma trận phải thực có đủ n ô chọn để kiến thiết hành trình Hamilton, nói cách khác phân nhánh xuất đỉnh biểu diễn hành trình xoá hết dòng cột bảng Cận đỉnh cuối độ dài hành trình vừa kiến thiết a) Nếu cận đỉnh không lớn cận đỉnh treo phân nhánh hành trình tối ưu b) Nếu trái lại phải xuất phát từ đỉnh treo có cận nhỏ để phân nhánh tiếp tục kiểm tra xem điều kiện a) có thoả mãn không Thí dụ 5: Xét toán với thành phố, số liệu cho theo bảng sau:  ∞ 27 43 16 30 26  16    ∞ 14 30 25   20 13 ∞ 35   M=   21 16 25 ∞ 18 18  16 12 46 27 48 ∞     23 5 ∞   0 0 Tổng số rút gọn bước đầu s=48 Trong ma trận rút gọn ta có: m’14=m’24=m’36=m’41=m’42=m’56=m’62=m’63=m’65=0 θ14=10, θ24=1, θ36=5, θ41=1, θ42=0, θ56=2, θ62=0, θ63=9, θ65=2 Sau so sánh ta thấy θ14=10 lớn nên ta chọn ô (1,4) để phân nhánh Cận đỉnh (1,4) s+θ14=58 Xoá dòng cột đặt m’41=∞ upsoft.blogspot.com Trang 82 lazycatnct@gmail.com www.free4vn.org M’ = 21 15 ∞  2 13 ∞ 13 41 13 ∞ 22 ∞  1 15  0 2  13  29 24    2  ∞  ∞  27 14 10   13 29 24  ∞ 35   ∞ 2 22 43 ∞  ∞   ∞ 12  15 13 ∞   → M’’ =  ∞  41 22 13 0 11 ∞ 13 41 28 23    2   ∞  ∞  Tổng số rút gọn s’=1 Vậy cận đỉnh (1,4) s+s’=49 Vì 49

Ngày đăng: 19/03/2017, 15:34

TỪ KHÓA LIÊN QUAN

w