BÀI TOÁN LUỒNG LỚN NHẤTtoán tối ưu của Lý thuyết Đồ thị, được đề xuất vào đầu những năm 1950 và trở nên nổi tiếng với thuật toán Ford - Fulkerson... - Mỗi cạnh e được gán một số nguyên k
Trang 1CHƯƠNG 9MẠNG VẬN TẢI
Trang 2NỘI DUNG
Trang 39.1 BÀI TOÁN LUỒNG LỚN NHẤT
toán tối ưu của Lý thuyết Đồ thị, được đề xuất vào
đầu những năm 1950 và trở nên nổi tiếng với thuật toán Ford - Fulkerson
Trang 4- Mỗi cạnh e được gán một số nguyên không âm c(e)
và gọi là khả năng thông qua của cạnh.
Trang 7LUỒNG QUA MẠNG (tiếp)
mạng (G, c) nếu:
a) e E : t(e) c(e) - luồng trên mỗi cạnh không
được vượt quá khả năng thông qua của cạnh đó
b) x x 0 và z : t(W-(x)) = t(W-(x)) - luồng trên
các đỉnh phải cân bằng
Trang 9TÍNH CHẤT CỦA LUỒNG (tiếp)
Hình 9.1 Tập cạnh vào và ra của một tập đỉnh
Trang 10TÍNH CHẤT CỦA LUỒNG (tiếp)
thì: t(W-(B)) = t(W+ (B))
Theo tính chất b) của luồng:
t (W-(x)) = t (W+(x) )
Cạnh kề với đỉnh x nếu có đỉnh đầu và đỉnh cuối đều
nằm trong tập B thì nó sẽ có mặt ở cả hai vế của
đẳng thức đúng một lần, do đó có thể giản ước
Trang 11TÍNH CHẤT CỦA LUỒNG (tiếp)
Sau khi giản ước, tổng ở vế trái chỉ còn lại các cạnh
mà đỉnh đầu ở ngoài B đỉnh cuối trong B, tức là tập
đỉnh đầu ở trong B đỉnh cuối ngoài B, tức là tập W+(B).
B
Hình 9.2 Các cạnh kề với một tập đỉnh
Trang 12TÍNH CHẤT CỦA LUỒNG (tiếp)
Lấy B = V \ {x 0 , z} thì:
- Khi G không có cạnh (x 0 , z) ta có:
W+(x 0) = W-(B) ; W-(z) = W+(B)
- Và khi G có cạnh (x 0 , z) thì:
W+ (x 0) = W-(B) (x 0 ,z) ; W-(z) = W+(B) (x 0 ,z)
Suy ra: t(W+(x 0 )) = t(W-(z)).
Trang 13GIÁ TRỊ CỦA LUỒNG
Ký hiệu: tz = t(W+(x 0 )) (cộng thêm t(x 0 ,z), nếu có) và
gọi là giá trị của luồng qua mạng G.
Trang 149.1 BÀI TOÁN LUỒNG LỚN NHẤT (tiếp)
t qua mạng sao cho tz đạt giá trị lớn nhất
Fulkerson
Trang 159.2 THUẬT TOÁN FORD - FULKERSON
Ta đánh số đỉnh của mạng là: 0, 1, , n sao cho đỉnh 0 là x 0 và đỉnh n là z
Ban đầu cho luồng t = 0 trên các cạnh
Thuật toán tiến hành hai bước:
Bước 1: Đánh dấu các đỉnh của mạng Bước 2: Nâng giá trị của luồng
Trang 16BƯỚC 1
Lần lượt đánh dấu cho các đỉnh của mạng như sau:
- Đỉnh x 0 được đánh dấu bằng số 0
- Nếu đỉnh x đã được đánh dấu, có cạnh (x, y) với
đỉnh cuối y chưa được đánh dấu và t(x,y) < c(x,y) thì đánh dấu cho đỉnh y là +x
- Nếu đỉnh y đã được đánh dấu, có cạnh (x, y) với đỉnh đầu x chưa được đánh dấu và t(x,y) > 0 thì
đánh dấu đỉnh x là -y.
Trang 18BƯỚC 1 (tiếp)
Cụ thể là: d(x 0 ) = 0
d(i 1 ) = +0
d(i 2 ) = i 1
Trang 19BƯỚC 2
Xây dựng luồng mới t' như sau:
- Nếu cạnh e không thuộc đường đi trên thì giữ
nguyên luồng, t'(e) := t(e).
- Nếu cạnh e thuộc đường đi này và cùng chiều với chiều từ x 0 tới z, thì tăng luồng: t'(e) := t(e) + 1
- Nếu cạnh e thuộc đường đi này và ngược chiều
với chiều từ x 0 tới z thì giảm luồng: t'(e) := t(e) - 1.
Trang 20
BƯỚC 2 (tiếp)
Dễ thấy rằng t' vẫn là một luồng và: t'z = tz + 1,
nghĩa là ta đã nâng luồng thêm 1
Lặp lại hai bước trên đây chừng nào còn có thể để cải
tiến luồng t.
cuối cùng sẽ là luồng lớn nhất đi qua mạng
Trang 219.2 THUẬT TOÁN FORD - FULKERSON
(tiếp)
Bổ đề 9.1: Nếu t là một luồng qua mạng thì:
tz min { c(W-(B))B chứa z nhưng không chứa x 0}
Trang 229.2 THUẬT TOÁN FORD - FULKERSON (tiếp)
Trang 239.2 THUẬT TOÁN FORD - FULKERSON (tiếp)
Trang 249.2 THUẬT TOÁN FORD - FULKERSON (tiếp)
Trang 259.2 THUẬT TOÁN FORD - FULKERSON (tiếp)
Trang 269.2 THUẬT TOÁN FORD - FULKERSON (tiếp)
mạng
đều không vượt quá khả năng thông qua của mọi thiết diện của mạng
Trang 279.2 THUẬT TOÁN FORD - FULKERSON (tiếp)
Định lý 9.1 Khi thuật toán Ford - Fulkerson dừng thì
luồng cuối cùng nhận được sẽ là luồng lớn nhất với giá trị của luồng qua mạng là:
tz = min { c(W-(B))B chứa z và không chứa x 0 }
Trang 289.2 THUẬT TOÁN FORD - FULKERSON (tiếp)
Chứng minh: Khi thuật toán dừng có nghĩa là ta
không đánh dấu được đến đỉnh z
Ký hiệu B là tập các đỉnh không được đánh dấu
Theo Bổ đề 9.1 thì:
tz = t(W-(B)) - t(W+(B))
Trang 299.2 THUẬT TOÁN FORD - FULKERSON (tiếp)
Nếu cạnh (a, b) W-(B) thì a được đánh dấu và b
không được đánh dấu Thế thì: t((a,b)) = c((a,b)).
không được đánh dấu Do đó, t((a,b)) = 0 Vậy thì:
tz = c(W-(B)) - 0 = c(W-(B))
min { c(W-(B)) } tz