2018-03-06 17:42:02

一、最短路问题

问题描述:在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径。

  • 这条路径就是两点之间的最短路径 (Shortest Path)
  • 第一个顶点为源点 (Source)
  • 最后一个顶点为终点 (Destination)

问题分类:

  1. 单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径。

    1. (有向)无权图
    2. (有向)有权图
  2. 多源最短路径问题:求任意两顶点间的最短路径。

1)无权图的单源最短路算法

BFS可以解决这类问题。

2)有权图的单源最短路算法

Dijkstra算法可以解决不带负值边的单源最短路问题。

3)多源最短路算法

此算法由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在“Communications of the ACM”上。同年Stephen Warshall(史蒂芬·沃舍尔)也独立发表了这个算法。Floyd这个牛人是朵奇葩,他原本在芝加哥大学读的文学,但是因为当时美国经济不太景气,找工作比较困难,无奈之下到西屋电气公司当了一名计算机操作员,在IBM650机房值夜班,并由此开始了他的计算机生涯。

我们来想一想,根据我们以往的经验,如果要让任意两点(例如从顶点a点到顶点b)之间的路程变短,只能引入第三个点(顶点k),并通过这个顶点k中转即a->k->b,才可能缩短原来从顶点a点到顶点b的路程。那么这个中转的顶点k是1~n中的哪个点呢?甚至有时候不只通过一个点,而是经过两个点或者更多点中转会更短,即a->k1->k2b->或者a->k1->k2…->k->i…->b。比如上图中从4号城市到3号城市(4->3)的路程e[4][3]原本是12。如果只通过1号城市中转(4->1->3),路程将缩短为11(e[4][1]+e[1][3]=5+6=11)。其实1号城市到3号城市也可以通过2号城市中转,使得1号到3号城市的路程缩短为5(e[1][2]+e[2][3]=2+3=5)。所以如果同时经过1号和2号两个城市中转的话,从4号城市到3号城市的路程会进一步缩短为10。通过这个的例子,我们发现每个顶点都有可能使得另外两个顶点之间的路程变短。

Floyd算法就是首先只允许经过0号结点,看看是否会变短,如果变短就加之修改,然后只允许经过0,1号结点,看看是否变短,加之修改,直到中间结点到达为所有可能的结点。

二、最小生成树 (Minimum Spanning Tree)

什么是最小生成树?

最小生成树算法使用贪心的思想,每一步都选权重最小的边。

  • Prim算法 — 让一棵小树长大

首先随机选择起始点,然后不断将当前结点往外生长,寻找最短的结点加入。

  • Kruskal算法 — 将森林合并成树

三、拓扑排序

拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序。

获得一个拓扑序的过程就是拓扑排序

AOV(Activity On Vertex)如果有合理的拓扑序,则必定是有向无环图(Directed Acyclic Graph, DAG)

举个例子,将计算机学院的课程按照拓扑序进行输出。

一种聪明的算法就是将入度为0的结点放到队列。

关键路径问题:

转载于:https://www.cnblogs.com/TIMHY/p/8515741.html

