Dijkstra最短路径算法构造的生成树是否一定为最小生成树

Dijkstra最短路径算法构造的生成树是否一定为最小生成树

问题描述:一连通无向图,边为非负权值,问用Dijkstra最短路径算法能否给出一棵生成树,这树是否一定为最小生成树?说明理由。

解答:Dijkstra最短路径算法能够给出一棵生成树,但该树不一定为最小生成树。虽然Dijkstra算法和Prim算法的思路与步骤较为相似,但两者的更新算法不一致,而其余部分完全一致。

Dijkstra算法对应的Min更新算法为:

if(Min[j] > Min[k] + G[k][j])
Min[j] = Min[k] + G[k][j];

而Prim算法对应的Min更新算法为:

if(Min[j] > G[k][j])
Min[j] = G[k][j]

为此,可考虑以下的反例:

对于以下的带权连通无向图
在这里插入图片描述

用Prim算法构造的一棵最小生成树为:

在这里插入图片描述

而用Dijkstra算法构造的一棵生成树为:

在这里插入图片描述

其中,Dijkstra算法的执行过程中,从v1到v3的最短路径选择的是v1->v3,而不是v1->v4->v3,原因是Min[3]=Min[4]+G[4][3],即v1到v3的初始最短距离与v1到v4的最短路径加上v4到v3的距离相等,因此在更新过程中保留v1->v3的最短路径为v1->v3而非v1->v4->v3,所以最后,构造的生成树的边权值之和为1+4+6=11,远大于用Prim算法构造的最小生成树边权值之和1+2+4=7。

  • 67
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值