在研究了这两个问题后,我无法断定它们之间的区别。
汉密尔顿路径
哈密顿路径是图形的两个顶点之间的路径,它只访问每个顶点一次。给定图G
和两个不同的节点S
和E
,G
中S
到E
的哈密尔顿路径是否存在?
我发现这个问题是NP-Complete
最短路径
在图论中,最短路径问题是在图中的两个顶点(或节点)之间找到路径的问题,使得其组成边缘的权重之和最小化。 这个问题是P
它们之间的实际区别是什么?他们的复杂程度如何计算?
答案 0 :(得分:6)
Hamiltonian Path问题实际上是在图中寻找最长的简单路径。很容易看出这两个问题基本相同(最长的简单路径和哈密顿路径)。这个问题确实是一个经典的NP完全问题。 由于从另一个(已经证明的)NP-硬问题到这个问题的多项式减少,因此是NP完全的,因此(从多项式减少的传递性)这个问题也是NP-Hard。因为它也在NP中,所以它是NP-Complete。
另一方面,最短路径是另一个,它询问从A点到B点的最短方式是什么,并且它在P中,因为有一个多项式时间算法可以解决它(Dijkstra's algorithm,Bellman-Ford,BFS用于非加权图表。
关于"And how is there complexity calculated?"
我假设你的意思是我们如何确定他们的复杂性类 - 在这种情况下,最短路径在P中,因为我们有一个确定性的多项式时间算法来解决它(一些如上所述),而汉密尔顿路径的复杂性类是NP完全的,因为它既是NP-Hard(存在来自另一个已证明的NP-Hard问题的多项式减少),也是NP(我们可以在非多项式时间内很容易地解决它确定性图灵机)。
请注意,我们不知道汉密尔顿路径是否在P中,因为我们不知道是否P=NP。
答案 1 :(得分:0)
任何节点之间的最长路径和最短路径之间的区别在于,最短路径问题具有最优的子结构,因此可以通过动态编程解决。最长路径问题没有最优的子结构,因此无法使用动态规划解决。如果可以从子问题的最优解中构造出最优解,那么该问题就具有最优子结构。 example
一个例子就是上面的图表。从q到t的最短路径包括从q到r的最短路径。但是,从q到t的最长路径是q-r-t,从q到r的最长路径是q-s-t-r,这不包括在q-r-t中。这是因为最长路径的子问题不是彼此独立的。从q到r的最长路径是q-s-r-t。从r到t的最长路径是r-q-s-t。这两个问题有重叠部分,因此它们不是独立的,因此该问题没有最优子结构,因此无法通过动态规划或贪婪算法来解决。