Liệt kê tất cả các cặp đường dẫn rời rạc


10

Với một đạo diễn đồ thị và hai đỉnh . Một cặp đường dẫn đơn giản từ đến là cạnh nhau nếu chúng không chia sẻ một cạnh.s , t V p 1 , p 2 s tG= =(V,E)S,tVp1,p2St

Sử dụng lưu lượng tối đa, thật dễ dàng để quyết định nếu có một cặp đường dẫn tách rời cạnh từ đến . Bây giờ, có một thuật toán trì hoãn thời gian đa thức để liệt kê tất cả các cặp đường dẫn tách rời cạnh từ đến không?t s tStSt


1
Không, vì có thể có nhiều con đường như vậy theo cấp số nhân.
Kaveh

6
@Kaveh: Tôi nghĩ rằng "thuật toán độ trễ đa thức" được phép mất thời gian theo cấp số nhân, miễn là độ trễ giữa các đầu ra là dài đa thức. Ví dụ, có một thuật toán trì hoãn đa thức liệt kê tất cả các nhóm tối đa theo thứ tự tăng dần, mặc dù số lượng các nhóm tối đa là theo cấp số nhân.
Robin Kothari

3
Có thể bao gồm các giải thích về độ trễ đa thức trong câu hỏi? Tôi không quen với nó cho đến khi tôi đọc bình luận của Robin.
Artem Kaznatcheev

@Robin, bạn nói đúng, tôi đã không chú ý đến từ "trì hoãn".
Kaveh

Câu trả lời:


6

Tôi tin rằng câu trả lời của Artem Kaznatcheev là đúng, nhưng nó không mang lại không gian đa thức. Vì vậy, đây là một cách tiếp cận khác sẽ làm việc tốt hơn một chút trong khía cạnh đó.

Sử dụng lưu lượng tối đa có thể giải quyết một vấn đề tổng quát hơn một chút: tìm một cặp đường dẫn tách rời cạnh từ một số đỉnh {s1, s2} sang một số đỉnh khác {t1, t2}, nhưng không kiểm soát đỉnh nguồn nào được kết nối đến đỉnh đích nào.

Giả sử chúng ta có một đồ thị G và các đỉnh s1, s2, t1, t2 mà chúng ta muốn liệt kê tất cả các cặp đường dẫn. Tìm một cặp đường dẫn P1, P2 và đặt e = (s1, v) là cạnh đầu tiên trên một trong những đường dẫn đó. Sau đó, chúng ta có thể chia không gian vấn đề thành hai bài toán con: các cặp đường dẫn sử dụng e giống như các đường dẫn từ {v, s2} đến {t1, t2} trong G-s1 và các cặp đường dẫn không sử dụng e giống như các đường dẫn từ {s1, s2} đến {t1, t2} trong Ge. Lặp lại trong cả hai bài toán con này và (để tránh trùng lặp) chỉ báo cáo một đường dẫn khi bạn ở dưới cùng của đệ quy.


1
Rõ ràng là thuật toán là độ trễ đa thức nếu chúng ta đợi cho đến khi đáy đệ quy?
Artem Kaznatcheev

Đệ quy sẽ lấy nhiều cấp độ từ dưới lên (vì mỗi cấp sẽ xóa một cái gì đó khỏi biểu đồ) và mỗi nhánh sẽ trả về ngay lập tức (vì nó không thể tìm thấy một cặp đường dẫn) hoặc thoát ra và trả lại một cái gì đó, vì vậy, nó không chỉ trì hoãn đa thức.
David Eppstein

5

Đây là lần đầu tiên tôi đọc về các thuật toán trì hoãn đa thức, vì vậy tôi không chắc chắn 100% câu trả lời của mình, nhưng tôi nghĩ một cái gì đó như sau sẽ hoạt động.

Chọn một số quy ước để biểu diễn các đường dẫn có tổng thứ tự tự nhiên được xác định trên đó. (Một ví dụ sẽ chỉ là liệt kê các đỉnh của đường dẫn và sắp xếp theo thứ tự từ vựng). Chọn cấu trúc dữ liệu tại chỗ yêu thích của bạn hỗ trợ tìm kiếm và chèn logarit (giả sử cây đỏ-đen). Đặt là biểu đồ của bạnD G<DG

Xác định thuật toán :F


F(S,t,G,*D) :

(ở đây có nghĩa là một tham chiếu đến cơ sở hạ tầng tại chỗ )D*DD

  1. chạy thuật toán đa thời gian của bạn để trả về một cặp đường dẫn tách rời với từ đến .P < Q s t(P,Q)P<QSt
  2. Nếu không có trong .D(P,Q)D

    2.1. Chèn vào (và đầu ra nếu bạn cho rằng xuất ra khi thuật toán chạy).D(P,Q)D

    2.2. Với mỗi cạnh chạybạnvE(PQ)F(S,t,G-{bạnv},*D)


DS,tV(G)S<tStF(S,t,G,*D)

PSPMộtCEPSPMộtCE


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.