1. Trang chủ
  2. » Cao đẳng - Đại học

LTDT_chuong_5_-_Luong_trong_mang

45 13 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

cả các cung bằng 0 (ta sẽ gọi luồng như vậy là luồng không), và lặp lại bước lặp sau đây cho đến khi thu được luồng mà đối với nó không còn đường tăng..  Bước lặp tăng luồng (Ford – F[r]

(1)(2)

Giới thiệu

Luồng mạng

Bài toán luồng cực đại

Thuật toán Ford Fulkerson

(3)

Nguyễn Đức Nghĩa, Nguyễn Tơ Thành, Tốn rời

rạc, ltb 1, nxb Giáo dục, 1998, ch 7, tr 215 – 236

Đỗ Minh Hoàng, Bài giảng Chuyên đề Giải thuật &

Lập trình, ĐHSP Hà Nội, 2004, ch 10, tr 257 – 267

Dương Anh Đức, Trần Đan Thư, Bài giảng lý

(4)

Luồng cực đại toán tối ưu

trên đồ thị tìm ứng dụng rộng rãi thực tế lý thuyết tổ hợp

Bài toán đề xuất vào đầu năm 1950

gắn liền với tên tuổi nhà toán học Mỹ: Ford

(Lester Randolph Ford: 1927 - ) Fulkerson

(5)

Mạng (network) đồ thị có hướng G = (V, E)

trong đó:

Có đỉnh s khơng có cung vào, gọi

đỉnh phát (source)

Có đỉnh t khơng có cung ra, gọi

đỉnh thu (sink)

Mỗi cạnh e = (u, v)  E gán số nguyên không âm

c(e) = c[u, v] gọi khả thơng qua cung (capacity)

Ta quy ước mạng khơng có cung (u, v) ta thêm

(6)

Với mạng G = (V, E, c), ta ký hiệu:

W-(v) = {(u, v)  E | u  V}: tập cung vào đỉnh v W+(v) = {(v, u)  E | u  V}: tập cung khỏi

(7)

Giả sử cho mạng G = (V, E) Ta gọi luồng f

mạng ánh xạ f: E  R+ gán cho cung e = (u,

v)  E số thực không âm f(e) = f[u, v], thoả mãn

các điều kiện sau:

 ĐK (Capacity Constraint): Luồng cung e 

E không vượt q khả thơng qua nó: ≤ f(e) ≤ c(e)

 ĐK (Flow Conversion): Điều kiện cân luồng

trên đỉnh mạng: Tổng luồng cung vào đỉnh v tổng luồng cung khỏi đỉnh v, v  s, t

(8)

Giá trị luồng tính tổng giá trị

các cung từ đỉnh nguồn s, tổng giá trị cung vào đỉnh thu t

(9)(10)

Cho mạng G = (V, E), tìm luồng f*

(11)

3 t s 5, 2, 1, 5, 4, 4, 3, 3, 3 t s 6

(12)

Xét đồ thị tương ứng hệ thống ống dẫn dầu Trong

đó ống tương ứng với cung, điểm phát tàu chở dầu, điểm thu bể chứa, điểm nối ống nút đồ thị Khả thông qua cung tương ứng tiết diện ống

Cần phải tìm luồng dầu lớn bơm từ tàu

(13)

Bài tốn cặp ghép: có m chàng trai n gái Mỗi

chàng trai ưa thích số gái Hãy tìm cách ghép cặp cho số cặp ghép nhiều

G T

T

G

t s

1

1

1

1

1

T

G

T

1

(14)

Ta gọi lát cắt (X, X*) cách phân hoạch tập

đỉnh V mạng thành tập X X* = V\X, s  X t  X* Khả thông qua lát cắt

(X, X*) số

Lát cắt mà khả thông qua nhỏ gọi lát

cắt hẹp nhất

(15)(16)

Giá trị luồng f mạng nhỏ

hoặc khả thông qua lát cắt (X, X*) nó:

val(f) ≤ c(X, X*)

Từ suy ra: Giá trị luồng cực đại mạng

không vượt khả thông qua lát cắt hẹp mạng

Định lý: Giá trị luồng cực đại mạng

(17)

Giả sử f luồng mạng G = (V, E) Từ mạng G =

(V, E) ta xây dựng đồ thị có trọng số cung Gf = (V, Ef)

với tập cung Ef trọng số cung xác định

theo quy tắc sau:

1 Nếu e = (u, v)  E với f(u, v) = (u, v)  Ef với trọng số

c(u, v)

2 Nếu e = (u, v)  E với f(u, v) = c(u, v) (v, u)  Ef với

trọng số f(u, v)

3 Nếu e = (u, v)  E với < f(u, v) < c(u, v) (u, v)  Ef với

trọng số c(u, v) – f(u, v) (v, u)  Ef với trọng số f(u, v)

Các cung Gf đồng thời cung G gọi

(18)(19)

Giả sử P = (s = v0, v1, v2… vk = t) đường từ

s đến t đồ thị tăng luồng Gf Gọi k trọng số cung nhỏ đường P Xây dựng luồng f’ theo quy tắc sau:

f’(u, v) = f(u, v) + k, (u, v)  P cung thuận f’(u, v) = f(u, v) – k, (u, v)  P cung nghịch f’(u, v) = f(u, v) (u, v)  P

Dễ dàng kiểm tra f’ xây dựng

luồng mạng val(f’) = val(f) + k

Thủ tục tăng luồng gọi tăng luồng dọc theo

(20)

Đường tăng luồng f đường từ s đến t

đồ thị tăng luồng Gf

Các mệnh đề tương đương: f luồng cực đại mạng

2 Không tìm đường tăng luồng f

(21)

CM  3: Ký hiệu X tập đỉnh đến từ s,

Đặt X* = V\X Lúc (X, X*) lát cắt f(u, v) = với u  X* v  X Do đó:

(22)

Bước khởi tạo: Bắt đầu từ luồng với luồng tất

cả cung (ta gọi luồng luồng không), lặp lại bước lặp sau thu luồng mà khơng cịn đường tăng

Bước lặp tăng luồng (Ford – Fulkerson): Tìm

đường tăng P luồng có Tăng luồng dọc theo P

Khi có luồng cực đại, lát cắt hẹp tìm

(23)

4 t s 4, 10, 10 10, 10 0, 4, 6,

4, 6,

6 0, 0, 4, 6,

(24)

4 t s 4, 10, 10 10, 10 0, 4, 6, 4,

5 6,

6

7

0, 0,

1 4, 6,

6

(25)

4 t s 4, 10, 10 10, 10 1, 4, 7, 3,

5 5,

6

7

0, 1,

1 3, 6,

6

(26)(27)

Có cần xây dựng đồ thị tăng luồng?

Không cần xây dựng tường minh

Tìm đường tăng luồng theo giải thuật nào?

Tìm đường theo chiều sâu

Tìm đường theo chiều rộng

(28)

Mỗi đỉnh có trạng thái: chưa có nhãn, có

nhãn chưa xét, có nhãn xét

Nhãn đỉnh gồm có phần:

p(v): Đỉnh trước đỉnh v đường tăng luồng tìm e(v): lượng lớn tăng (giảm)

Đầu tiên, khởi tạo cách gán nhãn đỉnh s chưa

xét, đỉnh khác chưa có nhãn

Từ đỉnh có nhãn chưa xét, gán nhãn cho tất

(29)

Cập nhật phần (*)?

Nếu c[u, v] > f[u, v] < c[u, v] // cịn tăng!

p[v] = u

e[v] = min{e[u], c[u, v] – f[u, v]}

Nếu c[v, u] > f[v, u] > // thử quay ngược lại

(30)

v = p[t]; u = t; tang = e[t];

while (u  s) {

if (v > 0) {

f[v, u] += tang; } else {

v = -v;

f[u, v] = f[u, v] – tang; }

u = v;

(31)

void Flow(int u, e) visit[u] = True; if (u == t)

incF = e; return;

if (visit[t]) return;

for (int i = 0; i < n; i++) if (!Visit[i])

if (c[u, i] > f[u, i])

Flow(i, min(e, c[u, i] – F[u, i])); if (visit[t])

F[u, i] += incF; return;

if (F[i, u] > 0)

Flow(i, min(e, F[i, u])); if (visit[t])

(32)

void MaxFlow() {

FillZero(F, sizeof(F), 0); do {

FillZero(visit, sizeof(visit), 0); Flow(s, +);

(33)

Mạng với nhiều điểm phát điểm thu

t1 s1

sn

tm

t s

s2

t2

(34)

Khả thông qua cung đỉnh

u

v

t s

5

6

1

6

6

3

8

u-u

+

5

6

(35)

Khả cung bị chặn phía

u

v

t s

r(u, t), c(u, t)

0, c(v, t) 0, c(u, v)

0, c(s, u)

(36)

u

t s

r(u, t), c(u, t)

0, c(u, v) 0, c(s, u)

Cung r(u, v)  0, thay (S, v) (u, T) = r(u, v) c(u, v) = c(u, v) – r(u, v)

Thêm cung (t, s) với c(t, s) = 

u

t s

c(u, t) - r(u, t)

c(u, v) c(s, u)

T

r(s, v)

r(u, t)

(37)

Bài toán đám cưới vùng quê (bài toán cặp ghép)

G T

T

G

t s

1

1

1

1

1

T

G

T

1

(38)

Bài toán hệ thống đại diện chung: Cho tập gồm m

phần tử X = {z1, z2… zm} Giả sử <A1, A2 An> <B1, B2… Bn> dãy tập hợp X

Dãy gồm n phần tử x1, x2… xn gọi hệ thống

(39)

Bài tốn hệ thống đại diện chung – Ví dụ

Một giải vơ địch bóng đá có M cầu thủ đăng ký thi

đấu Mỗi cầu thủ giải bắt buộc phải thuộc câu lạc bóng đá hội lao động

Có N câu lạc A1, A2 An N hội B1, B2… Bn

Ban tổ chức giải liên đoàn lao động cần chọn

một ban đại diện gồm N cầu thủ cho câu lạc hội lao động có thành viên ban đại diện

(40)

Các toán tối ưu rời rạc – Bài tốn luồng chi

phí nhỏ nhất

Cho mạng có n đỉnh Mỗi cạnh mạng có

khả thơng qua c(u, v) cước phí vận chuyển p(u, v) định ứng với đơn vị hàng

Cho trước lượng hàng S cần vận chuyển từ

(41)

Các toán tối ưu rời rạc – Luồng chi phí nhỏ

Nếu khơng cần vận chuyển lúc?

(42)

Khả liên thông cạnh (Edge Connectivity)

của đồ thị vô hướng số cạnh cực tiểu k, cho gỡ bỏ k cạnh đồ thị khơng cịn liên thơng

Ví dụ: Đối với đồ thị dạng cây, k = Với đồ thị

(43)

Đường bao phủ (path cover) đồ thị vô

hướng G = (V, E) tập hợp P đường rời G cho đỉnh V nằm xác đường P

Các đường bắt đầu kết thúc

đâu, có chiều dài (nghĩa có đỉnh toàn đỉnh V)

Một path cover cực tiểu G path cover có

(44)

1 Tìm luồng cực đại cho mạng sau:

3

t s

1

3

9

1

1

(45)

2 Hãy nêu giải pháp để giải vấn đề liên thơng cạnh

3 *Hãy nêu giải pháp tìm path cover cực tiểu Chứng minh luồng cực đại mạng G =

(V, E) xác định sau dãy tối đa | E| trình tìm đường tăng luồng

Ngày đăng: 18/04/2021, 08:57

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG