D bằn g9 và tớ iA bằng 7 ,E có khoảng cách tới cây hiện tại bằng 15, và F
Mối quan hệ giữa các bài toán luồng
Nhiều biến thể của các bài toán luồng có quan hệ với nhau với hình thức bài này là tổng quát hóa hay chuyên biệt hóa của bài kia. Trong cây dưới đây, một bài toán có thể được giải bằng một lời giải cho bài toán cha.
•• Bài toán luồng với các điều kiện và hàm mục tiêu tùy ý. •• Bài toán luồng với các điều kiện tuyến tính.
• Bài toán luồng tuần hoàn đa (Multi-commodity circulation problem). Thuật toán thời gian đa thức duy nhất được biết là giải bằng quy hoạch tuyến tính.
• Bài toán luồng đa chi phí cực tiểu. Đặt tất cả các cận dưới bằng 0. • Bài toán luồng chi phí cực tiểu. Giải với 1 loại hàng, 1 thu, 1 phát.
• Bài toán luồng cực đại. Đặt tất cả chi phí bằng 0 và cực đại hóa luồng.
• Bài toán tìm một đường đi ngắn nhất. Đặt tất cả các khả năng thông qua bằng 1, tìm luồng có độ lớn 1.
• Bài toán luồng đa. Đặt tất cả chi phí bằng 0.
• Đặt tất cả chi phí bằng 0. Giải với 1 loại hàng, 1 thu, 1 phát.
• Bài toán tìm đường đi ngắn nhất cho mọi cặp đỉnh. Cho các khả năng thông qua là vô hạn, tìm luồng độ lớn 1 cho loại hàng, mỗi loại cho 1 cặp đỉnh.
• Bài toán luồng tuần hoàn. Giải với 1 loại hàng, 1 thu, 1 phát.
Trong tất cả các bài toán trên, ta có thể tìm một luồng cực đại hoặc một luồng có độ lớn cho trước.
Liên kết ngoài
• Maximum Flow Problem [1]
• Maximum Flow [2]
• Ford-Fulkerson Max Flow Labeling Algorithm [3]
Tham khảo
• Bollobás, Béla (1979). Graph Theory: An Introductory Course. Heidelberg: Springer-Verlag. ISBN 3-540-90399-2.
• Chartrand, Gary & Oellermann, Ortrud R. (1993). Applied and Algorithmic Graph Theory. New York: McGraw-Hill. ISBN 0-07-557101-3.
• Even, Shimon (1979). Graph Algorithms. Rockville, Maryland: Computer Science Press. ISBN 0-914894-21-8. • Gibbons, Alan (1985). Algorithmic Graph Theory. Cambridge: Cambridge University Press. ISBN 0-521-28881-9
ISBN 0-521-24659-8.
• Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein (2001) [1990]. “26”. Introduction to Algorithms (ấn bản 2). MIT Press and McGraw-Hill. tr. 696–697. ISBN 0262032937.
Chú thích
[1] http://www-b2.is.tokushima-u.ac.jp/~ikeda/suuri/maxflow/Maxflow.shtml [2] http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=maxFlow [3] http://is.twi.tudelft.nl/~melissen/Onderwijs/Netwerkoptimalisering%20IN3530/
Định nghĩa
Giả sử là một đồ thị có hướng hữu hạn và mỗi cung có một khả năng thông qua (một giá trị thực không âm). Ngoài ra, giả sử có hai đỉnh, đỉnh phát và đỉnh thu , đã được xác định.
Một lát cắt là một cách chia các nút mạng thành hai tập và , sao cho thuộc tập và thuộc . Do đó, trong một đồ thị có lát cắt có thể.
Khả năng thông qua của một lát cắt là ,
Đó là tổng của các khả năng thông qua của tất cả các cung đi qua lát cắt, từ vùng tới vùng . Ba điều kiện sau là tương đương:
1. là một luồng cực đại trong đồ thị
2. Mạng còn dư (residual network) không chứa đường tăng (augmenting path). 3. với lát cắt nào đó.
Phác thảo chứng minh: Nếu có một đường tăng, ta có thể gửi luồng theo đó và thu được một luồng lớn hơn, do đó nó không thể là luồng cực đại, và ngược lại. Nếu không có đường tăng nào, ta chia đồ thị thành gồm các nút tới được từ trong mạng còn dư, và gồm các nút không tới được. Khi đó phải bằng 0. Nếu không, tồn tại một cung với , nhưng khi đó, từ lại đến được nên không thể nằm trong .
Ví dụ
Một mạng với luồng cực đại và ba lát cắt cực tiểu
Hình bên phải là một mạng với các nút , và luồng cực đại là một luồng tổng từ nút phát tới nút thu có giá trị bằng 5. (Đây thực ra là luồng cực đại duy nhất ta có thể tìm thấy trong mạng này.)
Có ba lát cắt cực tiểu trong mạng. Đối với lát cắt , khả năng thông qua lát cắt là
. Với nó là
. Và với là .
Lưu ý rằng không phải là một lát cắt cực tiểu, tuy trong luồng đã cho cả và đều đầy. Đó là do trong mạng còn dư có một cung (r,q) với khả năng thông qua
Định lý luồng cực đại lát cắt cực tiểu 107
Lịch sử
Định lý này được chứng minh bởi P. Elias, A. Feinstein, và C.E. Shannon năm 1956, và cũng năm đó, nó được chứng minh một cách độc lập bởi L.R. Ford, Jr. và D.R. Fulkerson. Tìm các luồng cực đại là một dạng bài toán quy hoạch tuyến tính đặc biệt, và định lý luồng cực đại lát cắt cực tiểu có thể được coi là một trường hợp đặc biệt của định lý đôi (duality theorem) cho quy hoạch tuyến tính.
Liên kết ngoài
Tiếng Việt:
• Bài toán luồng cực đại trên mạng [1]
• Bài toán luồng cực đại trên mạng - Các thuật toán đa thức [2]
Tiếng Anh:
• A review of current literature on computing maximum flows [3]
• Max-Flow Min-Cut Animation [4]
• Max-Flow Problem: Ford-Fulkerson Algorithm [1]
Tham khảo
• P. Elias, A. Feinstein, and C. E. Shannon. Note on maximum flow through a network. IRE Transactions on Information Theory IT-2, 117–119, 1956.
• Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Chapter 26: Maximum Flow, pp. 643–700.
Chú thích
[1] http://vnoi.info/vn/bai_viet/thuat_toan/luong_cuc_dai_tren_mang.pas [2] http://laptrinh.sourceforge.net/hoctap/maxflow/
[3] http://www2.toki.or.id/book/AlgDesignManual/BOOK/BOOK4/NODE167.HTM [4] http://www.cs.yorku.ca/~aaw/Wang/MaxFlowStart.htm
cuối), với điều kiện tất cả các cung trên đường đi đó vẫn còn khả năng thông qua, thì ta sẽ gửi đi một luồng dọc theo đường đi đó. Sau đó chúng ta tìm một đường đi khác, và tiếp tục như vậy. Một đường đi còn khả năng thông qua là
một đường đi có khả năng mở rộng thêm hay một đường đi mà luồng qua đó còn khả năng tăng thêm - gọi tắt là
đường tăng.
Thuật toán
Cho một đồ thị , với các khả năng thông qua và luồng trên các cung từ đến , ta muốn tìm luồng cực đại từ đầu nguồn đến điểm thoát . Sau mỗi bước, các điều kiện sau đây được duy trì: • . Luồng từ tới không vượt quá khả năng thông qua.
• . Ta duy trì cân bằng luồng.
• cho tất cả các nút ngoại trừ và . Lượng dòng chảy vào một nút bằng lượng chảy ra khỏi một nút.
Điều này có nghĩa là một luồng đi qua một mạng là một luồng hợp lệ sau mỗi vòng của thuật toán. Chúng ta định nghĩa mạng còn dư là mạng với sức chứa và luồng bằng không. Chú ý rằng không chắc chắn là , bởi vì việc gửi luồng theo cung có thể làm ngắt (làm nó bão hòa), nhưng lại mở một cung mới trong mạng còn dư.
Đầu vào: Đồ thị G với khả năng thông qua c, một nút nguồn s, và một nút thoát t
Kết quả: Luồng f sao cho f là cực đại từ s đến t
1. trên tất cả các cung
2. Trong khi còn có một đường đi từ đến trong :
1. Tìm một đường đi với và , sao cho 2. Tìm
3. (gửi luồng dọc theo đường đi) 4. (luồng có thể "quay lại" sau)
Có thể tìm đường đi trong bằng các phương pháp chẳng hạn như tìm kiếm theo chiều rộng (breadth-first-search) hoặc tìm kiếm theo chiều sâu (depth-first-search). Nếu sử dụng cách thứ nhất, thuật toán sẽ được gọi là Edmonds-Karp.