2012-05-05 28 views
10

Ok, tôi đăng câu hỏi này vì bài tập này:graph - Dijkstra cho The Single-Nguồn Longest Đường dẫn

Chúng ta có thể thay đổi thuật toán Dijkstra để giải quyết đơn nguồn vấn đề con đường dài nhất bằng cách thay đổi tối thiểu để tối đa? Nếu có thì hãy chứng minh thuật toán của bạn đúng. Nếu không, hãy cung cấp một ví dụ.

Đối với bài tập này hay tất cả mọi thứ liên quan đến thuật toán Dijkstra, tôi giả sử không có trọng lượng tiêu cực trong đồ thị dưới. Nếu không, nó không có ý nghĩa nhiều, ngay cả đối với vấn đề đường đi ngắn nhất, Dijkstra không thể hoạt động bình thường nếu cạnh tiêu cực tồn tại.


Ok, trực giác của tôi đã trả lời nó cho tôi:

Vâng, tôi nghĩ rằng nó có thể được sửa đổi.

Tôi chỉ

  1. khởi khoảng cách mảng để MININT
  2. thay đổi distance[w] > distance[v]+weight để distance[w] < distance[v]+weight

Sau đó, tôi đã làm một số nghiên cứu để xác minh câu trả lời của tôi. Tôi tìm thấy bài đăng này:

Longest path between from a source to certain nodes in a DAG

Trước tiên tôi nghĩ câu trả lời của tôi đã sai vì bài viết ở trên. Nhưng tôi thấy rằng có lẽ câu trả lời trong bài viết ở trên là sai. Nó trộn lẫn Sự cố đường dẫn dài nhất một nguồn với Sự cố đường dẫn dài nhất.

Cũng trong wiki của Bellman–Ford algorithm, nó nói một cách chính xác:

Thuật toán Bellman-Ford tính đơn nguồn đường đi ngắn nhất trong một digraph quân gia quyền. Đối với đồ thị chỉ có trọng số cạnh không âm, thuật toán Dijkstra nhanh hơn cũng giải quyết được vấn đề. Do đó, Bellman-Ford được sử dụng chủ yếu cho các đồ thị có trọng số cạnh tiêu cực.

Vì vậy, tôi nghĩ câu trả lời của tôi là chính xác, đúng không? Dijkstra thực sự có thể là Các nguồn duy nhất Vấn đề đường dẫn dài nhất và các sửa đổi của tôi cũng đúng, phải không?

+0

@ Kristo, bạn có thể vui lòng có một cái nhìn? –

Trả lời

12

Không, chúng ta không thể - hoặc ít nhất, không có giảm/sửa đổi đa thức được biết đến - longest path problemNP-Hard, trong khi Dijkstra chạy trong thời gian đa thức!

Nếu chúng ta có thể tìm thấy một modfication để dijsktra để trả lời vấn đề lâu nhất đường dẫn trong thời gian đa thức, chúng ta có thể lấy được P=NP

Nếu không, sau đó cung cấp một phản ví dụ.

Đây là nhiệm vụ rất xấu. Ví dụ truy cập có thể cung cấp một sửa đổi cụ thể là sai, trong khi có thể có một sửa đổi khác nhau đó là OK.
Sự thật là chúng ta không biết nếu vấn đề con đường dài nhất có thể giải được trong thời gian đa thức hay không, nhưng giả định chung là - nó không phải là.


về chỉ cần thay đổi các bước thư giãn:

 A 
    /\ 
     1 2 
    / \ 
    B<--1---C 
edges are (A,B),(A,C),(C,B) 

Dijkstra từ A đầu tiên sẽ chọn B, và sau đó B là không bao giờ có thể truy cập - vì nó được ra khỏi bộ distances.

Ít nhất, người ta cũng sẽ phải thay đổi heap tối thiểu thành heap tối đa, nhưng nó sẽ có một ví dụ phản đối khác vì sao nó không thành công.


(1) có thể, có thể nếu P = NP có thể, nhưng rất khó xảy ra.

+0

amit, đây là những gì tôi đã nói về trong câu hỏi của tôi. Tôi nghĩ rằng vấn đề Con đường dài nhất khác với vấn đề Đường dẫn dài nhất có nguồn gốc. Trong bài toán "Đường dẫn dài nhất", chúng tôi cần tìm đường đi dài nhất trong toàn bộ biểu đồ. Nhưng trong câu hỏi của tôi ở trên, 'nguồn duy nhất 'có nghĩa là chúng ta được cho một đỉnh S, sau đó tìm ra con đường nào được định hướng dài nhất từ ​​S. Chúng là những vấn đề khác nhau, phải không? –

+1

ah, ok, tôi nghĩ tôi đã phạm sai lầm. Nếu vấn đề đường dẫn dài nhất có nguồn gốc có thể được giải quyết, thì chúng tôi chỉ cho mỗi đỉnh chúng tôi thực hiện đường dẫn dài nhất một nguồn, sau đó so sánh tất cả, sau đó giải quyết vấn đề đường dẫn dài nhất. Điều này là không thể vì vấn đề đường dẫn dài nhất là NP. ok, tôi đoán những gì tôi nghĩ sai. –

+0

bạn có thể vui lòng có thể sử dụng các từ đơn giản nhất để mô tả tại sao vấn đề đường dẫn dài nhất không thể được giải quyết nếu tôi thay thế MIN bằng MAX trong Dijkstra? –

5

Có, chúng tôi có thể. Và câu trả lời của bạn gần như chính xác. Ngoại trừ một điều.

Bạn giả sử không có trọng số âm. Trong trường hợp này thuật toán của Dijkstra không thể tìm thấy đường đi dài nhất.

Nhưng nếu bạn giả sử chỉ trọng số âm, bạn có thể dễ dàng tìm thấy đường đi dài nhất. Để chứng minh tính chính xác, chỉ cần lấy giá trị tuyệt đối của tất cả các trọng số và bạn nhận được chính xác thuật toán Dijkstra thông thường với trọng số tích cực.

+1

Tôi nghĩ câu trả lời của bạn đang thực hiện một mẹo. Nếu tôi chỉ giả định trọng số âm, con đường dài nhất giống như 'con đường ngắn nhất trong tất cả các trọng số tích cực'. Tôi không nghĩ rằng đó là những gì các excise đang tìm kiếm. –

+0

@ JacksonTale, vâng, đây chỉ là một mẹo. Nhưng nó không rõ ràng từ các văn bản excise, có nghĩa là gì. Nếu không, câu trả lời của amit rất tốt. –

+0

Cảm ơn bạn đã trả lời. Tôi đoán những gì excise thực sự có nghĩa là cho các vấn đề con đường dài nhất thực sự. Xấu của tôi để thêm một giả định như vậy. –

1

Nó hoạt động trong biểu đồ tuần hoàn theo hướng nhưng không có trong biểu đồ tuần hoàn. Kể từ khi con đường sẽ trở lại theo dõi và không có cách nào để tránh điều đó trong dijkstra của algo

Các vấn đề liên quan