【问题标题】:Longest Simple Path最长简单路径
【发布时间】:2010-10-17 14:06:22
【问题描述】:

所以,我知道在图中找到最长简单路径的问题是 NP-hard,因为您可以通过将边权重设置为 1 并查看最长简单路径的长度是否等于边数。

我的问题是:如果你画一张图,你会得到什么样的路径,找到最大边权重 m,将每个边权重 w 替换为 m - w,然后运行标准最短路径算法那?这显然不是最长的简单路径,因为如果是,那么 NP = P,我认为类似的证明会更复杂一些 =P。

【问题讨论】:

  • 这里提示一下:如果你在新图中找到一条长度为L的路径,并且它包含k条边,那么旧图中对应路径的长度是多少?
  • 应该是“mk - [sum(weight(i)) for each i in the path]”...我想我需要另一个提示
  • “什么样的路径”是什么意思?我不认为它有什么特别的意义。
  • @v3:我认为这是正确的答案。它不会是最长的简单路径,也不会是任何事物中最短的路径,这是肯定的。

标签: algorithm language-agnostic computer-science graph-theory theory


【解决方案1】:

如果你可以用负权重解决最短路径问题,你会找到一条最长路径,两者是等价的,这可以通过将权重设为 -w 而不是 w 来完成

负权重的标准算法是Bellman-Ford 算法。但是,如果图中存在一个循环使得边的总和为负,则该算法将不起作用。在您创建的图表中,所有此类循环的总和权重均为负,因此该算法将不起作用。当然,除非你没有循环,在这种情况下你有一棵树(或一片森林)并且问题可以通过动态规划来解决。

如果我们用 m-w 替换 w 的权重,保证所有的权重都是正的,那么可以通过标准算法找到最短路径。如果该图中的最短路径 P 有 k 条边,则长度为 k*m-w(P),其中 w(P) 是具有原始权重的路径的长度。这条路径不一定是最长的一条,然而,在所有有 k 条边的路径中,P 是最长的一条。

【讨论】:

  • 啊,我将新权重设置为m-w,而不是-w。最小的权重为 0。
  • "在所有长度为 k 的路径中,P 是最长的。" - 不是所有长度为 k 的路径都具有相同的长度吗?
  • 我在两个意义上使用“长度”,边的数量和权重的总和。我已经在编辑中澄清了这一点。
【解决方案2】:

alt text http://dl.getdropbox.com/u/317805/path2.jpg

使用您的算法将上图转换为下图。

上图中的最长路径是红线。根据打破关系的方式和您使用的算法,转换后的图形中的最短路径可能是蓝线或红线。因此,使用您提到的常数转换图边权重不会产生显着的结果。这就是为什么无论你多么聪明,使用最短路径算法都无法找到最长路径的原因。一个更简单的转换可能是否定所有边缘权重并运行算法。我不知道我是否回答了您的问题,但就路径属性而言,转换后的图没有任何有关距离的有用信息。

但是,这种特殊的转换在其他领域也很有用。例如,如果您有多个约束,您可以通过添加一个巨大的常数来强制算法在二重匹配中选择特定的边权重。

  • 编辑:我被告知要添加以下声明:上图不仅仅是关于物理距离。他们不需要持有三角不等式。谢谢。

【讨论】:

  • 很抱歉,您附上的图片现在好像不行了。也许您已将其从 Dropbox 中删除?
  • 我真的很想看照片
猜你喜欢
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2014-12-25
  • 1970-01-01
相关资源
最近更新 更多