Professional Documents
Culture Documents
2 6MaxFlow ForStudent
2 6MaxFlow ForStudent
LÝ THUYẾT ĐỒ THỊ
Graph Theory
Nội dung phần 2: Lý thuyết đồ thị
Chương 1. Các khái niệm cơ bản
Chương 2. Biểu diễn đồ thị
Chương 3. Duyệt đồ thị
Chương 4. Cây và cây khung của đồ thị
Chương 5. Bài toán đường đi ngắn nhất
Chương 6. Bài toán luồng cực đại trong mạng
3
Nội dung chi tiết
6.1. Phát biểu bài toán và các ứng dụng
6.2. Lát cắt
6.3. Đồ thị tăng luồng và Đường tăng luồng
6.4. Thuật toán Ford-Fulkerson
6.5. Thuật toán Edmond-Karp
6.6. Một số ứng dụng
MẠNG (Network)
Mạng là đồ thị có hướng G = (V,E) :
• Có duy nhất một đỉnh s không có cung đi vào gọi là đỉnh
phát (nguồn) và duy nhất một đỉnh t không có cung đi ra gọi
là đỉnh thu (đích).
• Mỗi cung e của G được gắn với một số không âm c(e) được
gọi là khả năng thông qua của e.
Ví dụ:
v 3
6
1
7 t
s 3
w
1 9 5
5
u z
2
LUỒNG TRONG MẠNG
Định nghĩa. Luồng f trong mạng G=(V,E) là phép gán số f(e) cho mỗi cạnh e ( f(e)
được gọi là luồng trên cạnh e) thoả mãn các điều kiện:
1) Hạn chế về khả năng thông qua (Capacity Rule):
å f (e) = å f (e )
eÎE - ( v ) eÎE + ( v )
trong đó E-(v) và E+(v) tương ứng là tập các cung đi vào và đi ra khỏi đỉnh v.
v 1/ 3
2/ 6
Các điều kiện 1) và 2) được thoả 1/ 1 3/
7 t
mãn => f là luồng trên mạng. s 3/ 3
w
1/1 2/ 9 4/ 5
3/5
u z
2/ 2
LUỒNG TRONG MẠNG
Định nghĩa. Luồng f trong mạng G=(V,E) là phép gán số f(e) cho mỗi cạnh e ( f(e)
được gọi là luồng trên cạnh e) thoả mãn các điều kiện:
1) Hạn chế về khả năng thông qua (Capacity Rule):
å f (e) = å f (e )
eÎE - ( v ) eÎE + ( v )
trong đó E-(v) và E+(v) tương ứng là tập các cung đi vào và đi ra khỏi đỉnh v.
• Trong 2 số viết bên mỗi cạnh: giá trị luồng trên cạnh là số màu đỏ,
số còn lại là khả năng thông qua.
• Các điều kiện 1) và 2) được thoả mãn => f là luồng trên mạng.
(*)
• Giá trị luồng là: val ( f ) = f (e) =å +
f (e) å
eÎE ( s ) eÎE - ( t )
cổng, registers,
mạng điện dây dẫn dòng điện
processors
cơ khí joints rods, beams, springs heat, energy
hồ chứa, trạm bơm, dòng nước,
thuỷ lợi đường ống
nguồn nước chất lỏng
tài chính nhà băng giao dịch tiền
hàng hoá,
sân bay, ga tàu, đường cao tốc, ray,
giao thông phương tiện,
giao lộ đường bay
hành khách
hoá học sites bonds energy
Nội dung chi tiết
6.1. Phát biểu bài toán và các ứng dụng
6.2. Lát cắt
6.3. Đồ thị tăng luồng và Đường tăng luồng
6.4. Thuật toán Ford-Fulkerson
6.5. Thuật toán Edmond-Karp
6.6. Một số ứng dụng
Lát cắt (Cuts)
Lát cắt là cách phân hoạch tập đỉnh của đồ thị thành 2 tập S và T sao cho s Î S,
t Î T.
• Khả năng thông qua cap(S,T) của lát cắt (S, T) là số:
cap( S , T ) = å c(e),
eÎS ®T
Trong
trong đó
Æ„ S ® T := {(v, w) Î E : v Î S , w Î T }
Lát cắt nhỏ nhất (hẹp nhất) là lát cắt với kntq nhỏ nhất.
S = {s}
Ví dụ 1 2 9 5
T = {t,2,3,4,5,6,7}
10
Cap(S, T) = 10+5+15=30
4 15 15 10
S
s 5 3 8 6 10 t
4 6 15 10
15
4 30 7
Luồng chảy qua lát cắt
Định nghĩa. Giả sử f là luồng trong mạng và (S,T) là lát cắt. Ta gọi giá trị luồng
chảy qua lát cắt (S,T) là đại lượng
å
eÎS ®T
f ( e) - å
eÎT ® S
f ( e) 10+4+10 0
4 8 8
s 5 3 8 6 10 t
0 10
4 0 6 15 0 10
15
10
4 30 7
10
Luồng và lát cắt
Bổ đề 1. Giả sử f là luồng, và (S, T) là lát cắt. Khi đó
giá trị luồng chảy qua lát cắt chính bằng giá trị của luồng:
Chứng minh: Cộng tất cả các ràng buộc cân bằng luồng theo mọi vÎS, đơn
giản biểu thức ta thu được:
w
0 = å( å f ( e) - å f (e))
v 2vÎS eÎE + ( v ) eÎE - ( v )
<latexit sha1_base64="WvQtQh6xEHBFrB+jWWx/UJ+hs8g=">AAACAXicbVDLSsNAFL2pr1pfUTeCm8EiuCqJFHVZdOOyon1AE8pkOmmHTiZhZlIooW78FTcuFHHrX7jzb5y2WWjrgYHDOfcx9wQJZ0o7zrdVWFldW98obpa2tnd29+z9g6aKU0log8Q8lu0AK8qZoA3NNKftRFIcBZy2guHN1G+NqFQsFg96nFA/wn3BQkawNlLXPhohjwl07wWYDBXHaoC8THkT1LXLTsWZAS0TNydlyFHv2l9eLyZpRIUmZo7quE6i/QxLzQink5KXKpqYJbhPO4YKHFHlZ7MLJujUKD0UxtI8odFM/d2R4UipcRSYygjrgVr0puJ/XifV4ZWfMZGkmgoyXxSmHOkYTeNAPSYp0XxsCCaSmb8iMsASE21CK5kQ3MWTl0nzvOJeVKp31XLtOo+jCMdwAmfgwiXU4Bbq0AACj/AMr/BmPVkv1rv1MS8tWHnPIfyB9fkDfoqWSw==</latexit>
S\{s}
u v t
æ ö
= å f (e) - ç å f (e) - å f (e) ÷
è eÎS ®T ø
eÎE + ( s ) eÎT ® S
val ( f ) = å
eÎS ®T
f ( e) - å
eÎT ® S
f ( e)
£ å
eÎS ®T
f ( e) S 4
8
T
t
£ å
eÎS ®T
c (e)
= cap(S , T ) s
7
6
Luồng cực đại và lát cắt nhỏ nhất(Max Flow and Min Cut)
Hệ quả. Giả sử f là luồng, còn (S, T) là lát cắt. Nếu val( f ) = cap(S, T), thì
f là luồng cực đại còn (S, T) là lát cắt hẹp nhất.
Luồng trong mạng G được gọi là luồng cực đại nếu trong số Lát cắt nhỏ nhất (hẹp nhất): lát cắt với kntq nhỏ nhất
tất cả các luồng trong mạng G nó là luồng có giá trị lớn nhất
Chứng minh: Xét f ’ là luồng bất kỳ và (S’,T’) là lát cắt bất kỳ.
Theo bổ đề 2 ta có: Theo giả thiết Theo bổ đề 2
val( f ’) £ cap(S,T) = val( f ) £ cap(S’,T’)
Bổ đề 2. Giả sử f là luồng, còn (S, T) là lát cắt. Khi đó
val( f ) £ cap(S, T)
f ’ là luồng bất kỳ
f là luồng cực đại
val( f’ ) £ val (f )
(S’, T’) là lát cắt bất kỳ
(S,T) là lát cắt hẹp nhất
cap( S,T ) £ cap( S’,T’ )
Định lý về luồng cực đại và lát cắt nhỏ nhất
Max-Flow Min-Cut Theorem
Đinh lý (Ford-Fulkerson, 1956): Trong mạng bất kỳ, giá trị của luồng cực đại
luôn bằng khả năng thông qua của lát cắt nhỏ nhất.
9
2 9 5
10 9
1
10 15 15 0 10
4 0
4 8 9
s 5 3 8 6 10 t
4 10
4 0 6 15 0 10
15
14
4 30 7
14 Flow value = 28
Cut capacity = 28
Nội dung chi tiết
6.1. Phát biểu bài toán và các ứng dụng
6.2. Lát cắt
6.3. Đồ thị tăng luồng và Đường tăng luồng
6.4. Thuật toán Ford-Fulkerson
6.5. Thuật toán Edmond-Karp
6.6. Một số ứng dụng
Thuật toán tham lam
• Bắt đầu từ luồng 0 (Luồng có giá trị = 0).
• Tìm đường đi P từ s đến t trong đó mỗi cung thoả mãn f (e) < c(e).
• Tăng luồng dọc theo đường đi P.
• Lặp lại cho đến khi gặp bế tắc.
s->4->3->t ???
s->2->5->t ???
4 5
0
0 4 0
4
0 4
0 10 4 0 10
0 10
s 10 2 13 3 10 t
Luồng
Luồngcó
cógiá
giátrị
trị==10
0
Ý tưởng thuật toán
Thuật toán tham lam không cho lời giải tối ưu.
TT tham lam:
4 5 Giá trị luồng = 10
0
0 4 0
4
0 4
10 4
10 10
s 10 2 13 3 10 t
Tối ưu:
4 5 Giá trị luồng = 14
4
4 4 4
4
4 4
10 4 10
6
s 10 2 13 3 10 t
Đồ thị tăng luồng – Tập cung
Mạng đã cho G = (V, E). kntq
• Cung e = (v, w) Î E
• Luồng f (e) v 17 w
• Khả năng thông qua c(e) 6
Luồng
e = (u,v) Þ eR = (v,u)
Đồ thị tăng luồng: Gf = (V, Ef ).
• Ef = {e: f(e) < c(e) } È {eR : f(e) > 0 }
Kntq
• Khả năng thông qua của các cung
ìc(e) - f (e) n’
nếuu eÎE v 11 w
c f (e) = í
î f (e) n’ u e R Î E
nếu 6
Kntq
Đồ thị tăng luồng - Ví dụ
Đồ thị tăng luồng: Gf = (V, Ef ). ìc(e) - f (e) nếu
n’ u e Î E
– Ef = {e : f(e) < c(e)} È {e : f(e) > 0}.
R c (e) = í
f
î f (e) nếu
n’ u e R Î E
– cf(e) cho biết lượng lớn nhất có thể tăng luồng trên cung e.
– cf(eR) cho biết lượng lớn nhất có thể giảm luồng trên cung e. (s,4)
4
0
5 (s,2)
0 4 0 (2,3)
G 4
0 4 (4,3)
4 (2,5)
10 10 10
s 10 2 13 3 10 t (3,t)
(5,t)
4 5
4
Gf 4
4
4
s 10 2 10 3 10 t
3
Đồ thị tăng luồng - Ví dụ
Đồ thị tăng luồng: Gf = (V, Ef ). ìc(e) - f (e) nếu
n’ u e Î E
– Ef = {e : f(e) < c(e)} È {e : f(e) > 0}.
R c (e) = í
f
î f (e) nếu
n’ u e R Î E
– cf(e) cho biết lượng lớn nhất có thể tăng luồng trên cung e.
– cf(eR) cho biết lượng lớn nhất có thể giảm luồng trên cung e. (s,4)
Đường tăng luồng = đường đi từ s đến t trên đồ thị tăng luồng Gf. (s,2)
Khả năng thông qua của đường đi P là: cf (P) = min {cf (e): e Î P }. (2,3)
Xây dựng Gf mới tương ứng 4 5
Tìm đường tăng luồng 4 (4,3)
4
trên Gf mới 4 4 (2,5)
G 4
4 4 (3,t)
10 4 10 (5,t)
6
s 10 2 13 3 10 t
4
Gf 4
4
4
s 10 2 6 3 10 t
7
Định lý về luồng cực đại và lát cắt nhỏ nhất
Định lý đường tăng luồng (Ford-Fulkerson, 1956): Luồng là cực đại khi và chỉ
khi không tìm được đường tăng luồng.
Định lý về luồng cực đại và lát cắt nhỏ nhất (Ford-Fulkerson, 1956): Giá trị
của luồng cực đại bằng khả năng thông qua của lát cắt nhỏ nhất.
s 1 0
XX1 0 t s 1 t
s
X X
X
1 1 f
X
X X
t
Có 6 cung với khả năng thông qua X, 2 cung khả năng thông qua 1
và một cung khả năng thông qua
f = ( 5-1)/2 » 0.618034...
Thời gian tính
Giả thiết: Tất cả các khả năng thông qua là các số nguyên trong khoảng
từ 0 đến C.
Bất biến: Mỗi giá trị luồng f(e) và mỗi khả năng thông qua cf (e) luôn
luôn là số nguyên trong quá trình thực hiện thuật toán.
Định lý: Thụât toán dừng sau không quá val( f *) £ nC lần lặp.
Chứng minh.
Sau mỗi lần tăng luồng, giá trị của luồng tăng thêm ít nhất 1.
0 0 0
s 10 3 9 4 10 t
38
Nội dung chi tiết
6.1. Phát biểu bài toán và các ứng dụng
6.2. Lát cắt
6.3. Đồ thị tăng luồng và Đường tăng luồng
6.4. Thuật toán Ford-Fulkerson
6.5. Thuật toán Edmond-Karp
6.6. Một số ứng dụng
Một số ứng dụng
• Một số bài toán luồng tổng quát
• Bài toán với nhiều điểm phát và điểm thu
• Bài toán với hạn chế thông qua ở nút
• Một số ứng dụng trong tổ hợp
• Bài toán cặp ghép cực đại trong đồ thị hai phía
• Độ tin cậy của mạng