【算法设计与分析】dijkstra算法和prim算法有什么不同

版权声明:本文为博主原创文章,转载请标明出处 https://blog.csdn.net/C2681595858/article/details/86291742
  • 这里默认大家对两个算法过程相对比较熟悉,所以直接给出伪代码。
  • 如果大家对这两个算法不是很了解可以先看下我的这两篇博客
    dijkstra算法求最短路径
    prim算法求最小生成树
  • dijkstra算法是求最短路径的,而prim算法是求最小生成树的,这两个算法怎么能说有什么不同呢?
    其实对这两个算法有了解的同学比较清楚,他们两个非常相似。伪代码如下:
  • dijkstra:
    在这里插入图片描述
  • prim
    在这里插入图片描述
  • 请大家注意看伪代码中用红框框住的部分,dijkstra算法每次用 α [ u ] + L e \alpha [u]+L_{e} 更新优先队列中的 α \alpha [v]。而prim算法每次用u到v之间的权重更新v的key。也就是说,prim算法每次更新是不需要考虑它的父节点的信息,只关注父节点到本身的权重。
  • 为什么会这样呢?
  • 仔细分析一下,这是因为prim算法思想是求距离自己集合最近的路径,也就是说它求的是距离已经被弹出队列的元素最近的点。而dijkstra算法求得是距离原点最近的点,所以每次都要考虑父节点到原点的距离。

猜你喜欢

转载自blog.csdn.net/C2681595858/article/details/86291742