Có bất kỳ trạng thái hiện đại nào của thuật toán Maximum Flow không?


30

Đối với vấn đề lưu lượng tối đa , dường như có một số thuật toán rất tinh vi, với ít nhất một thuật toán được phát triển gần đây như năm ngoái. Dòng Max của Orlin trong thời gian O (mn) hoặc tốt hơn cung cấp thuật toán chạy trong O (VE).

Mặt khác, các thuật toán mà tôi thường thấy nhất được triển khai là (tôi không tuyên bố đã thực hiện một tìm kiếm toàn diện; đây chỉ là từ quan sát thông thường):

  • Edmonds-Karp: ,O(VE2)
  • Push-relabel: hoặc bằng cách sử dụng lựa chọn đỉnh của FIFO,O ( V 3 )O(V2E)O(V3)
  • Thuật toán của Dinic: .O(V2E)

Có phải các thuật toán với thời gian chạy tiệm cận tốt hơn chỉ là không thực tế cho các kích thước vấn đề trong thế giới thực? Ngoài ra, tôi thấy "Cây động" có liên quan đến khá nhiều thuật toán; những cái này đã từng được sử dụng trong thực tế chưa?

Lưu ý: câu hỏi này ban đầu được hỏi về stack overflow, ở đây , nhưng tôi được bảo rằng nó sẽ phù hợp hơn ở đây.

EDIT : Tôi đã hỏi một câu hỏi liên quan trên cs.stackexchange , cụ thể về các thuật toán sử dụng cây động (hay còn gọi là cây cắt liên kết), có thể được mọi người quan tâm theo dõi câu hỏi này.


1
nói một cách tổng quát, liệu một thuật toán có "thực tế" hay không, liệu nó có được "triển khai" hay không một chút khác biệt. các tác giả lý tưởng sẽ phát hành các triển khai thuật toán của riêng họ trong trường hợp đó thường là "thực tế" để sử dụng chúng. không phải điều này thường là ngoại lệ trong tài liệu TCS. nhưng nó thường không "thực tế" để "triển khai" các thuật toán của các tác giả khác chỉ đưa ra các mô tả trong các bài báo viết bằng mã giả, đôi khi rất quan trọng hoặc rất phức tạp ... việc thực hiện thành công bao gồm kiểm tra tốt về tính chính xác, một quá trình đôi khi khó khăn ...
vzn

3
Andrew Goldberg đã từng có một cơ sở mã rất đẹp cho các biến thể khác nhau của dòng chảy tối đa dựa trên công việc đẩy nhãn của mình. Tôi đã sử dụng mã trong quá khứ và nó rất sạch sẽ. Thật không may, các trang web dường như không còn tồn tại.
Suresh Venkat

3
@vzn Tôi quan tâm đến việc liệu các thuật toán có cho mình thực hiện thực tế hay không. Có những thuật toán không được, và một số người đã gọi đó là "thuật toán thiên hà", bởi vì chúng có hành vi tiệm cận tuyệt vời nhưng quá nhiều chi phí mà hiện tại không có lợi ích thực tế nào để thực hiện chúng. (Vấn đề thứ tự thấp hơn, sau tất cả.) Phép nhân ma trận là ví dụ tốt nhất tôi có thể nghĩ đến, trong đó các giải pháp tốt nhất không có triệu chứng không bao giờ thấy sử dụng thực tế. Tôi tò mò liệu dòng chảy Max có phải là một tình huống tương tự không.
Rob Lachlan

5
liệu một thuật toán là "thực tế" so với việc nó được "triển khai" có khác một chút không. - Đúng rồi. Một thuật toán có thể được thực hiện mà không thực tế, nhưng không phải ngược lại.
Jeffε

Câu trả lời:


22

Tôi là một trong những tác giả của bài báo liên kết ở trên.

Chỉ muốn đề cập rằng chúng tôi đã sử dụng '`hiện đại' 'để chỉ các thuật toán (với các triển khai có sẵn công khai) hoạt động tốt trên các trường hợp lưu lượng tối đa phát sinh trong thị giác máy tính.

Tôi cũng muốn nói thêm rằng trong bối cảnh hẹp (nhưng thực tế) đó, thường thì các thuật toán hoạt động tốt là những thuật toán có đảm bảo lý thuyết kém. Ví dụ, ref [5] từ bài báo của chúng tôi (thuật toán Boykov-Kolmogorov) được sử dụng rộng rãi trong cộng đồng thị giác máy tính, nhưng không bị ràng buộc nhiều thời gian chạy.

Cuối cùng, trong trường hợp bất kỳ ai quan tâm, dữ liệu từ các thử nghiệm của chúng tôi có sẵn tại đây: http://ttic.uchicago.edu/~dbatra/research/mfcomp/index.html

Mã cũng sẽ sớm có sẵn.


