图 Graph-图的相关算法
2018-03-06 17:42:02
一、最短路问题
问题描述:在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径。
- 这条路径就是两点之间的最短路径 (Shortest Path)
- 第一个顶点为源点 (Source)
- 最后一个顶点为终点 (Destination)
问题分类:
- 单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径。
- (有向)无权图
- (有向)有权图
- 多源最短路径问题:求任意两顶点间的最短路径。
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-图的相关算法相关推荐
- 图(Graph)-图的存储
1.图的存储类型 顺序存储-邻接矩阵 链式存储-邻接表 9:19 2.用邻接矩阵存储的方式表示无向图的结构 2.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图. 一个数组存储图中的顶点信息: ...
- 图(Graph)-图的相关概念
目录 1 图的定义与术语 2 图的分类 2.1 无向图的定义与术语 2.2 有向图的定义与术语 3 图的其他术语 3.1 权 3.2 网 3.3 稀疏图 3.4 稠密图 3.5 子图 3.6 度 3. ...
- 数据结构(二十一)——图和图的应用
文章目录 前言 图(graph) 1)图的基本概念及特性 2)图的描述 a. 无权图描述 b. 加权图描述 3)图的类实现 4)图的遍历 a. 广度优先搜索 b. 深度优先搜索 c. 两种搜索算法的比 ...
- 【算法学习】图相关算法编程实现-深度优先遍历和广度优先遍历
一.图的表示 图G=(V,E).要表示一个图,通常有两种方法:邻接表和邻接矩阵.两种方法都既可以表示有向图,也可以表示无向图. 邻接表表示由一个包含|V|个列表的数组组成,其中每个列表对应V中的一个顶 ...
- 数据结构与算法(python):图(Graph)的基本概念及应用
参考自 MOOC数据结构与算法Python版 本章代码: https://github.com/HuiFang-hub/-/tree/main. 目录 一.图Graph的概念 1.1 互联网 1.2 ...
- C语言实现Graph图的算法(附完整源码)
C语言实现Graph图的算法 C语言实现Graph图的算法完整源码(定义,实现) C语言实现Graph图的算法完整源码(定义,实现) #ifndef _GRAPH_H #define _GRAPH_H ...
- 算法基础:图的相关算法知识笔记
一.图的相关算法 1.图的分类知识 如下图: 2.生成树概念 对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树. 连通图的生成树具有这样的特征:边的数量 = 顶点数 - ...
- 【Graph】NetworkX官方基础教程:图的生成与相关操作
NetworkX官方基础教程:图的生成与相关操作 1. Graph生成和graph操作 2. 分析图 3. 画图 参考资料 本文作为对图结构和复杂网络的快速上手,内容包括基于NetworkX进行图的生 ...
- 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】
图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...
- 数据结构与算法学习笔记——图(Graph)
什么是图: 无向图:可以理解QQ中的互加好友 无向图: 可以理解为微博中的关注 图的一些概念: 顶点:图中的元素(A,B,C,D....) 边: 图中的一个顶点可以与任意其他顶点建立连接关系,这种建立 ...
最新文章
- 学业水平考试b能上985吗_河南单招哪些学院好考?哪些专业能录取?
- c++ time函数_Python22个构造函数法助力数据挖掘与分析
- 云原生时代, Kubernetes 多集群架构初探
- 腾讯首次公布微信最全用户数据【完整版】
- PHPCMS v9设置文章的审核功能
- Android 5.1 Settings源码简要分析
- 下面不属于python保留字_下面不属于Python保留字的是:?????????????????????????????????...
- boost::fusion::traits用法的测试程序
- access导入链接快还是导入表快_Go 语言设计哲学之十三:理解包导入路径的含义...
- 深度学习之基于opencv和CNN实现人脸识别
- java程序员的发展之路和职业规划
- 设计模式的C语言应用-导言-第一章
- 【spring】spring的事务传播性 hibernate/jpa等的事务隔离性
- 【工程项目经验】Bash On Windows(WSL)无法运行32Bit程序
- python教程百度云盘-Python 模拟登陆百度云盘实战教程
- WebSocket 实现聊天室业务
- android sns空间代码,Android视频分享SNS类APP完整源码(服务端+客户端)
- PCB中的SOLD MASK和阻抗开窗
- Right-BICEP测试四则运算2
- 如何屏蔽WPS广告弹窗
热门文章
- binlog日志整理
- java点名代码滚动_经典案例实现-点名器
- 比较三个数,求最大数字 ( 应用条件运算符:?)
- 三 APPIUM Android自动化 测试初体验(转)
- 帮助开发者快速创建响应式布局的Boilerplate - Responsive Boilerp...
- VS2010 在Win 7 附加w3wp.exe进程进行调试
- hbase shell基础和常用命令详解
- Deepin Linux 设置开机自动进入命令行模式
- 使用jvisualvm通过JMX的方式监控远程JVM运行状况
- 恋恋风辰 对于redis底层框架的理解(一)