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 图的更多相关文章

  1. Chapter 7(图)

    1.Prim算法生成最小生成树 //Prim算法生成最小生成树 void MiniSpanTree_Prim(MGraph G) { int min,i,j,k; int adjvex[MAXVEX] ...

  2. 【译】x86程序员手册13-第5章 内存管理

    Chapter 5 Memory Management 内存管理 The 80386 transforms logical addresses (i.e., addresses as viewed b ...

  3. 《算法导论》习题解答 Chapter 22.1-5(求平方图)

    一.邻接矩阵实现 思路:如果是邻接矩阵存储,设邻接矩阵为A,则A*A即为平方图,只需要矩阵相乘即可: 伪代码: for i=1 to n for j=1 to n for k=1 to n resul ...

  4. 《算法导论》习题解答 Chapter 22.1-3(转置图)

    一.邻接表实现 思路:一边遍历,一边倒置边,并添加到新的图中 邻接表实现伪代码: for each u 属于 Vertex for v 属于 Adj[u] Adj1[v].insert(u); 复杂度 ...

  5. Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger

    Messenger类实际是对Aidl方式的一层封装.本文只是对如何在Service中使用Messenger类实现与客户端的通信进行讲解,对Messenger的底层不做说明.阅读Android Prog ...

  6. [转]第四章 使用OpenCV探测来至运动的结构——Chapter 4:Exploring Structure from Motion Using OpenCV

    仅供参考,还未运行程序,理解部分有误,请参考英文原版. 绿色部分非文章内容,是个人理解. 转载请注明:http://blog.csdn.net/raby_gyl/article/details/174 ...

  7. PRML Chapter 2. Probability Distributions

    PRML Chapter 2. Probability Distributions P68 conjugate priors In Bayesian probability theory, if th ...

  8. WITCH CHAPTER 0 [cry] 绝密开发中的史克威尔艾尼克斯的DX12技术演示全貌

    西川善司的[WITCH CHAPTER 0  cry]讲座 ~绝密开发中的史克威尔艾尼克斯的DX12技术演示全貌   注:日文原文地址: http://pc.watch.impress.co.jp/d ...

  9. Chapter 3: Connector(连接器)

    一.概述 Tomcat或者称之为Catalina(开发名称),可以简化为两个主要的模块,如下图: 多个Connector关联一个Container.之所以需要多个Connector,是为了处理多种协议 ...

随机推荐

  1. PHP算法之回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: false解释: 从左向右读, ...

  2. HTML加载顺序

    一.js执行顺序 //1. 外部引入的js文件,会异步下载并且执行(<script>块中的语句),根据引入的位置会在不同时刻执行 //2.$().ready(function() {}) ...

  3. ld.so和ld-linux.so* :动态链接器/加载器(转)

    概述 动态链接器可以被正在运行的动态链接程序或者动态对象(没有对动态链接器指定命令选项,动态链接器被存储在程序的.interp区域)间接调用,也可以直接运行程序, 例如:/lib/ld-linux.s ...

  4. [Usaco2005 Dec]Cleaning Shifts

    [Usaco2005 Dec]Cleaning Shifts 给出n段区间,左右端点分别为\(l_i,r_i\),以及选取这段区间的费用\(c_i\),现在要选出若干个区间,使其完全覆盖区间\([m, ...

  5. 把云数据库带回家!阿里云发布POLARDB Box数据库一体机

    9月26日,2019杭州云栖大会上,阿里云宣布正式推出高性能数据库一体机——POLARDB Box,用户部署在自有数据中心即可享受云数据库的便捷体验,同时还为Oracle等传统数据库用户提供一键迁移功 ...

  6. thinkphp Trace方法

    页面Trace只能用于有页面输出的情况,但是trace方法可以用在任何情况,而且trace方法可以用于AJAX等操作. Trace方法的格式: trace('变量','标签','级别','是否记录日志 ...

  7. php抓取远程数据显示在下拉列表中

    前言:周五10月20日的时候,经理让做一个插件,使用的thinkphp做这个demo 使用CURL抓取远程数据时如果出现乱码问题可以加入 header("content-type:text/ ...

  8. 树上思维题——cf1060E

    只要算每条路径的贡献即可 显然长度为偶数的贡献是len/2 长度为奇数的贡献是(len+1)/2 所以结果就是(sum+tot)/2 sum:路径总长 tot:奇数路径数量 怎么求奇数路径数量:只有深 ...

  9. go网络库cellent实现socket聊天功能

    一 .介绍 cellnet是一个组件化.高扩展性.高性能的开源服务器网络库 git地址:https://github.com/davyxu/cellnet 主要使用领域: 游戏服务器 方便定制私有协议 ...

  10. 模块化开发(requireJS)

    模块化 在前端使用模块化开发,可以将代码根据功能实施模块的划分,每个模块功能(职责)单一,在需要更改对应的功能的时候,只需要对指定的模块进行修改,其他模块不受任何影响. 为什么要进行前端模块化? 达到 ...