【发布时间】:2009-12-15 18:08:47
【问题描述】:
Dijkstra's 通常用于查找图中两个节点之间的最短距离。可以用它找到最小的spanning tree吗?如果有,怎么做?
编辑:这不是家庭作业,但我正在尝试理解旧练习考试中的一个问题。
【问题讨论】:
-
你使用 Greedy 来查找 MST。对于最短路径,您使用最优性原理(最优子结构),动态规划。在 DP 中,您会发现图表自下而上,并且每个阶段都是最优的。对于贪心,你只需选择一个贪心标准,你就会找到 MST。如果你了解 Greedy 和 DP,你真的能感受到其中的不同。 MST 不应包含 Cycle。最短路径可以包含循环。尝试了解如何找到它们的基本理论,您将更好地理解差异。最短路径是 NP 完备的,而 MST 不是。如果您可以使用 MST 来解决最短路径。那么 P=NP。
-
此评论不正确,因为最短路径肯定不是 NP 完整的。证明是 Dijkstra 的算法是多项式的。不要使用严格的 Dijkstra 算法和基于到一个节点的距离的优先级队列,而是使用基于边权重的优先级队列。在每一步添加权重最小且不创建循环的边界边。
标签: algorithm language-agnostic graph-theory dijkstra minimum-spanning-tree