K← K/2 8 return f

Một phần của tài liệu Tiểu luận Phân tích và thiết kế thuật toán LUỒNG CỰC ĐẠI (Trang 60)

8 return f

c. Biện luận rằng MAX-FLOW-BY-SCALING trả về một luồng cực đại.

d. Chỉ ra rằng khả năng thông qua của một lát cắt cực tiểu của đồ thị thặng dư Gf tối đa là 2K|E| mỗi lần dòng 4 được thực hiện.

e. Biện luận rằng vòng lặp While bên trong của các dòng 5-6 được thực hiện với thời gian O(E) với mỗi giá trị của K.

f. Kết luận rằng MAX-FLOW-BY-SCALING có thể được thi hành sao cho nó chạy với thời gian O(E2lgC).

26-6 Luồng cực đại với các khả năng thông qua âm (maximum flow with negative capacities)

Giả sử rằng chúng ta cho phép một mạng vận tải có các cung với khả năng thông qua âm (hoặc dương). Trong một mạng như vậy, một luồng khả thi không cần thiết tồn tại.

a. Xét một cung (u,v) trong một mạng vận tải G = (V,E) với c(u,v) < 0. Giải thích ngắn gọn khả năng thông qua âm nghĩa là gì bằng thuật ngữ của luồng giữa u và v.

Cho G = (V,E) là một mạng vận tải với khả năng thông qua trên cung là âm và cho s,t lần lượt là điểm phát và điểm thu của G. Xây dựng mạng vận tải ban đầu G’ = (V’, E’) với hàm khả năng thông qua c’, điểm phát s’ và điểm thu t’, trong đó:

V’ = V ∪ {s’,t’} và E' = E ∪ {(u, v) : (v,u) ∈ E} ∪ {(s’, v) : v ∈ V} ∪ {(u, t’) : u ∈ V} ∪ {(s, t),(t,s)}.

Chúng ta gán các khả năng thông qua cho các cung như sau. Với mỗi cung (u,v) ∈E, thiết lập c’(u,v) = c’(v,u) = (c(u,v) + c(v,u))/2

Với mỗi đỉnh u ∈ V, thiết lập:

c’(s’,u) = max(0,(c(V,u) – c(u,V))/2) và

c’(u,t’) = max(0,(c(u,V) – c(V,u))/2) Chúng ta cũng thiết lập c’(s,t) = c’(t,s) = ∞.

b. Chứng minh rằng nếu một luồng khả thi tồn tại trong G thì tất cả các khả năng thông qua trong G là không âm và một luồng cực đại tồn tại trong G’ sao cho tất cả các cung đi vào trong điểm thu t’ là bão hòa.

c. Chứng minh điều ngược lại của câu (b). Việc chứng minh nên có tính cách xây dựng, tức là đưa ra một luồng trong G’ mà tất cả các cung đi vào t’ đều bão hòa, việc chứng minh nên chỉ ra cách làm thế nào để thu được một luồng khả thi trong G.

d. Mô tả một thuật toán tìm luồng khả thi cực đại trong G. Chứng tỏ MF(|V|,| E|) là thời gian thực hiện trong trường hợp xấu nhất của thuật toán luồng cực đại ban đầu trên một đồ thị với tập các đỉnh |V| và các cung |E|. Phân tích thuật toán của bạn đối với việc tính luồng cực đại của một mạng vận tải với các khả năng thông qua âm bằng các thuật ngữ của MF.

26-7 Thuật toán so khớp phân đôi Hopcroft- Karp (The Hopcroft-Karp bipartite matching algorithm)

Ở bài toán này chúng ta mô tả một thuật toán nhanh hơn của Hopcroft và Karp để tìm một so khớp cực đại trong một đồ thị phân đôi. Thuật toán chạy với thời gian là O( V E). Cho một đồ thị phân đôi vô hướng G=(V,E), trong đó V=L

