Tính toán lưu lượng tối đa từ một lần cắt tối thiểu


16

Chúng tôi biết rằng tính toán một dòng chảy tối đa. một mức cắt tối thiểu của một mạng có dung lượng là tương đương; xem các định lý luồng cực đại lát cắt cực tiểu .

Chúng tôi có các thuật toán (nhiều hơn hoặc ít hiệu quả hơn) để tính toán các luồng tối đa và tính toán một mức cắt tối thiểu cho một luồng tối đa cũng không khó cũng không tốn kém.

Nhưng còn điều ngược lại thì sao? Đưa ra mức cắt tối thiểu, làm thế nào chúng ta có thể xác định lưu lượng tối đa? Dĩ nhiên, không giải quyết Max-Flow từ đầu, và tốt nhất là nhanh hơn thế.

Một vài suy nghĩ:

  • Từ mức cắt tối thiểu, chúng ta biết giá trị lưu lượng tối đa. Tôi không thấy làm thế nào thông tin này giúp các phương pháp tiếp cận tiêu chuẩn tăng cường và đẩy mạnh, mặc dù việc điều chỉnh cái sau có vẻ hợp lý hơn một chút.

  • Chúng tôi không thể sử dụng mức cắt tối thiểu để chia mạng thành hai phần và lặp lại vì điều đó sẽ không thu nhỏ vấn đề trong trường hợp xấu nhất (nếu một phân vùng là đơn lẻ); ngoài ra, chúng tôi sẽ không cắt giảm tối thiểu các trường hợp nhỏ hơn.

  • Có biết giá trị của lưu lượng tối đa tăng tốc độ giải quyết Max-Flow LP, có thể thông qua các điều kiện độ chùng bổ sung không?


Câu hỏi liên quan: chúng ta có biết các thuật toán để tính toán các phép cắt nhỏ (không sử dụng thuật toán dòng cực đại) không?
Raphael

3
Chúng tôi chắc chắn làm được, thuật toán ngẫu nhiên của Karger là một thuật toán rất phổ biến và bạn không cần kiến ​​thức về dòng chảy tối đa cho điều đó.
Juho

2
Nếu bạn không muốn các thuật toán ngẫu nhiên, thuật toán Stoer-Wagner là một thuật toán rất đơn giản, cũng không có kỹ thuật dòng chảy.
Juho

2
Đồ tốt! Có một thách thức khác ở đây. Chỉ biết các biểu tượng cắt nhỏ bit thông tin (nhiều nhất), vì mỗi cắt là đẳng cấu với một tập hợp con của V . Tuy nhiên, một luồng tối đa có thể cần nhiều hơn | V | bit thông tin để đại diện (đặc biệt là nếu dung lượng lớn). Vì vậy, về mặt lý thuyết thông tin, bạn không thể hy vọng vào một thuật toán chỉ nhìn vào vết cắt và phun ra dòng chảy; nó cũng cần phải nhìn vào biểu đồ, và thực hiện một số tính toán bổ sung. (Tôi nhận ra điều này không phải là nhiều của một rào cản.)|V|V|V|
DW

Câu trả lời:


6

Trong trường hợp xấu nhất, bản thân vết cắt tối thiểu không truyền tải nhiều thông tin về lưu lượng tối đa. Xét một đồ thị trong đó s , t -cut tối thiểu có giá trị w . Nếu tôi mở rộng G bằng cách thêm một đỉnh mới s ' và một cạnh ( s ' , s ) với trọng lượng w , tối thiểu s ' , t -cut trong đồ thị mới bao gồm chỉ cạnh ( s ' , s )G= =(V,E)S,twGS'(S',S)wS',t(S',S)nhưng điều đó không cung cấp bất kỳ thông tin nào về cách lấy đơn vị dòng chảy từ s đến t .wSt

Thực tế, việc cắt tối thiểu cho bạn biết giá trị của luồng, nhưng không phải làm thế nào để đạt được luồng đó. Điều này có nghĩa là việc biết mức cắt tối thiểu có thể tăng tốc độ tìm kiếm dòng chảy bằng nhiều nhất là một yếu tố logarit, vì chúng ta có thể thực hiện tìm kiếm nhị phân để tìm giá trị của vết cắt.


Nhưng yếu tố logarit đó sẽ dựa trên kích thước của khoảng thời gian của các giá trị luồng tiềm năng, do đó không thể so sánh được với giới hạn trên hiện tại về việc giải quyết luồng tối đa chỉ phụ thuộc vào kích thước biểu đồ. Điều đó nói rằng, ngay cả một sự tăng tốc logarit sẽ được quan tâm. Tôi không tin rằng việc biết giá trị của luồng tối đa không giúp ích gì cả.
Raphael

-2

Chắc chắn tồn tại các thuật toán cho phép bạn tính toán mức cắt tối thiểu trước khi tính toán dòng cực đại. Hai thuật toán như vậy là thuật toán đẩy lại và thuật toán giả có liên quan chặt chẽ với nhau. Thứ hai là hiệu quả hơn. Cả hai thuật toán này đều sử dụng các thuộc tính đặc biệt của đồ thị dư mà chúng lặp đi lặp lại để cải thiện luồng cực đại từ đường cắt tối thiểu. Để biết chi tiết, tôi khuyên bạn nên đọc mã và giấy tờ.

Để giải thích chi tiết về trường hợp đẩy nhãn, khi thuật toán có thể đẩy không chảy thêm vào bồn, nó được đảm bảo đã tính toán một lần cắt tối thiểu. Phần này của thuật toán được gọi là giai đoạn 1 vì thiếu tên tốt hơn. Giai đoạn 2 là giai đoạn hiệu quả hơn trong đó nó biến đổi phần cắt tối thiểu thành một luồng cực đại bằng cách lặp đi lặp lại các chu kỳ trong biểu đồ dư bằng cách sử dụng một tìm kiếm sâu đầu tiên và đẩy phần dư trở lại nguồn. Tôi tin rằng giai đoạn 2 có thể được chứng minh là hiệu quả hơn so với giai đoạn 1.


4
Vui lòng đọc lại câu hỏi; đó không phải là câu trả lời của bạn
Raphael

Ví dụ về PR tôi đã cho rằng bạn đã tính toán các thông tin khác trên đường đi trong khi bạn đang tính toán min-cut. Câu hỏi ban đầu của bạn không chỉ định nếu bạn được phép duy trì thông tin khác cùng với việc cắt tối thiểu để làm cho phép tính luồng tối đa tiếp theo dễ dàng hơn. Có công bằng không khi nêu câu hỏi ban đầu của bạn là "Được cắt giảm tối thiểu và không có thông tin nào khác , làm thế nào chúng ta có thể xác định lưu lượng tối đa?".
ldog

2
Tôi đã nói, "đã cho A, tính B". Giả định hợp lý duy nhất là bạn chỉ được cho A, nếu không nói về các vấn đề tính toán sẽ là một vấn đề rất mờ nhạt.
Raphael

Tôi có ý kiến ​​khác. Từ góc độ thực tế, bạn sẽ không bao giờ tính toán cắt nhỏ mà không tính toán thông tin bổ sung (chẳng hạn như trong thuật toán PR.) Từ góc độ lý thuyết, có thể tốt khi xem xét mọi thứ một cách cô lập như bạn nói. Bối cảnh là chìa khóa ở đây.
ldog
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.