Cập nhật: câu trả lời này dường như là thiếu sót. Xem bình luận từ Kristoffer Arnsfelt Hansen.
Tôi không biết làm thế nào để giải quyết vấn đề của bạn, nhưng đây là một kỹ thuật để giải quyết một phiên bản đơn giản hơn cho vấn đề của bạn: cụ thể, đưa ra một cạnh , kiểm tra xem có tồn tại bất kỳ đường dẫn đơn giản nào từ s đến t bao gồm cạnh e không . (Điều này tương ứng với trường hợp đặc biệt của vấn đề của bạn trong đó l = ∞ .)eStel = ∞
Bạn có thể giải quyết vấn đề đơn giản hơn này bằng cách sử dụng "luồng tối đa với giới hạn thấp hơn" làm chương trình con. Trong bài toán lưu lượng tối đa tiêu chuẩn, công suất của mỗi cạnh cho chúng ta giới hạn trên của lưu lượng đi qua cạnh đó và chúng tôi yêu cầu lượng lưu lượng trên cạnh phải được giới hạn dưới 0. Trong "lưu lượng tối đa với giới hạn dưới ", chúng tôi được phép chỉ định cả giới hạn dưới và giới hạn trên đối với lượng dòng chảy qua cạnh đó. Người ta biết rằng "dòng chảy tối đa với giới hạn dưới" có thể được giải quyết trong thời gian đa thức.
Bây giờ, giả sử chúng ta có cạnh và chúng tôi muốn kiểm tra xem có tồn tại một đường dẫn đơn giản từ s đến t bao gồm cạnh e không . Chúng tôi sẽ thiết lập một luồng tối đa với vấn đề giới hạn thấp hơn. Cụ thể, lấy đồ thị G và thêm một nút mới s 0 với cạnh s 0 → s và một nút mới t 1 với cạnh t → t 1 . Tạo công suất (giới hạn trên) trên mỗi cạnh 1. Giới hạn dưới trên tất cả các cạnh sẽ là 0, ngoại trừ giới hạn dưới trên cạnh ee ∈ ESteGS0S0→ st1t → t1elà 1. Bây giờ hãy kiểm tra xem có tồn tại một luồng khả thi từ đến t thỏa mãn tất cả các giới hạn hay không (thử nghiệm này có thể được thực hiện trong thời gian đa thức, như đã đề cập ở trên). Nếu không có luồng thì không có đường dẫn đơn giản từ s đến t . Nếu có một luồng như vậy, thì việc tìm ra luồng đó mang lại một đường dẫn đơn giản từ s đến t bao gồm cạnh e , do đó tồn tại một đường dẫn đơn giản như vậy.StStSte
Làm thế nào để chúng ta giải quyết vấn đề "dòng chảy tối đa với giới hạn dưới"? Trong trường hợp này, chỉ có một cạnh có giới hạn dưới khác không. Do đó, chúng ta có thể sử dụng một cách tiếp cận tiêu chuẩn cho luồng mạng, tại mỗi điểm chúng ta chọn một đường dẫn tăng bằng cách tính các đường đi ngắn nhất trong biểu đồ dư - ngoại trừ ở đây chúng ta hỏi (đại khái) rằng một trong các đường tăng có bao gồm cạnh .e
Tôi đã học được ý tưởng này từ bài báo sau:
- Tìm một đường dẫn đơn giản với nhiều nút phải bao gồm . Hars Vardhan, Shreejith Billenahalli, Wanjun Huang, Miguel Razo, Arularasi Sivasankaran, Limin Tang, Paolo Monti, Marco Tacca và Andrea Fumagalli. Đại học Texas tại Dallas, Báo cáo kỹ thuật UTD / EE / 2/2009. Tháng 6 năm 2009.
(Đảm bảo đọc phiên bản techreport, không phải phiên bản đã xuất bản. Ý tưởng này được tìm thấy trong đoạn thứ hai của phần giới thiệu.)
Thật không may, tôi không biết làm thế nào để mở rộng kỹ thuật này để giải quyết vấn đề ban đầu của bạn, với trên-bound của bạn vào độ dài của con đường đơn giản.tôi
Ngoài ra, chúng tôi có thể giải quyết vấn đề của bạn một cách đơn giản bằng cách sử dụng lập trình tuyến tính số nguyên (ILP). Trong thực tế, người giải quyết ILP khá tốt trong nhiều vấn đề. Tuy nhiên, thời gian chạy trường hợp xấu nhất của chúng vẫn còn theo cấp số nhân, vì vậy điều này sẽ không đưa ra thuật toán với thời gian chạy trường hợp xấu nhất đa thức. Hãy cho tôi biết nếu bạn muốn tôi giải thích cách xây dựng điều này bằng ILP.