BÀI 15
Chương 9
Mng vn ti
Khi điu hành mt h thng vn ti, bao gi chúng ta cũng mong mun tìm
ra mt phương án vn chuyn được nhiu hàng hoá nht. Chương này ca cun
sách s mô hình hoá toán hc h thng vn ti và xây dng thut toán hu hiu ch
ra phương án ti ưu y.
9.1. Bài toán lung ln nht
Bài toán lung ln nht là mt trong nhng bài toán ti ưu ca Lý thuyết Đồ
th, được đề xut vào đầu nhng năm 1950 và tr nên ni tiếng vi thut toán Ford
- Fulkerson.
9.1.1. Mng vn ti
Định nghĩa 9.1: Mng vn ti là mt đồ th có hướng G = (V, E) không có đỉnh
nút, trong đó:
1) có duy nht mt đỉnh x0 không có cnh đi vào, F-1(x0) = (đỉnh phát),
2) có duy nht mt đỉnh z không có cnh đi ra, F(z) = (đỉnh thu),
3) mi cnh e được gán mt s nguyên không âm c(e) và gi là kh năng
thông qua ca cnh.
9.1.2. Lung qua mng
Vi mt mng G = (V, E), ta ký hiu:
W-(x) = { (a, x) E a V} - đó là tp các cnh đi vào đỉnh x.
W+(x) = { (x, b) E b V} - đó là tp các cnh đi ra khi đỉnh x.
Định nghĩa 9.2:
Hàm t : E N được gi là mt lung đi qua mng (G, c) nếu:
a) e E : t(e) c(e) - lung trên mi cnh không được vượt quá kh năng
thông qua ca cnh đó.
b) x
x0 z : t(W-(x)) = t(W+(x)) - lung trên các đỉnh phi cân bng.
Vi tp B V, ta ký hiu:
W
-(B) = { (a, b) E a B, b B } - tp cnh t ngoài B đi vào B,
W
+(B) = { (a, b) E a B, b B } - tp cnh t B đi ra khi B.
Hình 9.1. Tp cnh vào và ra ca mt tp đỉnh
Hin nhiên, nếu tp con các đỉnh B không cha x0z thì:
t(W-(B)) = t(W+(B)).
Tht vy, theo tính cht b) ca lung:
∈∈
+ =
BtBt
xWtxWt ))(())(( .
Trong s các cnh k vi đỉnh x nếu có đỉnh đầu và đỉnh cui đều nm trong tp
B thì nó s có mt c hai vế ca đẳng thc đúng mt ln, do đó có th gin ước.
Sau khi gin ước, tng vế trái ch còn li các cnh mà đỉnh đầu ngoài B đỉnh
cui trong B, tc là tp W-(B). Tương t, tng vế phi ch còn li các cnh mà
đỉnh đầu trong B đỉnh cui ngoài B, tc là tp W+(B).
Hình 9.2. Các cnh k vi mt tp đỉnh
T nhn xét trên, nếu ly B = V \ {x0, z} thì
- khi G không có cnh (x0, z) ta có:
W
+(x0) = W-(B)
W
-(z) = W+(B)
- và khi G có cnh (x0, z) thì:
W
+(x0) = W-(B) (x0, z)
W
-(z) = W+(B) (x0, z)
Suy ra:
t(W+(x0)) = t(W-(z))
Ký hiu: tz = t(W+(x0)) (cng thêm t(x0,z), nếu có) và gi là giá tr ca lung qua
mng G.
9.1.3. Bài toán lung ln nht
Bài toán: Cho mng vn ti (G, c). Hãy tìm lung t qua mng sao cho tz đạt giá
tr ln nht.
Để gii quyết bài toán này, ta dùng thut toán Ford - Fulkerson sau đây.
9.1.4. Thut toán Ford - Fulkerson tìm lung ln nht
Ta đánh s đỉnh ca mng là: 0, 1, ... , n sao cho đỉnh 0 là x0đỉnh n z.
Thut toán 9.1 (Tìm lung ln nht):
Ban đầu cho lung t = 0 trên các cnh.
Bước 1: Đánh du các đỉnh ca mng.
Ln lượt đánh du cho các đỉnh ca mng như sau:
1) Đỉnh x0 được đánh du bng s 0.
2) Nếu đỉnh x đã được đánh du, có cnh (x, y) vi đỉnh cui y chưa được
đánh du và t(x,y) < c(x,y) thì đánh du cho đỉnh y+x.
3) Nếu đỉnh y đã được đánh du, có cnh (x, y) vi đỉnh đầu x chưa được
đánh du và t(x,y) > 0 thì đánh du đỉnh x-y.
4) Nếu đỉnh thu z được đánh du là +k vi k nào đó thì có nghĩa là có mt
đường đi vô hướng t x0 đến z có dng < x0 , i1 , i2 , ... , k , z >
Hình 9.3. Mt đường đi vô hướng t đỉnh phát đến đỉnh thu
trên đó mi đỉnh đã được đánh du +j hoc -j . C th là:
d(x0) = 0
d(i
1) = +0
d(i
2) = ± i1
. . . . . . . . .
d(z) = +k
Vic đánh du các đỉnh s giúp ta khôi phc đường đi khi đã đến đỉnh z.
Bước 2: Nâng giá tr ca lung.
Ta xây dng lung mi t' như sau:
1) Nếu cnh e không thuc đường đi trên thì lung gi nguyên, t'(e) := t(e).
2) Nếu cnh e thuc đường đi này và cùng chiu vi chiu t x0 ti z, khi đó
trên cnh này t(e) < c(e)) , thì ta đặt: t'(e) := t(e) + 1.
3) Nếu cnh e thuc đường đi này và ngược chiu vi chiu t x0 ti z , khi
đó trên cnh này t(u) > 0 , thì ta đặt: t'(e) := t(e) - 1.
D thy rng t' vn là mt lung và: t'z = tz + 1, nghĩa là ta đã nâng lung
thêm 1.
Lp li hai bước trên đây chng nào còn có th để ci tiến lung t.
Ta s chng minh rng, khi thut toán kết thúc thì lung cui cùng s
lung ln nht qua mng. Trước hết ta có:
B đề 9.2: Nếu t là mt lung qua mng thì:
tz
min { c(W-(B))B cha z không cha x0}.
Chng minh:
Gi s B là mt tp đỉnh cha z nhưng không cha x0. Xét lung t.
Đặt: B1 = B \ {z}. Thế thì, B = B1 {z}. Vì tp B1 không cha x0 z nên theo
mt nhn xét trên, ta có: t(W-(B1)) = t(W+(B1)).
W
-(B) = {(a, b) Ea B, b B } = W-(B1) W1
trong đó: W1 = { (a, z) E a B }.
Hai tp W-(B1) và W1 ri nhau cho nên:
t(W-(B)) = t(W-(B1)) + t(W1).
Vy thì: t(W-(B1)) = t(W-(B)) - t(W1) (1)
Hình 9.4. Các tp cnh vào và ra ca B1
Mt khác,
W
+(B) = {(a, b) E a B, b B } = W+(B1) \ W2
trong đó: W2 = {(a, z) Ea B1}.
Vì W2 W+(B1) cho nên:
t(W+(B)) = t(W+(B1)) - t(W2).
Thế thì, t(W+(B1)) = t(W+(B)) + t(W2) (2)
T (1) và (2) suy ra:
t(W-(B)) - t(W1) = t(W+(B)) + t(W2).
Vì W1 W2 = và W1 W2 = W-(z) nên
t(W-(B)) - t(W+(B)) = t(W1) + t(W2) = tz.
Vy vi t là mt lung nào đó thì:
tz = t(W-(B)) - t(W+(B)) vi mi tp B cha z và không cha x0.
Do đó:
tz t(W-(B)) c(W-(B)).
B đề được chng minh.
Tp cnh W-(B) được gi là mt thiết din ca mng. Theo B đề 9.2 thì giá
tr ca mi lung qua mng không vượt quá kh năng thông qua ca mi thiết din
ca mng.
Ta tr li chng minh tính ln nht ca lung khi thut toán dng.
Định lý 9.3: Khi thut toán Ford - Fulkerson dng thì lung cui cùng nhn được
s là lung ln nht vi giá tr ca lung qua mng là:
tz = min { c(W-(B)) B cha z và không cha x0}.
Chng minh:
Khi thut toán dng có nghĩa là không đánh du được đến đỉnh z.
Ký hiu B là tp các đỉnh không được đánh du.
Tp B không cha đỉnh x0 vì ta luôn đánh du t x0. Tp B cha đỉnh z.
Theo B đề 9.2 thì:
tz = t(W-(B)) - t(W+(B)).
- Nếu cnh (a, b) W-(B) thì a được đánh du (vì a nm ngoài B) và b không
được đánh du (b thuc B). Điu đó có nghĩa là: t((a,b)) = c((a,b)).
- Nếu cnh (a, b) W
+(B) thì b được đánh du (vì b nm ngoài B), và a
không được đánh du (a thuc B). Do vy, t((a,b)) = 0.
Vy thì tz = c(W-(B)) - 0 = c(W-(B)) min c(W-(B)) tz.