R và tất cả các cạnh có đúng một điểm cuối trong L để M là một so khớp trong G. Chúng ta nói rằng một đường đơn P trong G là một đường tăng đối với M nếu nó bắt đầu ở một đỉnh không so khớp trong L và kết thúc ở một đỉnh không so khớp trong R và những cạnh của nó lần lượt phụ thuộc vào M và E-M. Ở bài toán này chúng ta xem mỗi đường như là một chuổi các cạnh hơn là một chuổi các đỉnh. Một đường tăng nhắn nhất đối với một so khớp M là một đường tăng với số cạnh nhỏ nhất.

Cho hai tập hợp A và B. Lệch đối A⊕B được định nghĩa bằng (A-B)∪(B- A), nghĩa là những phần tử của nó chính xác thuộc một trong hai tập hợp.

a. Chỉ ra rằng nếu M là một so khớp và P là một đường tăng đối với M thì M ⊕P là một so khớp và |M⊕P|=|M|+1. Chỉ ra rằng nếu P1, P2, …., Pk là những đường tăng của những đỉnh tách rời đối với M thì M⊕(P1 ∪ P2 ∪···∪ Pk) là một so khớp với số yếu tố |M|+k.

Cấu trúc chung của thuật toán như sau: HOPCROFT-KARP (G)

1 M ← ø 2 repeat

3 let P={p1, p2,…, pk} là tập hợp những đường tăng lớn nhất của các đỉnh tách rời đối với M.

4 M ← M ⊕ (P1 ∪ P2 ∪···∪ Pk) 5 until P=φ

6 return M

Phần còn lại trong bài toán này yêu cầu phân tích số vòng lặp của thuật toán (nghĩa là số lần lặp trong vòng lặp Repeat) và mô tả sự thực thi của dòng 3. b. Cho hai so khớp M và M* trong G. Chỉ ra rằng mọi đỉnh trong G’ =(V,M

⊕ M*) có tối đa là 2 đơn vị. Kết luận rằng G* là tập hợp tách rời của những đường đi đơn hoặc chu trình. Biện luận rằng những cạnh trong mỗi đường đi đơn hoặc chu trình lần lượt phụ thuộc vào M hoặc M* . Điều đó chứng tỏ rằng nếu |M|≤|M*| thì M

⊕M* chưa ít nhất |M*|-|M| đường tăng các đỉnh tách rời đối với M.

Để chiều dài của một đường tăng ngắn nhất đối với một so khớp M và để P1, P2, …., Pk là một tập hợp lớn nhất những đường tăng của các đỉnh tách rời đối với M, ta đặt M= M⊕(P1 ∪ P2 ∪···∪ Pk) và giả sử rằng P là một đường tăng ngắn nhất đối với M.

c. Chỉ ra nếu rằng P là đường tăng các đỉnh tách rời từ P1, P2, …., Pk thì P có nhiều đỉnh hơn.

d. Bây giờ giả sưr rằng P không phải là đường tăng các đỉnh tách rời từ P1, P2, …., Pk, A là tập hợp các cạnh (M⊕M)⊕P. Chỉ ra rằng A= (P1 ∪ P2 ∪···∪ Pk)

⊕P và |A|≥(k+1). Kết luận rằng P có nhiều cạnh hơn.

e. Chứng minh rằng nếu một đường tăng ngắn nhất thì M có chiều dài của so khớp cực đại tối đa là |M|+|V|.

f. Chỉ ra rằng số vòng lặp Repeat lặp lại trong thuật toán tối đa là 2 V

g. Cho một thuật toán chạy với thời gian là O(E) để tìm một tập các đỉnh tách rời cực đại các đường tăng lớn nhất P1, P2, …., Pk đối với so khớp M. Kết luận rằng tổng thời gian chạy của HOPCROFT-KARP là O( V E).

Một phần của tài liệu Tiểu luận Phân tích và thiết kế thuật toán LUỒNG CỰC ĐẠI (Trang 60)