图
2016-01-28 17:37
375 查看
1,相关定义:
有向边也称为弧(Arc),<A,D>,A指向D,A是弧尾,D是弧头。
如果任意两个顶点之间都存在边,则称无向完全图/有向完全图,含有n个顶点的无向完全图/有向完全图有n*(n-1)*2……n*(n-1)条边。
带权图,又称网。
2,连通图
2.1 无向图:
如果对于图中任意两个顶点都是连通的,则称G是连通图。
无向图中的极大连通子图称为连通分量,条件:
1.要是子图;
2.子图要是连通的;
3.连通子图含有极大顶点数;
4.具有极大顶点数的连通子图包含依附于这些顶点的所有边。
2.2 有向图:
在有向图G中,如果对于每一对Vi , Vj ,从Vi 到Vj 都存在路径,则称G是强连通图。有向图中的极大强连通子图称作有向图的强连通分量。
2.3 连通图的生成树:
连通图的生成树的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的n-1条边。(但是有n-1条边的不一定是生成树)
3,图的存储结构—邻接矩阵:
无向图:
有向图:
4,图的遍历
从图中某一顶点出发访遍图中其余顶点,且每个顶点仅被访问一次。
4.1 深度优先搜索DFS:
类似树的前序遍历,但这是针对连通图而言,从图的某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,知道图中所有和v有路径想吐的顶点都被访问。对非连通图,只需对它的连通分量分别进行深度优先搜索,若图中尚有顶点未被访问,则另选图中一个未曾访问的顶点作为起始点,重复上述步骤,直到所有顶点都被访问为止
4.2 广度优先搜索
5,最小生成树
最小生成树的边数必然是顶点数减一,|E| = |V| - 1;
最小生成树不可以有循环;
最小生成树不必是唯一的;
我们把构造连通图的最小代价生成树称为最小生成树(minimum cost spanning tree);
普里姆算法和克鲁斯卡尔算法,Prim算法和Kruskal算法。
Prim算法:先选一个结点,然后逐加入结点,加入与先有结点中任一结点最近的一个结点,O(V2),v为顶点数,如图:
Kruskal算法:逐一加边,O(eloge)
6,最短路径
6.1 迪杰斯克拉算法dijkstra(两结点之间最短路径)
邻接矩阵:
求解过程:
6.2 弗洛伊德算法(任一对结点最短路径)
每一对顶点之间的最短路径
Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。
Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。
Floyd-Warshall算法的原理是动态规划。设Di,j,k为从i到j的只以(1…k)集合中的结点为中间结点的最短路径的长度。
1.若最短路径经过点k,则Di,j,k= Di,k,k-1 + Dk,j,k-1
2.若最短路径不经过点k,则Di,j,k= Di,j,k-1
因此,Di,j,k= min{Di,j,k-1 , Di,k,k-1 + Dk,j,k-1}
在实际算法中,为了节约空间,可以直接在原来空间上进行迭代,这样空间可降至二维。
for k ← 1 to n do
for i ← 1 to n do
for j ← 1 to n do
if (Di,k + Dk,j < Di,j) then
Di,j ← Di,k + Dk,j;
其中Di,j表示由点i到点j的代价,当Di,j为 ∞ 表示两点之间没有任何连接。
D:表示距离
P:表示路径,即走过的路
D(-1),D(-0), D(1),D(2)分别表示(不经过其他结点,经过结点V0,经过结点V1,经过结点V2)四种情况。
7,拓扑排序
可得多个拓扑排序序列:(C1, C9 , C4 , C2 , C3 , C5 , C7 , C10 , C11 , C12 , C6 , C8 )
8,关键路径
路径长度最长的路径叫做关键路径
AOE-网是一个带权的有向无环图,顶点表示事件,弧表示活动,权表示活动持续的时间。
例如:
注:
活动l-e=0,则a2 、a5 、a7是关键活动;
取ve=vl的顶点:关键路径为(v1, v3, v4, v6)
关键路径:
[align=center] [/align]
[align=center] [/align]
有向边也称为弧(Arc),<A,D>,A指向D,A是弧尾,D是弧头。
如果任意两个顶点之间都存在边,则称无向完全图/有向完全图,含有n个顶点的无向完全图/有向完全图有n*(n-1)*2……n*(n-1)条边。
带权图,又称网。
2,连通图
2.1 无向图:
如果对于图中任意两个顶点都是连通的,则称G是连通图。
无向图中的极大连通子图称为连通分量,条件:
1.要是子图;
2.子图要是连通的;
3.连通子图含有极大顶点数;
4.具有极大顶点数的连通子图包含依附于这些顶点的所有边。
2.2 有向图:
在有向图G中,如果对于每一对Vi , Vj ,从Vi 到Vj 都存在路径,则称G是强连通图。有向图中的极大强连通子图称作有向图的强连通分量。
2.3 连通图的生成树:
连通图的生成树的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的n-1条边。(但是有n-1条边的不一定是生成树)
3,图的存储结构—邻接矩阵:
无向图:
有向图:
4,图的遍历
从图中某一顶点出发访遍图中其余顶点,且每个顶点仅被访问一次。
4.1 深度优先搜索DFS:
类似树的前序遍历,但这是针对连通图而言,从图的某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,知道图中所有和v有路径想吐的顶点都被访问。对非连通图,只需对它的连通分量分别进行深度优先搜索,若图中尚有顶点未被访问,则另选图中一个未曾访问的顶点作为起始点,重复上述步骤,直到所有顶点都被访问为止
4.2 广度优先搜索
5,最小生成树
最小生成树的边数必然是顶点数减一,|E| = |V| - 1;
最小生成树不可以有循环;
最小生成树不必是唯一的;
我们把构造连通图的最小代价生成树称为最小生成树(minimum cost spanning tree);
普里姆算法和克鲁斯卡尔算法,Prim算法和Kruskal算法。
Prim算法:先选一个结点,然后逐加入结点,加入与先有结点中任一结点最近的一个结点,O(V2),v为顶点数,如图:
Kruskal算法:逐一加边,O(eloge)
6,最短路径
6.1 迪杰斯克拉算法dijkstra(两结点之间最短路径)
邻接矩阵:
求解过程:
终点 | 从v0到个终点的D值和最短路径的求解过程 | ||||
i=1 | i=2 | i=3 | i=4 | i=5 | |
V1 | ∞ | ∞ | ∞ | ∞ | ∞ 无 |
V2 | 10 (v0 ,v2) | ||||
V3 | ∞ | 60 (v0 ,v2 ,v3) | 50 (v0 ,v4 ,v3) | ||
V4 | 30 (v0 ,v4) | 30 (v0 ,v4) | |||
V5 | 100 (v0 ,v5) | 100 (v0 ,v5) | 90 (v0 ,v4 ,v5) | 60 (v0 v4 ,v3 ,v5) | |
Vi | V2 | V4 | V3 | V5 | |
S | (v0 ,v2) | (v0 ,v4) | (v0 ,v4 ,v3) | (v0 v4 ,v3 ,v5) |
每一对顶点之间的最短路径
Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。
Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。
Floyd-Warshall算法的原理是动态规划。设Di,j,k为从i到j的只以(1…k)集合中的结点为中间结点的最短路径的长度。
1.若最短路径经过点k,则Di,j,k= Di,k,k-1 + Dk,j,k-1
2.若最短路径不经过点k,则Di,j,k= Di,j,k-1
因此,Di,j,k= min{Di,j,k-1 , Di,k,k-1 + Dk,j,k-1}
在实际算法中,为了节约空间,可以直接在原来空间上进行迭代,这样空间可降至二维。
for k ← 1 to n do
for i ← 1 to n do
for j ← 1 to n do
if (Di,k + Dk,j < Di,j) then
Di,j ← Di,k + Dk,j;
其中Di,j表示由点i到点j的代价,当Di,j为 ∞ 表示两点之间没有任何连接。
D:表示距离
P:表示路径,即走过的路
D(-1),D(-0), D(1),D(2)分别表示(不经过其他结点,经过结点V0,经过结点V1,经过结点V2)四种情况。
D | D(-1) | D(-0) | D(1) | D(2) | ||||||||
0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | |
0 | 0 | 4 | 11 | 0 | 4 | 11 | 0 | 4 | 6 | 0 | 4 | 6 |
1 | 6 | 0 | 2 | 6 | 0 | 2 | 6 | 0 | 2 | 5 | 0 | 2 |
2 | 3 | ∞ | 0 | 3 | 7 | 0 | 3 | 7 | 0 | 3 | 7 | 0 |
P | P(-1) | P(0) | P(1) | P(2) | ||||||||
0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 | |
0 | AB | AC | AB | AC | AB | ABC | AB | ABC | ||||
1 | BA | BC | BA | BC | BA | BC | BCA | BC | ||||
2 | CA | CA | CAB | CA | CAB | CA | CAB |
可得多个拓扑排序序列:(C1, C9 , C4 , C2 , C3 , C5 , C7 , C10 , C11 , C12 , C6 , C8 )
8,关键路径
路径长度最长的路径叫做关键路径
AOE-网是一个带权的有向无环图,顶点表示事件,弧表示活动,权表示活动持续的时间。
例如:
注:
活动l-e=0,则a2 、a5 、a7是关键活动;
取ve=vl的顶点:关键路径为(v1, v3, v4, v6)
关键路径:
[align=center] [/align]
[align=center] [/align]
相关文章推荐
- 纯真IP库PHP查询
- web开发中上传图片保存base64 好还是保存文件
- The Same Game-POJ1027模拟
- 英国调查报告称中国梦吸引力首超美国梦
- The Same Game-POJ1027模拟
- List<T> ForEach break
- js权威指南---学习笔记02
- Android开发——思路源泉
- java利用微信企业号将位置信息推送到普通微信号并在微信中直接查看地图位置
- Linux多线程编程
- Oracle Database RAC 11.2.0.4 for AIX6.1安装报irman ioracle错误
- 如何安装SharePoint Server 2016 Release Candidate Patch?
- 服务器数据抓包(原来微信图片真的可以抓包看的)
- 图片打开器
- 瀑布流式标签
- 《从零开始学Swift》学习笔记(Day 66)——Cocoa Touch设计模式及应用之通知机制
- 阅读《C# 2012数据库编程入门经典(第5版)》
- USACO-Section 2.4 The Tamworth Two(模拟)
- OpenStackCinder与各种后端存储技术的集成叙述与实践
- 杭电2089 不要62