Chapter 4 图
Chapter 4 图
.
1- 图的存储结构

无向图:对称
有向图:……
2- 图的遍历
1 深度优先搜索(DFS)
类似于二叉树的先序遍历
2 广度优先搜索(BFS)
类似于二叉树的层序遍历
3- 最小(代价)生成树(针对无向图)MST
1 Prim算法 O(|V2|)
只与顶点数有关,与边无关
2 Kruskal算法 O(|E|log|E|)
只与边数有关,与顶点数无关
//什么样的图最小生成树唯一?图中所有权值不相等。
4- 最短路径
1 Dijkstra O(|V2|)
单源最短路径
l 要找出所有节点的最短路径,需要对每一个结点用Dijkstra O(|V3|)
l 边上有负权值,不适用
2 Floyd O(|V3|)
求解任意一对顶点间的最短距离
l 允许带有负权值的边,但不允许有负权值边组成的回路
5- 拓扑排序 O(|V|+|E|)
1 AOV网
以顶点表示活动,以边表示活动的先后次序,且没有回路的有向图
2 对有向无环图的拓扑排序
可能不唯一:如果有多个入度为0的顶点,可任选一个输出
6- 关键路径
1 AOE网
活动在边上的网,与AOV网相比
相同点:都是有向无环图
不同点:AOE网边表示活动、有权值,表示活动持续时间。顶点表示事件,事件是图中新活动开始旧活动结束的标志。
AOV网边表示活动之间的相互关系,无权值,顶点表示活动。
l 只存在一个入度为0的点称为源点
求关键路径的步骤:
1 拓扑排序
2 事件Vk的最早发生时间Ve(k)
V1->Vi max
3 时间Vk的最迟发生时间Vl(k)
从后向前算 min = 后-max
4 活动ai的最早开始时间e(i)
边上首结点的Ve(k)
5 活动ai的最迟开始时间l(i)
边上尾结点的Vl(k)-ai
6 d = l(i) - e(i)
//可以通过加快那些在所有关键路径上的关键活动来缩短工期
//关键路径不唯一
注:
1- 邻接矩阵的空间复杂度O(|V2|)
2- 邻接表—方便找出所有邻边(不唯一)
邻接矩阵—给定的两个顶点是否存在边
3- 十字链表—有向图的链式存储
容易求得顶点的入度和出度
图的十字链表表示不唯一,但一个十字链表可以唯一确定一个图。
4- 邻接多重表是无向图的另一种链式存储结构
5- BFS借助一个辅助队列,空间复杂度是O(|V|)
邻接表O(|V|+|E|),邻接矩阵O(|V2|)
6- DFS借助一个栈,空间复杂度是O(|V|)
邻接表O(|V|+|E|),邻接矩阵O(|V2|)
7- 当各边权值相等时,广度优先算法可以解决单源最短路径问题。
8- Prim O(|V2|)
Kruskal O(|E|log|E|)
Dijkstra O(|V2|)
Floyd O(|V3|)
拓扑 O(|V|+|E|)
9- 最短路径一定是简单路径
10- 可以判断有向图是否有环:深度优先搜索,拓扑排序
Chapter 4 图的更多相关文章
- Chapter 7(图)
1.Prim算法生成最小生成树 //Prim算法生成最小生成树 void MiniSpanTree_Prim(MGraph G) { int min,i,j,k; int adjvex[MAXVEX] ...
- 【译】x86程序员手册13-第5章 内存管理
Chapter 5 Memory Management 内存管理 The 80386 transforms logical addresses (i.e., addresses as viewed b ...
- 《算法导论》习题解答 Chapter 22.1-5(求平方图)
一.邻接矩阵实现 思路:如果是邻接矩阵存储,设邻接矩阵为A,则A*A即为平方图,只需要矩阵相乘即可: 伪代码: for i=1 to n for j=1 to n for k=1 to n resul ...
- 《算法导论》习题解答 Chapter 22.1-3(转置图)
一.邻接表实现 思路:一边遍历,一边倒置边,并添加到新的图中 邻接表实现伪代码: for each u 属于 Vertex for v 属于 Adj[u] Adj1[v].insert(u); 复杂度 ...
- Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger
Messenger类实际是对Aidl方式的一层封装.本文只是对如何在Service中使用Messenger类实现与客户端的通信进行讲解,对Messenger的底层不做说明.阅读Android Prog ...
- [转]第四章 使用OpenCV探测来至运动的结构——Chapter 4:Exploring Structure from Motion Using OpenCV
仅供参考,还未运行程序,理解部分有误,请参考英文原版. 绿色部分非文章内容,是个人理解. 转载请注明:http://blog.csdn.net/raby_gyl/article/details/174 ...
- PRML Chapter 2. Probability Distributions
PRML Chapter 2. Probability Distributions P68 conjugate priors In Bayesian probability theory, if th ...
- WITCH CHAPTER 0 [cry] 绝密开发中的史克威尔艾尼克斯的DX12技术演示全貌
西川善司的[WITCH CHAPTER 0 cry]讲座 ~绝密开发中的史克威尔艾尼克斯的DX12技术演示全貌 注:日文原文地址: http://pc.watch.impress.co.jp/d ...
- Chapter 3: Connector(连接器)
一.概述 Tomcat或者称之为Catalina(开发名称),可以简化为两个主要的模块,如下图: 多个Connector关联一个Container.之所以需要多个Connector,是为了处理多种协议 ...
随机推荐
- c++ constructors not allowed a return type错误问题
出现这样的问题 constructors not allowed a return type,是因为类定义或者申明时,结束的地方忘了加个' ; ' 错误的举例如: class ClassName{ } ...
- js实现点击空白处隐藏
部分业务要求除了某元素外点击其他对象,对应的元素隐藏,下面是一个demo效果, <!DOCTYPE html> <html> <head> <meta cha ...
- 如何设置树莓派 VNC 的分辨率
当我们使用 VNC 连接到树莓派时,默认的分辨率非常低.甚至无法显示整个桌面,因此我们需要对分辨率进行设置.在树莓派上设置 VNC 的分辨率很简单,在终端运行下面指令进入设置界面设置. 1 sudo ...
- Odoo Javascript 参考
本文介绍了odoo javascript框架.从代码行的角度来看,这个框架不是一个大的应用程序,但它是非常通用的,因为它基本上是一个将声明性接口描述转换为活动应用程序的机器,能够与数据库中的每个模型和 ...
- thinkphp 字段定义
通常每个模型类是操作某个数据表,在大多数情况下,系统会自动获取当前数据表的字段信息. 系统会在模型首次实例化的时候自动获取数据表的字段信息(而且只需要一次,以后会永久缓存字段信息,除非设置不缓存或者删 ...
- 贪心+MST——cf1095F
开始看错求最短路了.. 但是MST的思路和最短路也差不多 就是先不考虑特殊边,用最小点做一个生成树 然后加入特殊边,进行一次krus即可 #include<bits/stdc++.h> # ...
- 基于V8引擎的C++和JS的相互交互
基于什么原因略! 1. 脚本引擎的基本功能 V8只是一个JS引擎.去除它的特点功能出处,它必须要实现JS引擎的几个基础功能: 脚本执行:脚本可能是一个表达式:一段js代码:或者一个文件执行表达式返回j ...
- Mysql中“select ... for update”排他锁(转)
原帖地址 https://blog.csdn.net/claram/article/details/54023216 Mysql InnoDB 排他锁 用法: select … for update; ...
- Installer - Eclipse配置Data Source Explorer
一.配置Oracle数据库连接 1.打开配置窗口 在[window]菜单中的[show windows]选择[other],在弹出的窗口中选择[Data Source Explorer]进行数据数据库 ...
- SQL 分组后获取每组中最大值
场景:sql server 2008 drop table ID CREATE TABLE ID ( id ,) not null, code int , D date, PRIMARY KEY (i ...