Biểu đồ con chứa tất cả các nút và các cạnh là một phần của các đường dẫn đơn giản có giới hạn độ dài trong một bản đồ


8

Lưu ý: Tôi đã đăng một câu hỏi tương tự liên quan đến đồ thị vô hướng .

Được

  • Một sơ đồ G không có nhiều cạnh hoặc vòng lặp
  • Một nút nguồn s
  • Một nút mục tiêu t
  • Độ dài đường dẫn tối đa l

Tôi đang tìm G - Một sơ đồ con của G chứa bất kỳ nút nào và bất kỳ cạnh nào trong G (và chỉ các nút đó), là một phần của ít nhất một đường dẫn đơn giản từ s đến t có độ dài l .

Lưu ý rằng tôi không cần liệt kê các đường dẫn.


Có nhiều ràng buộc hơn cho vấn đề của bạn? Hãy nhớ lại rằng vấn đề sau đây là NP-đầy đủ: Cho sơ đồ và các đỉnh s , t , v , có tồn tại một đường dẫn ( s , t ) cũng chứa v không? Gs,t,v(s,t)v
Kristoffer Arnsfelt Hansen

@KristofferArnsfeltHansen, thật thú vị! Bạn có muốn thêm câu đó làm câu trả lời và cung cấp tài liệu tham khảo cho kết quả đó không? Có vẻ như nó trả lời câu hỏi ban đầu trong phủ định.
DW

@KristofferArnsfeltHansen: Không còn ràng buộc nào nữa.
Lior Kogan

Câu trả lời:


6

Như câu hỏi đã nêu, có là một phần của đầu vào, vấn đề là N P -hard. Điều này diễn ra như một trường hợp đặc biệt của việc phân loại lớp các mẫu mà vấn đề đồng nhất hóa biểu đồ con được định hướng là N P -complete bởi Fortune, Hopcroft, và bài báo của Wyllie: Vấn đề biến đổi hình dạng đồ thị con theo hướng .lNPNP

Cụ thể, vấn đề sau đây là -complete: Cho đồ thị có hướng G và các đỉnh s , t , v , có tồn tại một (đơn giản) ( s , t ) -path qua v không?NPGs,t,v(s,t)v


Làm thế nào nó phù hợp với giải pháp được chấp nhận ở đây? stackoverflow.com/questions/10825249/ ( Có phải NP-hard chỉ khi đồ thị được định hướng?
Lior Kogan

1
Chính xác, vấn đề trên có thể được giải quyết một cách hiệu quả cho biến thể khi đồ thị không bị ảnh hưởng như được mô tả trong câu trả lời bạn liên kết đến.
Kristoffer Arnsfelt Hansen

0

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 0s 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 eeEsteGs0s0st1tt1elà 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:

(Đả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.l


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.


1
Cảm ơn. Cũng xem tại đây: stackoverflow.com/questions/10825249/
Kẻ

1
Vấn đề tìm đường dẫn đơn giản thông qua một cạnh được chỉ định trong biểu đồ có hướng cũng là N P -hard. Đối số trong bài báo mà bạn tham khảo ở trên là thiếu sót: Một luồng khả thi có thể là một đường dẫn đơn giản tránh cạnh được chỉ định cùng với một chu kỳ thông qua cạnh được chỉ định. Một luồng như vậy có thể tồn tại ngay cả khi không có đường dẫn đơn giản qua cạnh được chỉ định. (s,t)NP
Kristoffer Arnsfelt Hansen

0

Chúng ta có thể tính toán sơ đồ con bằng hai lần tìm kiếm đầu tiên và quét qua các nút và cạnh trong thời gian O ( V + E ) .GO(V+E)

Chúng tôi thực hiện tìm kiếm đầu tiên từ s trong để có được đánh số BFS d s ( v ) cho mỗi nút v trong G . Số BFS biểu thị số cạnh trong đường dẫn ngắn nhất từ s đến v . Chúng tôi cũng thực hiện tìm kiếm theo chiều rộng đầu tiên từ t theo chuyển vị của G (đó là biểu đồ có cạnh ( v , u ) cho mỗi cạnh ( u , v ) trong G ) để lấy số BFS d t (Gds(v)vGsvtG(v,u)(u,v)G cho mỗi nút v trong G .dt(v)vG

Đối với mỗi nút trong G, đường dẫn đơn giản ngắn nhất từ s đến t đi qua v có độ dài d s ( v ) + d t ( v ) .vStvdS(v)+dt(v)

Biểu đồ con chứa nút vG'v từ khi và chỉ khi d s ( v ) + d t ( v ) l và một cạnh ( u , v ) khi và chỉ khi d s ( u ) + d t ( v ) l - 1 .GdS(v)+dt(v)tôi(bạn,v)dS(bạn)+dt(v)tôi-1


5
Nó có thể trả về các đường dẫn không đơn giản (ví dụ: đối với biểu đồ s <-> a <-> b <-> c <-> t; b <-> d: nút d là ngõ cụt và không nên là một phần của giải pháp).
Lior Kogan

0

Dưới đây là một thuật toán đơn giản FPT (nơi là tham số), mà làm việc cho cả đạo diễn và các trường hợp vô hướng trong thời gian O ( 2 lm ( n + m ) ) , mà có thể khả thi nếu đồ thị của bạn là lớn nhưng l là đủ nhỏ Trong câu trả lời khác của tôi, tôi đưa ra một thuật toán đa thời gian cho trường hợp không xác định.tôiÔi(2tôim(n+m))tôi

Đầu tiên, câu hỏi tương đương (tối đa một yếu tố trong thời gian chạy) để hỏi liệu có một đường dẫn kích thước tối đa l đi qua một số cạnh cụ thể e không . Tiếp theo, ý tưởng là buộc sự đơn giản của đường dẫn bằng cách phân vùng các đỉnh thành những đỉnh có thể xuất hiện trước cạnh được kiểm tra và những đường chỉ có thể xuất hiện sau đường đi.mle

Foreach $e=(u,v)\in E$: 
a. do for $O(2^l)$ times:
  1. Compute a random partition of the vertices set $V=(S,V\setminus S)$ 
   such that $s,u\in S$, $v,t\not \in S$ (and every other vertex is in $S$ w.p. 1/2).
  2.Find the shortest path from $s$ to $u$ in the subgraph induced by $S$.
    And the shortest path from $v$ to $t$ in the subgraph of $V\setminus S$. 
  3.If the sum of distances is no more than $l-1$, add $e$ to the output graph.

Phân tích
a. Rõ ràng, nếu không có đường dẫn đơn giản có kích thước trong G đi qua e , thuật toán sẽ không trả về nó.tôiGe

b. Nếu có đường dẫn như vậy, nó sẽ phân vùng chính xác (tức là tất cả các đỉnh trước sẽ ở S và phần còn lại trong V S ) wp 2 - l , do đó, nếu chúng ta chạy phân vùng lặp O ( 2 l ) lần chúng ta ' sẽ khám phá nó với xác suất cao.bạnSVS2-tôiÔi(2tôi)

Derandomization

Nếu bạn sẵn sàng trả cho thời gian chạy, thì nó có thể bị bỏ qua như sau:2potôiytôiog(tôi)

Lấy một (n,tôi) -universal-set và thay thế giai đoạn phân vùng ngẫu nhiên bằng cách chạy trên tất cả các chuỗi trong tập phổ quát, diễn giải là tập các đỉnh có giá trị trong chuỗi là 1. Kích thước của tập phổ quát là O ( 2 l + l o g 3 ( l )p o l y ( n ) ) mà quyết định thời gian chạy.SO(2l+log3(l)poly(n))

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.