关于有权图的单源最短路径算法,时间复杂度的理解

 

 方法1:这个|V|的平方也就是|V| * |V|,我的理解是,先看一遍全部的结点(结点数为V),判断是否有未收集的dist并找到dist最小的那个结点,每次判断的时间复杂度是O(|V|),一共进行O(|V|)次判断,因为我们要把所有的结点都改成收集状态我们才会停止这个判断的循环,最坏的情况就是我们每次将一个未收集转换成收集,一个一个转,有V个结点就会转V次,那么判断次数就为O(|V|),所以判断的总时间复杂度为O(|V|^2)。

然后每次判断完后还会访问dist最小的那个结点的邻结点,这个访问的时间复杂度可以近似的认为是O(|E|),是跟E有关的,但是是多少E不好说,可能是5E,可能是4E,但随着E的增长,前面的系数对于增长的贡献是不如E的,所以O中我们可以只取E,即O(|E|)。

方法2:每次判断的时间复杂度为O(log|V|),实际上就是弹出最小堆并更新的过程,这个过程弹出并不耗时,更新的时间占整个过程的大头,也就是这个过程的时间复杂度就是更新的时间复杂度,也就是O(log|V|),还是跟方法1一样,判断O(|V|)次,那么判断的总时间复杂度就为O(|V|log|V|)。

每次判断完后,我们不仅要访问,访问的同时还要更新最小堆,也就是将更新的值重新插回去,插回去也就是更新最小堆,时间复杂度也就是O(log|V|),那么就是O(|E|log|V|)。方法1每次更新直接赋值就行,每次更新就是一个线性的O(1),所以访问的时间复杂度就是O(|E|)。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值