簡體   English   中英

是否可以使用Dijkstra的最短路徑算法找到最短的哈密頓路徑? (在多項式時間內)

[英]Is it possible to use Dijkstra's Shortest Path Algorithm to find the shortest Hamiltonian path? (in Polynomial Time)

我已經讀過,發現圖中是否存在漢密爾頓路徑的問題是NP完全的,並且由於Dijkstra的最短路徑算法是在多項式時間內運行的,因此無法對其進行修改以找到最短的漢密爾頓路徑。 (此邏輯有效嗎?)

但是,如果在無向圖上給定兩個節點(例如A和Z)(所有邊的成本均為非負值),並且給定的節點(A和Z)至少存在一條哈密頓路徑,該怎么辦?作為終點。 給定這些規范,現在是否可以修改Dijkstra的算法以找到以A和Z為端點的最短哈密頓路徑? (在多項式時間內)

注意:我只關心從兩個節點中查找最短的漢密爾頓路徑。 例如,如果有一個包含26個節點(標記為A到Z)的圖,則通過所有點但從A開始並在Z結束的最短路徑是什么。(我不關心查找其他具有不同漢密爾頓路徑的路徑端點,僅A和Z)

附加問題:如果答案為“否”,但還有另一種算法可用於解決此問題,它是什么算法,時間復雜度是多少?

(注意:即使我正在尋找漢密爾頓路徑,該問題也將“ hamiltonian-cycle”作為標簽,因為我沒有足夠的代表數來制作標簽“ hamiltonian-path”。但是,假設A和Z完全由一條邊連接,則可以通過找到最短的哈密頓循環然后刪除連接A和Z的邊來找到最短的哈密頓路徑

但是,如果在無向圖上給定兩個節點(例如A和Z)(所有邊的成本均為非負值),並且給定的節點(A和Z)至少存在一條哈密頓路徑,該怎么辦?作為終點。 給定這些規范,現在是否可以修改Dijkstra的算法以找到以A和Z為端點的最短哈密頓路徑? (在多項式時間內)

您打算如何修改它? 僅當A和Z之間只有一條路徑並且訪問圖形上的所有其他點時,此方法才有效。 否則,Dijkstra將終止一些較短的路徑,該路徑僅訪問節點的某些子集。 如果在A和Z之間存在哈密頓路徑,則可以解決最長路徑問題,但這也是NP問題。

不,這是不可能的。 您簡化的問題仍然是NP難題。 減少旅行推銷員的費用:

給定一個圖(V, E) ,找到恰好訪問v in V每個v in V的最短路徑。 v in V的任意頂點v in V v分為兩個頂點v_sourcev_sink 使用您的算法查找從v_sourcev_sink的最短v_source路徑P P是從v開始和結束的最短周期,它訪問v in V每個v in V 由於P是一個循環,因此“起始”頂點無關緊要。 因此, P也是旅行商問題的解決方案。

減少顯然是多項式時間(實際上是常數),所以您的問題是NP難的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM