【发布时间】:2013-11-08 00:16:34
【问题描述】:
在一个无向、未加权的图形中,我试图打印(存储在文件中)图形上给定 2 个顶点之间的所有可能连接路径,不包括循环。
当您考虑完整图时,此问题是 NP 完全问题。因为"(V-2)!" 2 个顶点之间有不同的路径。
但是,似乎可以使用时间复杂度为O(|V|+|E|) 的图形遍历 (DFS-BFS) 算法之一来实现,这是相当多项式的。
我对在多项式时间内解决 NP 完全问题感到困惑? 知道这里缺少什么吗?
【问题讨论】:
-
您的 O(|V|+|E|) 声明是错误的(我猜您误解了某些内容):制作 n+1 x n+1 网格图并询问路径数从左上角顶点到右下角顶点。显然,您可以通过向下移动 n 行和向右 n 列来到达那里,并且您可以以任何顺序混合这些移动,因此它们之间存在
(2n choose n)不同的路径,甚至不涉及任何加倍返回。 -
@j_random_hacker 我想我可以通过在记录当前路径的同时访问所有节点和所有边一次来打印所有可能的路径
-
但是会有多少条路径呢?例如。在我的示例图上?
-
所以 O(|V|+|E|) 仅对一条路径有效?复杂性必须乘以路径数?如果它是一个完整的图,它会是 v!*O(|V|+|E|) 吗?
-
我不知道你从哪里得到“O(|V|+|E|)”,但显然打印单个路径是 O(|V|+|E|)。如果问题是“在图表上打印所有可能的路径”,那么您当然需要考虑路径数量!