Trong đồ thị hướng st, làm thế nào để tìm nhiều vết cắt nhỏ?


7

Giải bài toán dòng chảy tối đa mang lại một lần cắt tối thiểu đủ điều kiện. Nhưng tôi muốn một vài (có thể hàng trăm) vết cắt nhỏ làm ứng cử viên. Các vết cắt không phải là vết cắt tối thiểu, miễn là chúng nhỏ (trọng lượng). Làm thế nào để làm điều đó?


Trọng lượng nhỏ là gì? Bạn muốn có bao nhiêu vết cắt, một số không đổi,n, n2?
utdiscant

1
Để làm cho nó đơn giản, tất cả các cạnh có trọng số là 1 và nhỏ có nghĩa là "số cạnh của một vết cắt là nhỏ, ví dụ như ít hơn 10". Tôi muốn về n cắt, ví dụ. hoặc chỉ vài trăm, tùy theo cái nào làm dịu thiết kế. cảm ơn.
Steph

@steph: Lưu ý rằng đối với các trọng số đơn vị, vấn đề có thể sụp đổ thành một khái niệm đơn giản hơn về mặt khái niệm, vì vậy một giải pháp có thể không giúp bạn trong trường hợp chung.
Raphael

Câu trả lời:


3

Bạn có quen thuộc với thuật toán co ngẫu nhiên hay còn gọi là thuật toán của Karger không? Thuật toán về cơ bản hoạt động bằng cách chọn các cạnh một cách ngẫu nhiên và ký hợp đồng với các vòng lặp tự loại bỏ. Quá trình dừng lại khi có hai nút còn lại và hai nút đại diện cho một vết cắt. Để tăng xác suất thành công, thuật toán ngẫu nhiên được chạy nhiều lần. Trong khi thực hiện các bước chạy, người ta theo dõi vết cắt nhỏ nhất được tìm thấy cho đến nay.

Những gì tôi đề nghị bây giờ là bạn chạy thuật toán co ngẫu nhiên nhiều lần. Mỗi lần thuật toán đưa ra một vết cắt, hãy quyết định có giữ nó hay không bằng cách kiểm tra xem nó có đủ nhỏ hay không. Đương nhiên, bạn có thể dừng lại khi bạn đã sản xuất đủ các vết cắt đủ nhỏ này. Tùy thuộc vào kích thước đầu vào của bạn, điều này thậm chí có thể hoạt động khá tốt trong thực tế.


Bằng cách thực hiện tìm kiếm theo chiều sâu thay vì ngẫu nhiên, điều này cũng có thể được sử dụng để có được tất cả các vết cắt tối thiểu hoặc, thay vào đó, làm tăng cơ hội tìm thấy các vết cắt mới trong mỗi lần lặp.
Raphael
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.