在有向图中计算两个节点之间的简单路径的数量有多难?


29

有一个简单的多项式算法可以确定有向图中两个节点之间是否存在路径(只需使用例如深度优先搜索就可以进行常规图遍历)。

但是,令人惊讶的是,如果我们不想计算存在的数量而不想测试路径的数量,那么问题就会变得更加棘手。

如果我们允许路径重用顶点,那么有一种动态编程解决方案可以找到从stn条边的路径数量。但是,如果我们只允许不重复使用顶点的简单路径,那么我能想到的唯一解决方案是路径的蛮力枚举,这具有指数时间复杂性。

所以我问

  • 计算两个顶点之间的简单路径数难吗?
  • 如果是这样,那是NP完全的吗?(我说这是因为从技术上讲这不是决策问题...)
  • P中是否还有其他类似的难点问题?**

顺便说一句,我现在实际上已经知道了这个问题的答案,但是我很好奇,如果我在最初提出这个问题的时候问回来将会得到什么样的答案。
hugomg


@Suresh:我知道如何编码蛮力搜索。我的问题是是否有更有效的算法。无论如何,如果您对扰流板感兴趣,那么这个 SO问题将更加相似,甚至包括我的答案。
hugomg

Answers:


18

与计数问题相关的最常见的复杂度类别是#P。NP中显然确定是否存在从给定节点到另一个节点的简单路径。然后计算它们在#P中。

n!

您的前两个问题的答案是:是的,这很困难,它是#P-complete(ref)

Wikipedia 文章提供了相关事实:1)概率算法可用于近似#P完全函数,而这是上一篇文章中用于近似的算法。2)硬(#P完整)计数版本还存在其他容易出现的问题:

  • 查找(线性)与计算满足DNF公式2-SAT实例的所有分配
  • 查找(线性)与计算拓扑排序
  • 在二部图中找到(O(VE))与计算完美匹配

您已经知道,如果删除约束“简单路径”,问题将落入P(那么您必须通过图形大小的多项式来限制路径的长度,或者以一元形式给出边界)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.