今天我读到longest path problem的算法简介,它在加权有向图中询问通过两个顶点的最长的简单路径是什么。作者使用了一个很好的例子,表明动态编程因最长的路径问题而失败,因为没有一个总是带有最优子结构的漂亮的最优结构。有评论说这个问题实际上是NP完全的。所以一定很难。
现在这里是我的问题:如果我们简单地将负权重分配给权重为k的每个边缘,那么如果不给每个边分配正权重k> 0,那该怎么办呢?然后每个“最长路径”将自动成为最短路径,并且如果根据定义在最短路径中没有循环,则在相应的最长路径中不应存在任何循环。因此,使用一个非常常见的技巧,我们“可以”将最长的路径问题转变为最短路径问题。
有人可以在推理中指出我的错误吗?我觉得有些事情一定是错的,但不知道它是什么。由于显而易见的原因,我的论证极不可能是正确的。阅读书中提供的伪代码,似乎最短路径的算法并不禁止使用负权重,毕竟通过添加足够大的常数来使其变为正数,所有事物都可以“提升”。我是算法的初学者,所以这个问题对专家来说可能是微不足道的。
答案 0 :(得分:0)
你的推理中的错误是这一行:
如果根据定义在最短路径中没有循环,则相应的最长路径中不应存在任何循环。
如果你有一个图表,其中所有边都有负权重(这可能发生在你正在描述的转换中)并且存在负周期,那么在该周期的任何两个节点之间没有最短路径,因为任何路径之间的任何路径他们可以通过越来越多次循环来降低成本。由于在这种情况下没有最短的路径,你的推理就会崩溃。
现在,您可以争辩说,您应该在节点之间寻找最短的简单路径(即没有重复边缘的路径)。不幸的是,这个问题也是NP难的,所以这种减少实际上不会给你任何东西。
希望这有帮助!
答案 1 :(得分:0)
如果根据定义在最短路径中没有循环,则应该 不是相应最长路径中的任何循环
...所以特定的原始问题在多项式时间内是可解的。如果特定的原始问题是DAG,则此方法在线性时间内解决它。
复杂性陈述并不是说所有图表都难以解决,只是有些图表。
从您自己的链接:
与可以解决的最短路径问题相比 在没有负权重循环的图中的多项式时间,最长 路径问题是NP难的,这意味着它无法解决 任意图的多项式时间,除非P = NP。
[...]
对于大多数图表,此转换无效,因为它会创建 -G中负长度的循环。但如果G是有向无环图, 那么就不能创建负循环,G中的最长路径也可以 通过应用最短的线性时间算法找到线性时间 -G中的路径,也是有向无环图。