Tải bản đầy đủ (.ppt) (51 trang)

Tiểu luận môn Kỹ thuật lập trình chủ đề MAXIMUM FLOW (LUỒNG CỰC ĐẠI)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (317.51 KB, 51 trang )

MAXIMUM FLOW
(LUỒNG CỰC ĐẠI)
Trình bày: Nhóm 6- KHMT B
Nguyễn Văn Sửu
Nguyễn Đề
Nguyễn Đức Nghĩa
Nguyễn Đức Quê
Nguyễn Thị Thu


Nội dung trình bày
 Một số khái niệm, định lý
 Bài toán luồng cực đại
 Thuật toán Ford-Fulkerson
 Một số ứng dụng của mạng và luồng


Một số khái niệm, định lý
1. Mạng vận tải
Là một đồ thị có hướng, khơng có khun và có trọng số
G=(V,E) gồm n đỉnh, m cạnh thỏa mãn:
- Mỗi cung e=(u,v)∈ E (u,v∈ V) có trọng số c(e)=c[u,v] là
một số nguyên không âm và được gọi là khả năng thông
qua của cung e
-Có một và chỉ một đỉnh s khơng có cung đi vào được
gọi là lối vào hay đỉnh phát
- Có một và chỉ một đỉnh t khơng có cung đi ra được gọi
là lối ra hay đỉnh thu của mạng


Một số khái niệm, định lý (tt)


Trọng số

2
15

s

Đỉnh phát

9

15

8

3
6

4

11

5
15

15
15
8

6


31

6
15

17

t

10

Đỉnh thu

7

Ví dụ: hình mạng vận tải với đỉnh phát là s và đỉnh thu là t


Một số khái niệm, định lý (tt)
2. Luồng
Cho mạng G=(V,E)
 Luồng ϕ trên G là một phép gán cho mỗi cung e=(u,v)
một số thực ϕ (e)= ϕ [u,v] ≥ 0, thỏa mãn:
• Luồng khơng vượt q khả năng của cung đó
0 ≤ ϕ [u,v] ≤ c[u,v], ∀ (u,v)∈ E
•Nếu v ≠ s,t thì tổng luồng đi vào v bằng tổng luồng
đi ra khỏi v (v∈ V\{s,t})
Giá trị của 1 luồng bằng tổng luồng trên các cung đi ra
khỏi s, và bằng tổng luồng đi vào t



Một số khái niệm, định lý (tt)
a

6

c

5

Mạng vận tải G

3

6
t

s
5

3
b

a

d

1
5


c

5

Một luồng f = 7

6

1

6
t

s
2

0
b

1

1
d


Một số khái niệm, định lý (tt)
3. Lát cắt
 Lát cắt (X,Y) là một phân hoạch tập đỉnh V của mạng
thành hai tập rời nhau X,Y trong đó X chứa đỉnh phát và Y

chứa đỉnh thu
Khả năng thông qua của lát cắt (X,Y) là tổng tất cả các
khả năng thông qua của các cung (u,v) có u∈X và v∈Y
Lát cắt với khả năng thông qua nhỏ nhất là lát cắt cực tiểu
Luồng f(X,Y) bằng tổng luồng trên các cung (u,v) với
(u∈X,v∈Y) và tổng luồng trên các cung (w,z) với z∈X,w∈Y


Một số khái niệm, định lý (tt)
Ví dụ: Lát cắt χ=(X,Y):
Khả năng thông qua: c(χ) = 6+7+9+2 = 24
Luồng
:
f(χ) = 2+(-1)+3+2+2 = 8

Y
2

X
2/6

1/1

6

3/7

3/3

1


1/3

3
4/5

3/5

4

2/2

2/9

5


Một số khái niệm, định lý (tt)
Định lý 1
Cho mạng G=(V,E), và luồng f, khi đó luồng thơng qua lát
cắt (X,Y) bất kỳ bằng |f|
6

a

c

5

3


5

6
t

s
5

3
b

1

G

d

6

a

5

c

6

1
t


s
2

0
b

1

1
d


Một số khái niệm, định lý (tt)
Định lý 2
Cho mạng G=(V,E), và luồng f, khi đó f(X,Y)≤c(X,Y)
f(X,Y) = 7 ≤ c(X,Y) = 13
G
a

6

c

5

3

5


6
t

s
5

3
b

1

d

6

a

5/6

c

6

1/3

s

t

0/3

2

b

1/1

d

1


Một số khái niệm, định lý (tt)
Định lý 3

Cho mạng G=(V,E), và luồng f bất kỳ, lát cắt (X,Y) bất kỳ.
khi đó
|f| ≤ c(X,Y)
f(X,Y) = 8 ≤ c(X,Y) = 13
G
a

6

c

5

3

5


6
t

s
5

3
b

1

d

6

a

5/6

c

6

2/3

s

t


0/3
3

b

1/1

d

2


Một số khái niệm, định lý (tt)
Đồ thị tăng luồng
Cho f là 1 luồng trên mạng G, Từ mạng G =(V,E) ta xây
dựng đồ thị có trọng số Gf= (V,Ef) như sau:
• Nếu f[u,v]số c[u,v]-f[u,v].
• Xét tiếp, nếu f[u,v]>0 thì thêm cung (v,u) vào E f với
trọng số của cung là f[u,v]
⇒ Gf là đồ thị tăng luồng


G

Ví dụ
a

f


6

a

c

5

6

