要扩展标题,我需要在非常大的无向图中的所有节点之间的所有简单(非循环)路径。
我能想到的最明显的优化是,一旦我计算了一对特定节点之间的所有路径,我就可以将它们全部反转,而不是在我需要另一种方式时重新计算。
我正在研究传递闭包和Floyd-Warshall算法,但如果我走下去,那么看起来我能做的最好的事情就是找到所有节点之间的最短路径。
有什么想法吗?现在我正在考虑在图中的每个节点上运行DFS,这在我看来显然不是最优的。
答案 0 :(得分:0)
我不明白你的想法背后的原因DFS明显低于最佳。事实上,DFS在这里显然是最佳的。
如果遍历图形,仅将分支限制为此分支中尚未访问过的顶点,则DFS树中的节点总数将等于起始顶点的简单路径数到所有其他顶点。由于所有这些路径都是输出的一部分,因此无法有效地改进算法,因为无法将复杂度降低到输出大小以下。
无论问题是什么或使用什么算法,都无法在多项式时间内输出因子数量的数据。