一、区别

最小生成树能够保证整个拓扑图的所有路径之和最小,但不能保证任意两点之间是最短路径。
最短路径是从一点出发,到达目的地的路径最小

二、实现方法

  1. 最小生成树
    最小生成树有两种算法来得到:Prims算法和Kruskal算法

Kruskal算法:
根据边的加权值以递增的方式,一次找出加权值最低的边来构建最小生成树,而且规定:每次添加的边不能造成生成树有回路,知道找到N-1个边为止。
Prims算法:
以每次加入一个的临界边来建立最小生成树,直到找到N-1个边为止。其规则为:以开始时生成树的集合(集合U)为起始的定点,然后找出与生成树集合邻接的边(集合V)中,加权值最小的边来建立生成树,为了确定新加入的边不会造成回路,所以每一个新加入的边,只允许有一个顶点在生成树集合中,重复执行此步骤,直到找到N-1个边为止。

  1. 最短路径(dijkstra算法、Floyd算法)
    算法描述
      (这里描述的是从节点1开始到各点的dijkstra算法,其中Wa->b表示a->b的边的权值,d(i)即为最短路径值)
      1. 置集合S={2,3,…n}, 数组d(1)=0, d(i)=W1->i(1,i之间存在边) or +无穷大(1.i之间不存在边)
      2. 在S中,令d(j)=min{d(i),i属于S},令S=S-{j},若S为空集则算法结束,否则转3
      3. 对全部i属于S,如果存在边j->i,那么置d(i)=min{d(i), d(j)+Wj->i},转2
      Dijkstra算法思想为:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将 加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。
      算法具体步骤 
      (1)初始时,S只包含源点,即S=,v的距离为0。U包含除v外的其他顶点,U中顶点u距离为边上的权(若v与u有边)或 ∞(若u不是v的出边邻接点)。
      (2)从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。
      (3)以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u(u U)的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值为顶点k的距离加上边上的权。
      (4)重复步骤(2)和(3)直到所有顶点都包含在S中。
    复杂度分析
      Dijkstra 算法的时间复杂度为O(n^2)
      空间复杂度取决于存储方式,邻接矩阵为O(n^2)

原文链接:https://blog.csdn.net/yahohi/article/details/6989646

最小生成树与最短路径的区别以及实现方法相关推荐

  1. 最小生成树、最短路径树

    一.最小生成树与最短路径树的区别 最小生成树能够保证整个拓扑图的所有路径之和最小,但不能保证任意两点之间是最短路径. 应用如网络部线,把所有的电脑(服务器?)都连起来用的网线(光纤?)最少,即用最小的 ...

  2. 图的遍历、最小生成树、最短路径

    数据结构和算法系列17 图 阅读目录 一,图的定义 二,图相关的概念和术语 三,图的创建和遍历 四,最小生成树和最短路径 五,算法实现 这一篇我们要总结的是图(Graph),图可能比我们之前学习的线性 ...

  3. python while if 区别_对python中for、if、while的区别与比较方法

    如下所示: if应用举例: #if 若条件成立,只执行一次 #if 条件:如果条件成立,执行条件后的代码块内容,不成立,直接跳过代码块 #判断如果年龄age小于18,输出未成年 #=一个等号表示赋值的 ...

  4. oracle怎么查别的库,ORACLE_SID、实例名和数据库名的区别及查看方法

    ORACLE_SID.实例名和数据库名的区别及查看方法 ORACLE_SID.实例名和数据库名的区别及查看方法 1.ORACLE_SID.实例名(SID)和数据库名的区别 操作系统环境变量(ORACL ...

  5. js中setTimeout的用法和JS计时器setTimeout与setInterval方法的区别和confirm方法

    setTimeout()在js类中的使用方法 setTimeout (表达式,延时时间) setTimeout(表达式,交互时间) 延时时间/交互时间是以豪秒为单位的(1000ms=1s) setTi ...

  6. cont char *p 和 char* const p 区别及记忆方法

    /* cont char *p 和 char* const p 区别及记忆方法 const char *p = "hello"; 和 char const *p = "h ...

  7. Python中NaN、nan和NAN的区别及使用方法

    Python中NaN.nan和NAN的区别及使用方法 Python中的NaN(Not a Number)是一个特殊的浮点数值,用于表示非数值型计算结果或无限大的运算结果,常用于科学计算.数据分析等领域 ...

  8. PS中色相饱合度/可选颜色/色彩平衡/曲线的区别和运用方法详解

    http://www.jb51.net/photoshop/374517.html PS中色相饱合度/可选颜色/色彩平衡/曲线的区别和运用方法详解 整体思路: 1.使用颜色混合模式营造照片基调. 2. ...

  9. 对象浅拷贝和深拷贝有什么区别与实现方法

    在JS中,除了基本数据类型,还存在对象.数组这种引用数据类型. 基本数据类型有number,string,boolean,null,undefined五类. 基本数据类型 名值存储在栈内存中 当b=a ...

最新文章

  1. 1.6.2 java路径下载_《我的世界1.6.2》官方下载 单机我的世界1.6.2中文整合版_SJ3G游戏中心...
  2. Yii AR Model CRUD数据库操作
  3. 基于 Kubernetes 的 FaaS 平台开源实现——Kubeless 的应用实践
  4. 源码免杀处理的技巧与tips
  5. Django 模板中变量、过滤器、标签的使用方法
  6. shell linux中shell脚本编写俄罗斯方块
  7. Redis Zui佳实践:7个维度+43条使用规范,带你彻底玩转Redis
  8. win7 做无盘服务器配置,两种方法轻松实现无盘安装Win7系统
  9. Unity导出转换微信小游戏
  10. 吴恩达—机器学习的六个核心算法
  11. hadoop 查看文件大小以及文件数
  12. 减法器运算电路公式推导
  13. hive根据日期算哪一年的第几周(年周)以及算周几星期几
  14. python聊天室设计_如何使用 Python 开发一个聊天室?
  15. 微博泄露个人信息,须加强信息安全意识
  16. 检验特殊字符java_java中文及特殊字符的校验方法
  17. 深入剖析ReentrantLock公平锁与非公平锁源码实现
  18. Word如何添加批注
  19. Unity 使用ContentSizeFitter刷新不及时的问题
  20. linux 删除行首空格

热门文章

  1. BZOJ4723[POI2017]Flappy Bird——模拟
  2. 用python爬虫抓站的一些技巧总结
  3. My Goal For SE
  4. Android学习—补间动画(渐变动画)
  5. velocity 继续之 语法学习篇
  6. 记载下这个题中的语法(对这些语法的使用不熟悉)
  7. leetcode4两数相加
  8. Python学习笔记:入门(1)
  9. CUDA从入门到精通(三):必备资料
  10. Maple 公式推导