You are on page 1of 3

Thuật toán truyền thống Ford-Fulkerson tìm luồng cực đại trên mạng

Thuật toán Ford-Fulkerson


 Đầu vào: Mạng G với nguồn a đích z, khả năng thông qua cij.
 Đầu ra: Luồng cực đại F=(fij) trong mạng, (i,j)  G .
 Các bước:
(1) Khởi tạo luồng xuất phát : fij =0 với mọi (i,j)  G .
(2) Đặt nhãn cho nguồn: Cho nguồn a mang nhãn a(,  ).
(3) Kiểm tra nhãn của đích: Nếu đích z có nhãn thì chuyển sang bước (6), nếu
không sang bước (4).
(4) Xác định đỉnh đánh dấu: Trong số các đỉnh có nhãn và chưa được đánh dấu
chọn đỉnh vi với chỉ số i nhỏ nhất. Nếu không tồn tại đỉnh như vậy thì kết
luận luồng F là cực đại. Ngược lại, gán v=vi và đánh dấu đỉnh v.
(5) Đặt nhãn các đỉnh chưa có nhãn kề đỉnh v: Giả sử  ,   nhãn của đỉnh v.
Xét các cung có dạng (v,w), (w,v) theo thứ tự (v,v0), (v0,v), (v,v1),(v1,v)…
trong đó w chưa được mang nhãn.
Với các cung dạng (v,w), nếu fvw< cvw đặt nhãn đỉnh w là
(v,min , c vw  f vw ), nếu fvw = cvw thì không đặt nhãn đỉnh w.
Với các cung dạng (w,v) nếu fvw >0, đặt nhãn đỉnh w là (v,min , f wv  ),
nếu fwv= 0 thì không đặt nhãn đỉnh w.
Hiệu chỉnh luồng: Giả sử  ,   là nhãn của đích z. Đặt
w0=z, w1= 
Nếu đỉnh của wi là  ' , '  , thì đặt wi+1=  ' . Tiếp tục quá trình cho đến
khi wk=a.
Đến đây ta nhận được đường đi P từ a đến z
P=(a=wk, wk-1, …, w1, w0=z )
Kí hiệu  là nhãn thứ 2 nhỏ nhất của các đỉnh trên P
Ta hiệu chỉnh luồng f trên P như sau:
 f ij   , (i, j )  P
fij= 
 f ij   , (i, j )  P

Sau đó xoá tất cả nhãn của các đỉnh trên P và quay lại bước (2)
Định lý
Nếu tất cả các khả năng thông là số nguyên thì sau hữu hạn bước quá trình giải kết
thúc.
Chứng minh
Theo định lý 1, qua mỗi bước hiệu chỉnh, giá trị luồng tăng lên ít nhất một đơn vị
(do khả năng thông qua nguyên kéo theo delta dương). Mặt khác giá trị luồng bị
chặn bởi tổng khả năng thông qua của các cung đi khỏi đỉnh nguồn. Vì vậy qua
một số hữu hạn bước quá trình giải kết thúc.
Hệ quả
Nếu giá trị thông qua trên mỗi cung là số hữu tỉ thì sau hữu hạn bước quá trình giải
kết thúc.
Chứng minh
Qui đồng mẫu số các giá trị thông qua, giả sử mẫu số chung là N, theo định lý 1,
qua mỗi bước tăng luồng, giá trị luồng tăng lên ít nhất 1/N, mặt khác giá trị luồng
bị chặn bởi tổng khả năng thông qua của tất cả các cung đi ra từ đỉnh nguồn. Vì
vậy qua một số hữu hạn bước, quá trình giải kết thúc.
Nhận xét: Trong trường hợp khả năng thông qua là các số vô tỉ, người ta đã xây
dựng những ví dụ cho thấy thuật toán không có tính dừng, và tệ hơn nữa là trong
một số trường hợp dãy các giá trị luồng xây dựng theo thuật toán là hội tụ thì nó
lại không hội tụ đến giá trị luồng cực đại.Vì vậy việc lựa chọn đường tăng luồng là
một vấn đề hết sức cần thiết để việc áp dụng thuật toán đạt kết quả.
Vấn đề độ phức tạp của thuật toán ngày càng được các nhà tin học quan tâm bởi
tính quan trọng của thuật toán. Edmonds và Karp chỉ ra rằng nếu đường tăng luồng
được chọn là đường ngắn nhất từ đỉnh a đến z thì thuật toán sẽ kết thúc sau không
qua m.n/2 lần sử dụng đường tăng luồng. Nếu để ý rằng, tìm kiếm theo chiều rộng
trên đồ thị đòi hỏi thời gian O(n+m), thì thuật toán thu được sẽ có độ phức tạp tính
toán O(nm2).
Nhờ cách thức tổ chức tìm đường tăng luồng khéo léo hơn, người ta đã xây dựng
thuật toán với độ phức tạp tốt hơn như: O(n2m) (Dinic 1970), O(n3) ( Karzanov
1974)
O(n2m1/2) ( Cherkasky 1977), O(nmlogn) ( Sleater – Tarjan 1980).

Hình 1: Sơ đồ thuật toán tuần tự tìm luồng cực đại trên mạng

You might also like