algorithm - Dijkstra 和 MST 的关系
问题描述
当我看到这个问题时,我想到了这个问题。为简单起见,我们可以将讨论限制在无向、加权、连通图上。很明显,如果我们从图中选择任意节点作为源,Dijkstra 不能保证产生 MST。但是,是否保证在无向、加权、连通图中必须存在一个节点,如果我们选择它作为源并应用 Dijkstra 算法,它将为该图生成一个 MST?也许你可以给出一个证明或反例。谢谢!
解决方案
但是,是否保证在无向、加权、连通图中必须存在一个节点,如果我们选择它作为源并应用 Dijkstra 算法,它将为该图生成一个 MST?
不,Dijkstra 的算法最小化了从单个节点到所有其他节点的路径权重。最小生成树最小化将所有节点连接在一起所需的权重之和。没有理由期望这些不同的要求会产生相同的解决方案。
考虑一个完整的图,其中任何两条边的权重之和超过任何一条边的权重。这迫使 Dijkstra 始终选择直接连接作为两个节点之间的最短路径。然后,如果图中权重最低的边并非都源自单个节点,则最小生成树将与 Dijkstra 将生成的任何树都不相同。
这是一个例子:
最小生成树由权重为 3(总权重为 9)的三个边组成。Dijkstra 算法返回的树将是直接连接到源节点的三个边中的任意一个(总权重为 10 或 11)。
推荐阅读
- javascript - 为什么原版 HTML/JS(和 React)使用 camelCase 进行样式设置,而 CSS 不使用?
- c# - C# IdentityUser 的基本虚拟属性不可见
- android - 输入到 tflite 模型的数据类型不匹配
- python - how to extract only time from datetime
- sql-server - How to detach data disk in Azure SQL VM
- swift - 有没有办法以编程方式打开/显示 applicationDockMenu
- html - 如何在 HTML 和 CSS 中加入法线(水平)和旋转线在同一点结束?
- java - 使用 Jackson 反序列化为字符串或对象
- javascript - How do I unsubscribe from inner observables in redux observable?
- reactjs - 如何在函数中评分时获得评分值