Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
283,82 KB
Nội dung
http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 67 CHƯƠNG V MỘTSỐ BÀI TOÁNTỐIƯUTRÊN ðỒ THỊ 5.1. ðỒ THỊ CÓ TRỌNG SỐ VÀ BÀITOÁN ðƯỜNG ðI NGẮN NHẤT. 5.1.1. Mở ñầu: Trong ñời sống, chúng ta thường gặp những tình huống như sau: ñể ñi từ ñịa ñiểm A ñến ñịa ñiểm B trong thành phố, có nhiều ñường ñi, nhiều cách ñi; có lúc ta chọn ñường ñi ngắn nhất (theo nghĩa cự ly), có lúc lại cần chọn ñường ñi nhanh nhất (theo nghĩa thời gian) và có lúc phải cân nhắc ñể chọn ñường ñi rẻ tiền nhất (theo nghĩa chi phí), v.v Có thể coi sơ ñồ của ñường ñi từ A ñến B trong thành phố là một ñồ thị, với ñỉnh là các giao lộ (A và B coi như giao lộ), cạnh là ñoạn ñường nối hai giao lộ. Trên mỗi cạnh của ñồ thị này, ta gán mộtsố dương, ứng với chiều dài của ñoạn ñường, thời gian ñi ñoạn ñường hoặc cước phí vận chuyển trên ñoạn ñường ñó, ðồ thị có trọng số là ñồ thị G=(V,E) mà mỗi cạnh (hoặc cung) e∈E ñược gán bởi mộtsố thực m(e), gọi là trọng số của cạnh (hoặc cung) e. Trong phần này, trọng số của mỗi cạnh ñược xét là mộtsố dương và còn gọi là chiều dài của cạnh ñó. Mỗi ñường ñi từ ñỉnh u ñến ñỉnh v, có chiều dài là m(u,v), bằng tổng chiều dài các cạnh mà nó ñi qua. Khoảng cách d(u,v) giữa hai ñỉnh u và v là chiều dài ñường ñi ngắn nhất (theo nghĩa m(u,v) nhỏ nhất) trong các ñường ñi từ u ñến v. Có thể xem một ñồ thị G bất kỳ là một ñồ thị có trọng số mà mọi cạnh ñều có chiều dài 1. Khi ñó, khoảng cách d(u,v) giữa hai ñỉnh u và v là chiều dài của ñường ñi từ u ñến v ngắn nhất, tức là ñường ñi qua ít cạnh nhất. 5.1.2. Bàitoán tìm ñường ñi 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ừ một ñỉnh u 0 cho trước ñến một ñỉnh v bất kỳ của G và tìm ñường ñi ngắn nhất từ u 0 ñến v. Có mộtsố thuật toán tìm ñường ñi ngắn nhất; ở ñây, ta có thuật toándo E. Dijkstra, nhà toán học người Hà Lan, ñề xuất năm 1959. Trong phiên bản mà ta sẽ trình bày, người ta giả sử ñồ thị là vô hướng, các trọng số là dương. Chỉ cần thay ñổi ñôi chút là có thể giải ñược bàitoán tìm ñường ñi ngắn nhất trong ñồ thị có hướng. Phương pháp của thuật toán Dijkstra là: xác ñịnh tuần tự ñỉnh có khoảng cách ñến u 0 từ nhỏ ñến lớn. Trước tiên, ñỉnh có khoảng cách ñến a nhỏ nhất chính là a, với d(u 0 ,u 0 )=0. Trong các ñỉnh v ≠ u 0 , tìm ñỉnh có khoảng cách k 1 ñến u 0 là nhỏ nhất. ðỉnh này phải là một trong các ñỉnh kề với u 0 . Giả sử ñó là u 1 . Ta có: d(u 0, u 1 ) = k 1 . http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 68 Trong các ñỉnh v ≠ u 0 và v ≠ u 1 , tìm ñỉnh có khoảng cách k 2 ñến u 0 là nhỏ nhất. ðỉnh này phải là một trong các ñỉnh kề với u 0 hoặc với u 1 . Giả sử ñó là u 2 . Ta có: d(u 0 ,u 2 ) = k 2 . Tiếp tục như trên, cho ñến bao giờ tìm ñược khoảng cách từ u 0 ñến mọi ñỉnh v của G. Nếu V={u 0 , u 1 , , u n } thì: 0 = d(u 0 ,u 0 ) < d(u 0 ,u 1 ) < d(u 0 ,u 2 ) < < d(u 0 ,u n ). 5.1.3. Thuật toán Dijkstra: procedure Dijkstra (G=(V,E) là ñơn ñồ thị liên thông, có trọng số với trọng số dương) {G có các ñỉnh a=u 0 , u 1 , , u n =z và trọng số m(u i ,u j ), với m(u i ,u j ) = ∞ nếu (u i ,u j ) không là một cạnh trong G} for i := 1 to n L(u i ) := ∞ L(a) := 0 S := V \ {a} u := a while S ≠ ∅ begin for tất cả các ñỉ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ỏ nhất {L(u): ñộ dài ñường ñi ngắn nhất từ a ñến u} S := S \ {u} end Thí dụ 1: Tìm khoảng cách d(a,v) từ a ñến mọi ñỉnh v và tìm ñường ñi ngắn nhất từ a ñến v cho trong ñồ thị G sau. a n b e d g m c h k 1 3 3 2 1 4 2 4 2 6 2 3 5 5 6 3 1 2 3 http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 69 L(a) L(b) L(c) L(d) L(e) L(g) L(h) L(k) L(m) L(n) 5.1.4. ðịnh lý: Thuật toán Dijkstra tìm ñược ñường ñi ngắn nhất từ một ñỉnh cho trước ñến một ñỉnh tuỳ ý trong ñơn ñồ thị vô hướng liên thông có trọng số. Chứng minh: ðịnh lý ñược chứng minh bằng quy nạp. Tại bước k ta có giả thiết quy nạp là: (i) Nhãn của ñỉnh v không thuộc S là ñộ dài của ñường ñi ngắn nhất từ ñỉnh a tới ñỉnh này; (ii) Nhãn của ñỉnh v trong S là ñộ dài của ñường ñi ngắn nhất từ ñỉnh a tới ñỉnh này và ñường ñi này chỉ chứa các ñỉnh (ngoài chính ñỉnh này) không thuộc S. Khi k=0, tức là khi chưa có bước lặp nào ñược thực hiện, S=V \ {a}, vì thế ñộ dài của ñường ñi ngắn nhất từ a tới các ñỉnh khác a là ∞ và ñộ dài của ñường ñi ngắn nhất từ a tới chính nó bằng 0 (ở ñây, chúng ta cho phép ñường ñi không có cạnh). Do ñó bước cơ sở là ñúng. Giả sử giả thiết quy nạp là ñúng với bước k. Gọi v là ñỉnh lấy ra khỏi S ở bước lặp k+1, vì vậy v là ñỉnh thuộc S ở cuối bước k có nhãn nhỏ nhất (nếu có nhiều ñỉnh có nhãn nhỏ nhất thì có thể chọn một ñỉnh nào ñó làm v). Từ giả thiết quy nạp ta thấy rằng 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ − 3 3 2 1 ∞ ∞ ∞ ∞ ∞ − − 5 2 2 ∞ ∞ ∞ ∞ 3 − − − 3 2 5 ∞ ∞ ∞ ∞ − − − − 4 6 3 ∞ ∞ ∞ − − − − − 6 6 4 ∞ ∞ − − − − − − 10 6 6 ∞ − − − − − − − 9 6 8 − − − − − − − 7 8 − − − − − − − − − − 8 http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 70 trước khi vào vòng lặp thứ k+1, các ñỉnh không thuộc S ñã ñược gán nhãn bằng ñộ dài của ñường ñi ngắn nhất từ a. ðỉnh v cũng vậy phải ñược gán nhãn bằng ñộ dài của ñường ñi ngắn nhất từ a. Nếu ñiều này không xảy ra thì ở cuối bước lặp thứ k sẽ có ñường ñi với ñộ dài nhỏ hơn L k (v) chứa cả ñỉnh thuộc S (vì L k (v) là ñộ dài của ñường ñi ngắn nhất từ a tới v chứa chỉ các ñỉnh không thuộc S sau bước lặp thứ k). Gọi u là ñỉnh ñầu tiên của ñường ñi này thuộc S. ðó là ñường ñi với ñộ dài nhỏ hơn L k (v) từ a tới u chứa chỉ các ñỉnh không thuộc S. ðiều này trái với cách chọn v. Do ñó (i) vẫn còn ñúng ở cuối bước lặp k+1. Gọi u là ñỉnh thuộc S sau bước k+1. ðường ñi ngắn nhất từ a tới u chứa chỉ các ñỉnh không thuộc S sẽ hoặc là chứa v hoặc là không. Nếu nó không chứa v thì theo giả thiết quy nạp ñộ dài của nó là L k (v). Nếu nó chứa v thì nó sẽ tạo thành ñường ñi từ a tới v với ñộ dài có thể ngắn nhất và chứa chỉ các ñỉnh không thuộc S khác v, kết thúc bằng cạnh từ v tới u. Khi ñó ñộ dài của nó sẽ là L k (v)+m(v,u). ðiều ñó chứng tỏ (ii) là ñúng vì L k+1 (u)=min(L k (u), L k (v)+m(v,u)). 5.1.5. Mệnh ñề: Thuật toán Dijkstra tìm ñường ñi ngắn nhất từ một ñỉnh cho trước ñến một ñỉnh tuỳ ý trong ñơn ñồ thị vô hướng liên thông có trọng số có ñộ phức tạp là O(n 2 ). Chứng minh: Thuật toán dùng không quá n−1 bước lặp. Trong mỗi bước lặp, dùng không hơn 2(n−1) phép cộng và phép so sánh ñể sửa ñổi nhãn của các ñỉnh. Ngoài ra, một ñỉnh thuộc S k có nhãn nhỏ nhất nhờ không quá n−1 phép so sánh. Do ñó thuật toán có ñộ phức tạp O(n 2 ). 5.1.6. Thuật toán Floyd: Cho G=(V,E) là một ñồ thị có hướng, có trọng số. ðể tìm ñường ñi ngắn nhất giữa mọi cặp ñỉnh của G, ta có thể áp dụng thuật toán Dijkstra nhiều lần hoặc áp dụng thuật toán Floyd ñược trình bày dưới ñây. Giả sử V={v 1 , v 2 , , v n } và có ma trận trọng số là W ≡ W 0 . Thuật toán Floyd xây dựng dãy các ma trận vuông cấp n là W k (0 ≤ k ≤ n) như sau: procedure Xác ñịnh W n for i := 1 to n for j := 1 to n W[i,j] := m(v i ,v j ) {W[i,j] là phần tử dòng i cột j của ma trận W 0 } for k := 1 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] là phần tử dòng i cột j của ma trận W k } 5.1.7. ðịnh lý: Thuật toán Floyd cho ta ma trận W*=W n là ma trận khoảng cách nhỏ nhất của ñồ thị G. http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 71 Chứng minh: Ta chứng minh bằng quy nạp theo k mệnh ñề sau: W k [i,j] là chiều dài ñường ñi ngắn nhất trong những ñường ñi nối ñỉnh v i với ñỉnh v j ñi qua các ñỉnh trung gian trong {v 1 , v 2 , , v k }. Trước hết mệnh ñề hiển nhiên ñúng với k=0. Giả sử mệnh ñề ñúng với k-1. Xét W k [i,j]. Có hai trường hợp: 1) Trong các ñường ñi chiều dài ngắn nhất nối v i với v j và ñi qua các ñỉnh trung gian trong {v 1 , v 2 , , v k }, có một ñường ñi γ sao cho v k ∉ γ. Khi ñó γ cũng là ñường ñi ngắn nhất nối v i với v j ñi qua các ñỉnh trung gian trong {v 1 , v 2 , , v k-1 }, nên theo giả thiết quy nạp, W k-1 [i,j] = chiều dài γ ≤ W k-1 [i,k]+W k-1 [k,j]. Do ñó theo ñịnh nghĩa của W k thì W k [i,j]=W k-1 [i,j]. 2) Mọi ñường ñi chiều dài ngắn nhất nối v i với v j và ñi qua các ñỉnh trung gian trong {v 1 , v 2 , , v k }, ñều chứa v k . Gọi γ = v i v k v j là một ñường ñi ngắn nhất như thế thì v 1 v k và v k v j cũng là những ñường ñi ngắn nhất ñi qua các ñỉnh trung gian trong {v 1 , v 2 , , v k-1 } và W k-1 [i,k]+W k-1 [k,j] = chiều dài(v 1 v k ) + chiều dài(v k v j ) = chiều dài γ < W k-1 [i,j]. Do ñó theo ñịnh nghĩa của W k thì ta có: W k [i,j] = W k-1 [i,k]+W k-1 [k,j] . Thí dụ 2: Xét ñồ thị G sau: Áp dụng thuật toán Floyd, ta tìm ñược (các ô trống là ∞) W = W 0 = 1 22 4 3 14 27 v 1 v 2 v 3 v 4 v 5 v 6 4 7 2 2 4 1 1 2 3 http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 72 W 1 = 1 4292 4 3 14 27 , W 2 = 251 104292 584 3 14 82117 W 3 = 8251 5104292 11584 3 714 1482117 , W 4 = 8251 594282 11584 3 714 1372106 W 5 = 726414 594282 1059747 3 615393 1272969 , W* = W 6 = 726414 574262 1059747 359747 615373 1272969 . Thuật toán Floyd có thể áp dụng cho ñồ thị vô hướng cũng như ñồ thị có hướng. Ta chỉ cần thay mỗi cạnh vô hướng (u,v) bằng một cặp cạnh có hướng (u,v) và (v,u) với m(u,v)=m(v,u). Tuy nhiên, trong trường hợp này, các phần tử trên ñường chéo của ma trận W cần ñặt bằng 0. ðồ thị có hướng G là liên thông mạnh khi và chỉ khi mọi phần tử nằm trên ñường chéo trong ma trận trọng số ngắn nhất W* ñều hữu hạn. 5.2. BÀITOÁ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 là một ñồ thị có hướng, không có khuyên và có trọng số G=(V,E) với V={v 0 , v 1 , , v n } thoả mãn: 1) Mỗi cung e ∈ E có trọng số m(e) là mộtsố nguyên không âm và ñược gọi là khả năng thông qua của cung e. 2) Có một và chỉ một ñỉnh v 0 không có cung ñi vào, tức là deg t (v 0 )=0. ðỉnh v 0 ñược gọi là lối vào hay ñỉnh phát của mạng. 3) Có một và chỉ một ñỉnh v n không có cung ñi ra, tức là deg o (v n )=0. ðỉnh v n ñược gọi là lối ra hay ñỉnh thu của mạng. http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 73 5.2.1.2. ðịnh nghĩa: ðể ñịnh lượng khai thác, tức là 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 ra khái niệm luồng vận tải và nó ñược ñịnh nghĩa như sau. Hàm ϕ xác ñịnh trên tập cung E và nhận giá trị nguyên ñược gọi là luồng vận tải của mạng vận tải G nếu ϕ thoả mãn: 1) ϕ(e) ≥ 0, ∀e ∈ E. 2) ∑ − Γ∈ )( )( ve e ϕ = ∑ + Γ∈ )( )( ve e ϕ , ∀v ∈V, v≠v 0 , v≠v n . Ở ñây, − Γ (v)={e∈E | e có ñỉnh cuối là v}, + Γ (v)={e∈E | e có ñỉnh ñầu là v}. 3) ϕ(e) ≤ m(e), ∀e ∈ E. Ta xem ϕ(e) như là lượng hàng chuyển trên cung e=(u,v) từ ñỉnh u ñến ñỉnh v và không vượt quá khả năng thông qua của cung này. Ngoài ra, từ ñiều kiện 2) ta thấy rằng nếu v không phải là lối vào v 0 hay lối ra v n , thì lượng hàng chuyển tới v bằng lượng hàng chuyển khỏi v. Từ quan hệ 2) suy ra: 4) ∑ + Γ∈ )( 0 )( ve e ϕ = ∑ − Γ∈ )( )( n ve e ϕ =: n v ϕ . ðại lượng n v ϕ (ta còn ký hiệu là n ϕ ) ñược gọi là luồng qua mạng, hay cường ñộ luồng tại ñiểm v n hay giá trị của luồng ϕ. Bàitoán ñặt ra ở ñây là tìm ϕ ñể n v ϕ ñạt giá trị lớn nhất, tức là tìm giá trị lớn nhất của luồng. 5.2.1.3. ðịnh nghĩa: Cho mạng vận tải G=(V,E) và A ⊂ V. Ký hiệu − Γ (A)={(u,v)∈E | v∈A, u∉A}, + Γ (A)={(u,v)∈E | u∈A, v∉A}. ðối với tập cung M tuỳ ý, ñại lượng ϕ(M)= ∑ ∈Me e)( ϕ ñược gọi là luồng của tập cung M. Từ ñiều kiện 2) dễ dàng suy ra hệ quả sau. 5.2.1.4. Hệ quả: Cho ϕ là luồng của mạng vận tải G=(V,E) và A ⊂ V \{v 0 ,v n }. Khi ñó: ϕ( − Γ (A))=ϕ( + Γ (A)). 5.2.2. Bàitoán luồng cực ñại: Cho mạng vận tải G=(V,E). Hãy tìm luồng ϕ ñể ñạt n v ϕ max trên mạng G. Nguyên lý của các thuật toán giải bàitoán tìm luồng cực ñại là như sau. 5.2.2.1. ðịnh nghĩa: Cho A ⊂ V là tập con tuỳ ý không chứa lối vào v 0 và chứa lối ra v n . Tập − Γ (A) ñược gọi là một thiết diện của mạng vận tải G. ðại lượng m( − Γ (A))= ∑ − Γ∈ )( )( Ae em ñược gọi là khả năng thông qua của thiết diện − Γ (A). http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 74 Từ ñịnh nghĩa thiết diện và khả năng thông qua của nó ta nhận thấy rằng: mỗi ñơn vị hàng hoá ñược chuyển từ v 0 ñến v n ít nhất cũng phải một lần qua một cung nào ñó của thiết diện − Γ (A). Vì vậy, dù luồng ϕ và thiết diện − Γ (A) như thế nào ñi nữa cũng vẫn thoả mãn quan hệ: ϕ n ≤ m( − Γ (A)). Do ñó, nếu ñối với luồng ϕ và thiết diện W mà có: ϕ n = m(W) thì chắc chắn rằng luồng ϕ ñạt giá trị lớn nhất và thiết diện W có khả năng thông qua nhỏ nhất. 5.2.2.2. ðịnh nghĩa: Cung e trong mạng vận tải G với luồng vận tải ϕ ñược goi là cung bão hoà nếu ϕ(e)=m(e). Luồng ϕ của mạng vận tải G ñược gọi là luồng ñầy nếu mỗi ñường ñi từ v 0 ñến v n ñều chứa ít nhất một cung bão hoà. Từ ñịnh nghĩa trên ta thấy rằng, nếu luồng ϕ trong mạng vận tải G chưa ñầy thì nhất ñịnh tìm ñược ñường ñi α từ lối vào v 0 ñến lối ra v n không chứa cung bão hoà. Khi ñó ta nâng luồng ϕ thành ϕ’ như sau: ∉ ∈+ = .)( ,1)( )(' αϕ αϕ ϕ ekhie ekhie e Khi ñó ϕ’ cũng là một luồng, mà giá trị của nó là: ϕ’ n = ϕ n +1 > ϕ n . Như vậy, ñối với mỗi luồng không ñầy ta có thể nâng giá trị của nó và nâng cho tới khi nhận ñược một luồng ñầy. Tuy vậy, thực tế cho thấy rằng có thể có một luồng ñầy, nhưng vẫn 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 của luồng. 5.2.2.3. Thuật toán Ford-Fulkerson: ðể tìm luồng cực ñại của mạng vận tải G, ta xuất phát từ luồng tuỳ ý ϕ của G, rồi nâng luồng lên ñầy, sau ñó áp dụng thuật toán Ford-Fulkerson hoặc ta có thể áp dụng thuật toán Ford-Fulkerson trực tiếp ñối với luồng ϕ. Thuật toán gồm 3 bước: Bước 1 (ñánh dấu ở ñỉnh của mạng): Lối vào v 0 ñược ñánh dấu bằng 0. 1) Nếu ñỉnh v i ñã ñược ñánh dấu thì ta dùng chỉ số +i ñể ñánh dấu cho mọi ñỉnh y chưa ñược ñánh dấu mà (v i ,y)∈E và cung này chưa bão hoà (ϕ(v i ,y)<m(v i ,y)). 2) Nếu ñỉnh v i ñã ñược ñánh dấu thì ta dùng chỉ số −i ñể ñánh dấu cho mọi ñỉnh z chưa ñược ñánh dấu mà (z,v i )∈E và luồng của cung này dương (ϕ(z,v i )>0). http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 75 Nếu với phương pháp này ta ñánh dấu ñược tới lối ra v n thì trong G tồn tại giữa v 0 và v n một xích α, mọi ñỉnh ñều khác nhau và ñược ñánh dấu theo chỉ số của ñỉnh liền trước nó (chỉ sai khác nhau về dấu). Khi ñó chắc chắn ta nâng ñược giá trị của luồng. Bước 2 (nâng giá trị của luồng): ðể nâng giá trị của luồng ϕ, ta ñặt: ϕ’(e) = ϕ(e), nếu e∉α, ϕ’(e) = ϕ(e)+1, nếu e∈α ñược ñịnh hướng theo chiều của xích α ñi từ v o ñến v n , ϕ’(e) = ϕ(e)−1, nếu e∈α ñược ñịnh hướng ngược với chiều của xích α ñi từ v o ñến v n . ϕ’ thoả mãn các ñiều kiện về luồng, nên ϕ’ là một luồng và ta có: ϕ’ n = ϕ n +1. Như vậy, ta ñã nâng ñược luồng lên một ñơn vị. Sau ñó lặp lại một vòng mới. Vì khả năng thông qua của các cung ñều hữu hạn, nên quá trình phải dừng lại sau mộtsố hữu hạn bước. Bước 3: Nếu với luồng ϕ 0 bằng phương pháp trên ta không thể nâng giá trị của luồng lên nữa, nghĩa là ta không thể ñánh dấu ñược ñỉnh v n , thì ta nói rằng quá trình nâng luồng kết thúc và ϕ 0 ñã ñạt giá trị cực ñại, ñồng thời gọi ϕ 0 là luồng kết thúc. Khi mạng vận tải G=(V,E) ñạt tới luồng ϕ 0 , thì bước tiếp theo ta không thể ñánh dấu ñược tới lối ra v n . Trên cơ sở hiện trạng ñược ñánh dấu tại bước này, ta sẽ chứng minh rằng luồng ϕ 0 ñã ñạt ñược giá trị cực ñại. 5.2.2.4. Bổ ñề: Cho luồng ϕ của mạng vận tải G=(V,E) và A ⊂ V, chứa lối ra v n và không chứa lối vào v 0 . Khi ñó: ))(())(( AA n v +− Γ−Γ= ϕϕϕ . Chứng minh: ðặt A 1 =A \{v n }. Theo Hệ quả 5.2.1.4, ta có: ))(())(( 11 AA +− Γ=Γ ϕϕ (1). ðặt C 1 ={(a,v n )∈E | a∉A}. Khi ñó ∪Γ=Γ −− )()( 1 AA C 1 và ∩Γ − )( 1 A C 1 = ∅, nên ϕϕϕ +Γ=Γ −− ))(())(( 1 AA (C 1 ) (2). ðặt C 2 ={(b,v n )∈E | b∈A 1 }. Khi ñó C 2 ={(b,v n )∈E | b∈A}, ∪Γ=Γ ++ )()( 1 AA C 2 và ∩Γ + )(A C 2 = ∅, nên ϕϕϕ −Γ=Γ ++ ))(())(( 1 AA (C 2 ) (3). y v j z v n v i v 0 0 e +i -j http://ebook.here.vn Tải miễn phí ðề thi, eBook, Tài liệu học tập 76 Ngoài ra, )( n v − Γ = C 1 ∪C 2 và C 1 ∩C 2 = ∅, nên n v ϕ = ))(( n v − Γ ϕ = ϕ (C 1 )+ ϕ (C 2 ) (4). Từ (1), (2), (3) và (4), ta có: ))(())(( AA n v +− Γ−Γ= ϕϕϕ . 5.2.2.5. ðịnh lý (Ford-Fulkerson): Trong mạng vận tải G=(V,E), giá trị lớn nhất của luồng bằng khả năng thông qua nhỏ nhất của thiết diện, nghĩa là ))((minmax ,, 0 Am AvAvVA v n n − ∈∉⊂ Γ= ϕ ϕ . Chứng minh: Giả sử trong mạng vận tải G, ϕ 0 là luồng cuối cùng, mà sau ñó bằng phương pháp ñánh dấu của thuật toán Ford-Fulkerson không ñạt tới lối ra v n . Trên cơ sở hiện trạng ñược ñánh dấu lần cuối cùng này, ta dùng B ñể ký hiệu tập gồm các ñỉnh của G không ñược ñánh dấu. Khi ñó v 0 ∉B, v n ∈B. Do ñó − Γ (B) là một thiết diện của mạng vận tải G và theo Bổ ñề 5.2.2.4, ta có: ))(())(( 000 BB n v +− Γ−Γ= ϕϕϕ (1). ðối với mỗi cung e=(u,v)∈ − Γ (B) thì u∉B và v∈B, tức là u ñược ñánh dấu và v không ñược ñánh dấu, nên theo nguyên tắc ñánh dấu thứ nhất, e ñã là cung bão hoà: ϕ 0 (e) = m(e). Do ñó, ))(()()())(( )()( 00 BmemeB BeBe − Γ∈Γ∈ − Γ===Γ ∑ ∑ −− ϕϕ (2). ðối với mỗi cung e=(s,t)∈ + Γ (B) thì s∈B và t∉B, tức là s không ñược ñánh dấu và t ñược ñánh dấu, nên theo nguyên tắc ñánh dấu thứ hai: ϕ 0 (e) = 0. Do ñó, 0)())(( )( 00 ==Γ ∑ + Γ∈ + Be eB ϕϕ (3). Từ (1), (2) và (3) ta suy ra: ))(( 0 Bm n v − Γ= ϕ . Vì vậy, 0 n v ϕ là giá trị lớn nhất của luồng ñạt ñược, còn m( − Γ (B)) là giá trị nhỏ nhất trong các khả năng thông qua của các thiết diện thuộc mạng vận tải G. Thí dụ 3: Cho mạng vận tải như hình dưới ñây với khả năng thông qua ñược ñặt trong khuyên tròn, luồng ñược ghi trên các cung. Tìm luồng cực ñại của mạng này. Luồng ϕ có ñường ñi (v 0 ,v 4 ), (v 4 ,v 6 ), (v 6 ,v 8 ) gồm các cung chưa bão hoà nên nó chưa ñầy. Do ñó có thể nâng luồng của các cung này lên một ñơn vị, ñể ñược ϕ 1 . Do mỗi ñường xuất phát từ v 0 ñến v 8 ñều chứa ít nhất một cung bão hoà, nên luồng ϕ 1 là luồng ñầy. Song nó chưa phải là luồng cực ñại. Áp dụng thuật toán Ford-Fulkerson ñể nâng luồng ϕ 1 . [...]... phương án t i ưu c a bàitoán xét trên ma tr n rút g n và ñ o l i Ch ng minh: Có th xem vi c ñi tìm chu trình Hamilton c a ngư i du l ch như là m t bàitoán v n t i ñ c bi t dư i d ng b ng Như v y thì trong b ng (ma tr n tr ng s ho c ma tr n rút g n) ta ph i có ñúng n ô ch n, m i ô ch n tư ng trưng cho m t c p thành ph trên hành trình c n tìm, trên m i dòng và m i c t có ñúng m t ô ch n M i hành trình h... 5 Tìm W* b ng cách áp d ng thu t toán Floyd vào ñ th sau: 8 B 3 C 2 20 A 13 F D 4 3 1 6 5 8 E 6 Gi i bàitoán m ng v n t i sau b ng thu t toán Ford-Fulkerson v i lu ng v n t i kh i ñ u b ng 0 v1 6 4 2 v5 4 8 2 v0 v3 4 4 4 2 v4 v7 3 8 v2 v6 6 85 http://ebook.here.vn T i mi n phí ð thi, eBook, Tài li u h c t p 7 Gi i bàitoán m ng v n t i sau b ng thu t toán Ford-Fulkerson v i lu ng v n t i kh i ñ... hành trình ñ nh ki n thi t m i giai ño n c a quá trình ñ u ph i ti n hành th t c ngăn ch n này trư c khi 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 hi n cho ñ n khi nào có ñ n ô ch n ñ ki n thi t m t hành trình Hamilton, nói cách khác là cho ñ n khi trên cây phân nhánh ñã xu t hi n m t ñ nh ch bi u di n m t hành trình. .. theo nghĩa v i m i i, j=1, 2, , n, i≠j, luôn có (i,j), (j,i)∈E Bàitoán tr thành tìm chu trình Hamilton có ñ dài ng n nh t trong G Bàitoán n i ti ng này ñã có l i gi i b ng cách s d ng phương pháp “nhánh và c n” 5.3.2 Phương pháp nhánh và c n: Gi s trong m t t p h u h n các phương án c a bài toán, ta ph i ch n ra ñư c m t phương án t i ưu theo m t tiêu chu n nào ñó (thí d làm cho hàm m c tiêu ñ t giá... hay h0 là phương án t i ưu c a bài toán xét trên ma tr n rút g n M’ 80 http://ebook.here.vn T i mi n phí ð thi, eBook, Tài li u h c t p 5.3.6 Phân nhánh: S phân ho ch t p h p t t c các hành trình m t giai ño n nào ñó thành hai t p con r i nhau ñư c bi u di n b ng s phân nhánh c a m t cây Trên cây, m i ñ nh ñư c bi u di n thành m t vòng tròn và s tư ng trưng cho môt t p hành trình nào ñó ð nh X ñ u... các t p con trong quá trình “phân nhánh nh phân” Vì v y, phương pháp này mang tên nhánh và c n 5.3.3 Cơ s lý lu n c a phép toán: N u không xác ñ nh thành ph xu t phát thì có n! hành trình, m i hành trình ng v i m t hoán v nào ñó c a t p {1, 2, , n} Còn n u cho trư c thành ph xu t phát thì có t t c là (n−1)! hành trình Gi s h=(π(1), π(2), , π(n), π(1)) (π là m t hoán v ) là m t hành trình qua các thành... tiên là t p toàn b các hành trình ð nh (i,j) bi u di n t p các hành trình có ch a c p (i,j) k nhau ð nh (i, j ) bi u di n t p các hành trình không ch a c p (i,j) k nhau T i ñ nh (i,j) l i có s phân nhánh: ñ nh (k,l) bi u di n t p các hành trình có ch a c p (i,j) và c p (k,l), ñ nh (k , l ) bi u di n t p các hành trình có ch a c p (i,j) nhưng không ch a c p (k,l) N u quá trình di n ra ñ l n thì cu i... nhánh thì c n dư i c a các ñ nh ti p sau ñư c tính toán tương t , vì ñây là m t quá trình l p Ta ch c n xem ñ nh xu t phát c a các nhánh gi ng như ñ 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 dư i nh nh t ñ 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 ñi ho c chu trình Hamilton không th ch a chu trình con v i s c nh t o thành nh hơn n Vì v y... ( n ) + mπ ( n )π (1) = ∑ mij , (i , j )∈h s bi u th t ng ñ dài ñã ñi theo hành trình h, trong ñó (i,j) ký hi u m t ch ng ñư ng c a hành trình, t c là m t c p thành ph k nhau theo hành trình h 79 http://ebook.here.vn T i mi n phí ð thi, eBook, Tài li u h c t p 5.3.4 Ma tr n rút g n: Quá trình tính toán s ñư c th c hi n trên các ma tr n suy t ma tr n tr ng s M=(mij) ban ñ u b ng nh ng phép bi n ñ i... dư i c a ñ nh cu i cùng này chính là ñ dài c a hành trình v a ki n thi t a) N u c n dư i c a ñ nh này không l n hơn các c n dư i c a m i ñ nh treo trên cây phân nhánh thì hành trình ñó là t i ưu b) N u trái l i thì ph i xu t phát t ñ nh treo nào có c n dư i nh hơn ñ phân nhánh ti p t c và ki m tra xem ñi u ki n a) có tho mãn không Thí d 5: Xét bàitoán v i 6 thành ph , các s li u cho theo b ng sau: . Tài liệu học tập 67 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, chúng ta thường gặp những tình. Mệnh ñề: Phương án tối ưu xét trên ma trận trọng số ban ñầu cũng là phương án tối ưu của bài toán xét trên ma trận rút gọn và ñảo lại. Chứng minh: Có thể xem việc ñi tìm chu trình Hamilton của. nói chung là tối ưu. Nếu không thì lặp lại quá trình phân chia ñể kiểm tra và sau một vài bước, ta sẽ ñược phương án tối ưu. Người ta thường mô tả quá trình phân chia ñó bằng một “cây có gốc”