图 Graph-图的相关算法相关推荐

  1. 图(Graph)-图的存储

    1.图的存储类型 顺序存储-邻接矩阵 链式存储-邻接表 9:19 2.用邻接矩阵存储的方式表示无向图的结构 2.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图. 一个数组存储图中的顶点信息: ...

  2. 图(Graph)-图的相关概念

    目录 1 图的定义与术语 2 图的分类 2.1 无向图的定义与术语 2.2 有向图的定义与术语 3 图的其他术语 3.1 权 3.2 网 3.3 稀疏图 3.4 稠密图 3.5 子图 3.6 度 3. ...

  3. 数据结构(二十一)——图和图的应用

    文章目录 前言 图(graph) 1)图的基本概念及特性 2)图的描述 a. 无权图描述 b. 加权图描述 3)图的类实现 4)图的遍历 a. 广度优先搜索 b. 深度优先搜索 c. 两种搜索算法的比 ...

  4. 【算法学习】图相关算法编程实现-深度优先遍历和广度优先遍历

    一.图的表示 图G=(V,E).要表示一个图,通常有两种方法:邻接表和邻接矩阵.两种方法都既可以表示有向图,也可以表示无向图. 邻接表表示由一个包含|V|个列表的数组组成,其中每个列表对应V中的一个顶 ...

  5. 数据结构与算法(python):图(Graph)的基本概念及应用

    参考自 MOOC数据结构与算法Python版 本章代码: https://github.com/HuiFang-hub/-/tree/main. 目录 一.图Graph的概念 1.1 互联网 1.2 ...

  6. C语言实现Graph图的算法(附完整源码)

    C语言实现Graph图的算法 C语言实现Graph图的算法完整源码(定义,实现) C语言实现Graph图的算法完整源码(定义,实现) #ifndef _GRAPH_H #define _GRAPH_H ...

  7. 算法基础:图的相关算法知识笔记

    一.图的相关算法 1.图的分类知识 如下图: 2.生成树概念 对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树. 连通图的生成树具有这样的特征:边的数量 = 顶点数 - ...

  8. 【Graph】NetworkX官方基础教程:图的生成与相关操作

    NetworkX官方基础教程:图的生成与相关操作 1. Graph生成和graph操作 2. 分析图 3. 画图 参考资料 本文作为对图结构和复杂网络的快速上手,内容包括基于NetworkX进行图的生 ...

  9. 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】

    图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...

  10. 数据结构与算法学习笔记——图(Graph)

    什么是图: 无向图:可以理解QQ中的互加好友 无向图: 可以理解为微博中的关注 图的一些概念: 顶点:图中的元素(A,B,C,D....) 边: 图中的一个顶点可以与任意其他顶点建立连接关系,这种建立 ...

最新文章

  1. 学业水平考试b能上985吗_河南单招哪些学院好考?哪些专业能录取?
  2. c++ time函数_Python22个构造函数法助力数据挖掘与分析
  3. 云原生时代, Kubernetes 多集群架构初探
  4. 腾讯首次公布微信最全用户数据【完整版】
  5. PHPCMS v9设置文章的审核功能
  6. Android 5.1 Settings源码简要分析
  7. 下面不属于python保留字_下面不属于Python保留字的是:?????????????????????????????????...
  8. boost::fusion::traits用法的测试程序
  9. access导入链接快还是导入表快_Go 语言设计哲学之十三:理解包导入路径的含义...
  10. 深度学习之基于opencv和CNN实现人脸识别
  11. java程序员的发展之路和职业规划
  12. 设计模式的C语言应用-导言-第一章
  13. 【spring】spring的事务传播性 hibernate/jpa等的事务隔离性
  14. 【工程项目经验】Bash On Windows(WSL)无法运行32Bit程序
  15. python教程百度云盘-Python 模拟登陆百度云盘实战教程
  16. WebSocket 实现聊天室业务
  17. android sns空间代码,Android视频分享SNS类APP完整源码(服务端+客户端)
  18. PCB中的SOLD MASK和阻抗开窗
  19. Right-BICEP测试四则运算2
  20. 如何屏蔽WPS广告弹窗

热门文章

  1. binlog日志整理
  2. java点名代码滚动_经典案例实现-点名器
  3. 比较三个数,求最大数字 ( 应用条件运算符:?)
  4. 三 APPIUM Android自动化 测试初体验(转)
  5. 帮助开发者快速创建响应式布局的Boilerplate - Responsive Boilerp...
  6. VS2010 在Win 7 附加w3wp.exe进程进行调试
  7. hbase shell基础和常用命令详解
  8. Deepin Linux 设置开机自动进入命令行模式
  9. 使用jvisualvm通过JMX的方式监控远程JVM运行状况
  10. 恋恋风辰 对于redis底层框架的理解(一)