所以,我理解在图中找到最长的简单路径的问题是NP难的,因为你可以通过将边权重设置为1并查看最长简单路径的长度是否等于来轻松解决哈密顿电路问题边数。
我的问题是:如果你拿一张图表,你会得到什么样的路径,找到最大边缘权重m
,用w
替换每个边缘权重m - w
,然后运行那个标准的最短路径算法?它显然不是最长的简单路径,因为如果是,那么NP = P,我认为类似的东西的证明会更复杂= P.
答案 0 :(得分:2)
如果你能解决负权重的最短路径问题,你会发现最长的路径,两者是等价的,这可以通过加权-w而不是w来实现
负权重的标准算法是Bellman-Ford算法。但是,如果图中存在循环使得边的总和为负,则算法将不起作用。在您创建的图表中,所有此类周期都具有负和权重,因此算法将不起作用。除非你没有循环,在这种情况下你有一棵树(或森林),这个问题可以通过动态编程来解决。
如果我们用m-w替换w的权重,这保证所有权重都是正的,那么可以通过标准算法找到最短路径。如果该图中的最短路径P具有k个边缘,则长度为k * m-w(P),其中w(P)是具有原始权重的路径的长度。该路径不一定是最长的路径,但是,在具有k个边缘的所有路径中,P是最长的路径。
答案 1 :(得分:0)
alt text http://dl.getdropbox.com/u/317805/path2.jpg
使用您的算法将上图转换为下图。
最长路径是上图中的红线。根据断开连接的方式和使用的算法,转换后的图形中的最短路径可以是蓝线或红线。因此,使用您提到的常量转换图形边缘权重不会产生显着结果。这就是为什么无论你有多聪明,都无法使用最短路径算法找到最长的路径。更简单的转换可以是否定所有边权重并运行算法。我不知道我是否已经回答了你的问题,但就路径属性而言,转换后的图形没有关于距离的任何有用信息。
然而,这种特殊的转变在其他领域很有用。例如,如果通过添加一个巨大的常量来设置多个约束,则可以强制算法在双向匹配中选择特定的边权重。