3
3
b

1

1

t
0

2

b

1

d

1


=
>
>

a

5

5

3
b

6

G7
t

2
3

c
1

2

s

6


s

6

d

c

5
t

s
5

5

1

d

Mạng vận tải và đồ thị tăng luồng của nó

1
5

1


Một số khái niệm, định lý (tt)

Đường tăng luồng
• Cho f là 1 luồng trên mạng G, 1 đường đi cơ bản từ A ⇒ B
trên Gf gọi là một đường tăng luồng.
• Với một đường tăng luồng P trên Gf, ta đặt ∆p=min{cf(u,v)|
(u,v)∈P}. ∆p được gọi là giá trị thặng dư của đường P


Một số khái niệm, định lý (tt)
1

5/5

6/5

2

1

3/1
5/2

3

4

2

1/1

5


5

6/6
6

3/0
6/1

5
1

6

2

1

6

2
3

4

3
3

1


5

1
5

Mạng vận tải (1) và đồ thị tăng luồng (2) tương ứng cùng với
một đường tăng luồng P=(1,3,4,2,5,6); ∆P = min(3,2,5,3,5) = 2


Một số khái niệm, định lý (tt)
Định lý 4,5
 Với P là một đường tăng luồng thì các giá trị f p=[u,v] cho
bới
∆p
if (u,v)∈P
f
if (v,u) ∈P
•fp[u,v] = - ∆p
0
 Cho mạng G và luồng f, nếu P là đường tăng luồng trên
mạng Gf thì phép đặt f=(f+fp) cho ta một luồng mới trên f có
giá trị bằng |f|+∆P.
⇒Ta sẽ tăng giá trị của luồng f bằng cách
f[u,v] + ∆p
nếu (u,v) ∈ P
f[u,v] =
f[u,v] - ∆p
nếu (v,u) ∈ P
f[u,v]



Một số khái niệm, định lý (tt)
Ví dụ
5
5/5

6/5
5

2

1

3/1
5/2
2

1

Gf

3

4

6/6

3/0
1/1


5

3

G

1
+ =4

6
6

5

5

3

G’

1

P={1,3,4,2,5,6}

∆p=2
2

2
1


1



4

3
3

6
3

3

- =3
2

6

2
2

6/1

4
1

1

6


5

5

2

5


Bài toán luồng cực đại
Phát biểu bài toán
Cho mạng vận tải G = (V,E). Tìm luồng f* với giá trị luồng lớn
nhất. (Luồng f* gọi là luồng cực đại)

Định lý Ford-Fulkerson
Giá trị luồng cực đại trên mạng bằng khả năng thông qua
của lát cắt cực tiểu.


Bài tốn luồng cực đại
Thuật tốn Ford-Fulkerson
• Khởi tạo một luồng bằng 0
• Trong khi đồ thị tăng luồng của f cịn có đường đi cơ
bản (đường tăng luồng), thì tìm một đường và nâng
luồng dọc theo đường này
• Khi khơng cịn đường đi cơ bản nữa thì f là luồng cực
đại



Sơ đồ khối thuật toán Ford-Fullkerson tổng quát
Begin

Mạng với luồng =0

TimThay:= False

Tăng luồng
True
not TimThay

False

True

Find_Path

Path-Found
False
TimThay:= True

Mạng với luồng
cực đại

End


Ví dụ: cho mạng G = (V,E)
Ký hiệu 6(5): khả năng thông qua (luồng)
2

5(5)

6(5)

4

6(6)

3(1)

6

1

3(0)
5(2)

6(1)
3

Bước 1: khởi tạo luồng f=0
2
5(0)

1(1)
6(0)

5

4


3(0)

6(0)
6

1

3(0)
5(0)

6(0)
3

1(0)

5


Bước 1: khởi tạo luồng f=0

2
5(0)

6(0)

4

6(0)


3(0)

6

1

3(0)
5(0)

6(0)
3

Bước 2: Đồ thị tăng luồng Gf
2

5

1(0)
6

5

4
3

6
6

1


3
5

6
3

Chọn đường tăng luồng P=(1,2,4,6)
∆P = min(5,6,6)=5
Tăng luồng dọc theo P ta thu được luồng mới f=5

1

5


5(5)

6(5)

2

4

6(5)

3(0)

6

1


3(0)
5(0)

6(0)
3

5

1(0)

Đồ thị tăng luồng

5
5

2

1

4
3

5
1
6

1

3

5

Chọn đường tăng luồng P=(1,3,5,6)
∆P = min(5,1,6)=1
Tăng luồng dọc theo P ta thu được luồng mới f=6

6
3

1

5


2

5(5)

6(5)

4

6(5)

3(0)

6

1


3(0)
5(1)

6(1)
3

5

1(1)

Đồ thị tăng luồng

5
2

5

1

4
3

5
1
6

1

3


4
1

3

Chọn đường tăng luồng P=(1,3,4,2,5,6)
∆P = min(4,3,5,3,5)=3
Tăng luồng dọc theo P ta thu được luồng mới f=9

1

5
5

1


5(5)

2

6(2)

4

3(3)

6(5)
6


1

3(3)
5(4)

6(4)
3

5

1(1)

Đồ thị tăng luồng

2
2

4

5

3

5

1

6

1


3

1
4

4

2
3

1

5

4

Đến đây do khơng cịn đường đi cơ bản nào trên đồ thị
tăng luồng nên thuật toán kết thúc


×