rất gọn gàng mà bạn tham gia nhóm! chào mừng bạn một câu hỏi về bài báo [kể từ lần đầu tiên tìm thấy nó]. Sẽ rất thú vị khi nghe thêm về quá trình lựa chọn các thuật toán được sử dụng trong bài viết trên giấy. Nó dường như không được xây dựng đầy đủ về điều đó. có lẽ bạn có thể chia sẻ một số ghi chú nền "hậu trường" ở đâu đó [ví dụ: trang web?] về thuật toán nào đã được chọn, đã bị bỏ qua, tại sao, những thách thức nào trong việc triển khai / chạy, bạn nghĩ gì về sự kỳ lạ hơn các thuật toán như một trong những thuật toán gần đây của Mitchins và triển vọng của chúng để thực hiện cuối cùng, vân vân!
vzn

7

có một số cách để trả lời câu hỏi này nhưng không nhất thiết phải là câu trả lời đồng thuận. nói chung các thuật toán đã được triển khai và phát hành để phân phối công khai là "thực tế". tuy nhiên, một số thuật toán đã được nghĩ ra nhưng chưa được triển khai có thể là thực tế nhưng "ban giám khảo đã hết" để nói về chúng. **

một chiến lược tốt cho các mục đích thực tế là tìm kiếm một cuộc khảo sát. đối với những người quan tâm đến các thuật toán thực tế, điểm chuẩn đối với dữ liệu trong thế giới thực có thể là một hướng dẫn tuyệt vời cho hành vi "thế giới thực" dự kiến ​​của họ.

một khảo sát điểm chuẩn có thể là đủ nhưng sẽ sai về phía các thuật toán khả thi. đây là một phân tích thực nghiệm kỹ lưỡng gần đây về 14 thuật toán dòng chảy tối đa "tiên tiến" được đánh giá theo kinh nghiệm so với các trường hợp xử lý tầm nhìn, trong đó luồng tối đa có nhiều ứng dụng. "trạng thái của nghệ thuật" được dùng để chỉ các thuật toán "được thực hiện".

[1] Xem lại MaxFlow: So sánh theo kinh nghiệm các thuật toán Maxflow cho các vấn đề về tầm nhìn dày đặc của Verma và Batra, 2012

** một số thuật toán lý thuyết đang ở trong một thể loại ngày càng tăng trong cộng đồng TCS được gọi một cách không chính thức là "thiên hà", nhưng thật không may, các tác giả TCS hiện không tự dán nhãn cho thuật toán của mình trong danh mục này và không có tiêu chí nào được công bố hoặc nói chung được chấp nhận cho Các thuật toán "thiên hà", mặc dù có tài liệu tham khảo trong blog .

thực tiễn theo nghĩa này có thể là một khía cạnh mới nổi cho nghiên cứu lý thuyết. lý tưởng là sẽ có một cuộc khảo sát về các thuật toán dòng chảy tối đa cụ thể trên trục / tiêu chí "thực tế" này, nhưng có khả năng nó không tồn tại như khi viết. đó là một khái niệm được công nhận / thừa nhận gần đây trong TCS chưa được chính thức hóa hoàn toàn (không giống như việc chấp nhận rộng rãi các thuật toán P là "hiệu quả").


3
+1. Tôi không chắc tại sao điều này bị hạ cấp; Tôi đang đọc bài báo mà bạn liên kết đến, và nó rất hữu ích trong việc xem xét các phương pháp thực tế là gì, ít nhất là trong lĩnh vực vấn đề đó.
Rob Lachlan

3
Robert Sedgewick đã nói trong một cuộc nói chuyện gần đây rằng nhà thiết kế thuật toán không chạy thử nghiệm có nguy cơ bị mất tính trừu tượng. Cuộc nói chuyện là về việc tìm đường dẫn trong biểu đồ và cũng có phần liên quan đến maxflow. Nó không trả lời câu hỏi, nhưng có thể thú vị với ai đó.
Juho

5
@Rob, phần duy nhất có liên quan trong câu trả lời này là một liên kết đến bài báo và không có nhiều câu trả lời giải thích tại sao bài báo đó được liên kết cả. Tôi đoán rằng OP đã tìm thấy liên kết của Google và đã không đọc nó. Phần còn lại của câu trả lời là một số nhận xét chung và bình luận nêu quan điểm cá nhân của OP về các vấn đề mà ông không phải là chuyên gia và không thực sự có liên quan ở đây. Câu trả lời không phải là bài viết trên blog. Một liên kết đến một bài báo có liên quan có thể tốt như một bình luận nhưng nó không đưa ra câu trả lời. Đây là một câu trả lời xấu nếu nó là một. Đó là lý do tại sao tôi đã bỏ phiếu xuống.
Kaveh

2
@Kaveh đủ công bằng. Tôi thấy bài báo là một chỉ báo hữu ích về những gì mọi người coi là thuật toán thực tế hữu ích. Tôi đồng ý rằng nhiều điều chưa được trả lời.
Rob Lachlan

3
Tôi cũng không hiểu các downvote. Không có lý do để tin rằng người đăng KHÔNG đọc bài viết được liên kết, và nó dường như có liên quan. Tôi có thể thấy mong muốn không upvote, nhưng không phải là downvote.
Suresh Venkat

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.