Graph简述

Graph

remarks: 从bear导入的,不可见图为草稿,重点部分都有写。

基础

1. 术语

连通图(connected graph):如果从任意一个顶点都存在一条路径到达另一个任意顶点(undirected graph)
树:是一幅无环无向连通图
森林:1个or几个树
简单路径(simple path):一条没有重复顶点的路径
简单环(simple cycle):一条(除了起点和终点必须相同之外)不含有重复顶点和边的环
adjacent: when 2 v are connected by a single edge
biconnectivity/ biconnected graph: 移除一条边也不会使graph成为unconnected的graph
subgraph(of graph G):只取G中的几个顶点构成的图
spanning subgraph:取G中所有顶点构成的图
spanning tree:是G的subgraph+是tree=由G中所有顶点构成的无环无向连通图(spanning tree不唯一)

边的分类

directed edge: 有箭头的边,eg. flight(从A点到B点)
undirected edge: 无箭头的边,eg. flight route(A和B的距离)
directed graph
undirected graph

特性

  1. degree sum:degree只和=2E
  2. maximum degree:max degree=V-1
  3. edge count:E <= V(V-1)/2

2. 图的表示方法

2.1 邻接矩阵

邻接矩阵图例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WUgPCDy8-1605523062295)(Graph/24905163-e121bc7bba6f78d1.png)]
space: O(V^2)
add edge: O(1)
check if adjacent: O(1)
iteration: O(V)

2.2 边的数组(edge lists)

eg: [ [0,1], [0, 2], [0, 5], [1, 2], [2, 3], [2, 4], [3, 4], [3, 5] ]
Edge里含两个int变量
space: O(E)
add edge: O(1)
check if adjacent: O(E)
iteration: O(E)

2.3 邻接表数组

2.3.1 例子

0: 6--->5--->2--->1
1: 3--->0
2: 0
3: 5--->1
4: 6--->5
5: 4--->3--->0
6: 7--->4--->0
7: 8--->6
8: 10--->7
9: 11--->10
10: 12--->9--->8
11: 9
12: 10

2.3.2 特点

a) 使用的空间和V+E成正比
b) 添加一条边所需的时间为常数
c) 遍历顶点v的所有相邻顶点所需的时间和v的度数成正比
d) 每条边会出现两次

2.3.3 时间复杂度

space: O(V+E)
add edge: O(1)
check adjacent: deg(v) <- vertex v
iteration: deg(v)

3. Graph实现的性能复杂度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Z4nziuk-1605523062297)(Graph/Photo%20Nov%2013,%202020%20at%20105929%20PM.jpg)]

4. 深度优先(DFS)

4.1 特点
  • 深度优先搜索标记与起点连通的所有顶点所需的时间和顶点的度数之和成正比
  • 使用深度优先搜索得到从给定起点到任意标记顶点的路径所需的时间与路径的长度成正比
4.2 例子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yShOuTgS-1605523062298)(Graph/bear_sketch@2x.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OFy3SB4e-1605523062299)(Graph/bear_sketch@2x.png)]

4.3 时间复杂度

O(V+E)

4.4 用途
  1. 找v和w之间是否有路径
  2. 找一个simple cycle

5. 广度优先(BFS)

5.1 来源

dfs遍历整个图的顺序和最短路径无关,而bfs搜索的是最短路径

5.2 特点
  • 对于从s可达的任意顶点v,广度优先搜索都能找到一条从s到v的最短路径 (没有其他从s到v的路径所含的边比这条路径少)
  • 广度优先搜索所需的时间在最坏情况下和V+E成正比=O(V+E)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ApqQFeQ-1605523062300)(Graph/bear_sketch@2x.png)]
5.3 用途
  1. 找最短路径

6. 连通分量 connected component

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rfnh5z5r-1605523062302)(Graph/20190329164255150.png)]
共三个
可利用深度优先来找出图中所有的连通分量
*深度优先搜索的预处理使用的时间和空间与V+E成正比且可以在常数时间内处理关于图的连通性查询。

7. 总结

  • dfs:解决了单点连通性的问题 / 可以判定其他顶点和给定的起点是否连通
  • bfs:解决了最短路径问题

Directed Graph

1. 术语

有向图:由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点
indegree(入度):point to
outdegree(出度):point away
simple:没有重复的E / V
simple digraph的定律:E <= V(V-1)
strongly connected: every V is reachable from every other V
判断strongly connectivity的时间复杂度:O(V+E)

2. 特点

在有向图中,深度优先搜索标记由一个集合的顶点可达的所有顶点所需的时间与被标记的所有顶点的出度之和成正比

3. 有向无环图(拓扑排序)

用途:解决优先级限制下的调度问题
有向无环图(DAG):不含有向环的有向图

  • 当且仅当一幅有向图是无环图时它才能进行拓扑排序
  • 使用 深度优先搜索对DAG进行拓扑排序所需的时间和V+E成正比

4. 强连通性

顶点的强连通:如果两个顶点v和w是互相可达的,那么它们是强连通的
图的强连通:如果一幅有向图中的任意两个顶点都是强连通的,则称这幅有向图也是强连通的

5. Floyd-Warshall Transitive Closure

三个for loop
space: O(V^2)
runtime: O(V^3)

6. topological ordering

1. 要点

必须是DAG -> directed graph that has no cycle

2. 如何找topological ordering

见笔记

3. 时间复杂度

O(V+E)


Shortest Path

适用于加权有向图
重点解决“找到从一个顶点到达另一个顶点的权重最小的有向路径

1. 性质

(只写了要注意的)

  • 路径一定是有向的
  • 并不是所有顶点都是可达的
  • 负权重会使问题更复杂
  • 最短路径不一定是唯一的
  • 可能存在平行边和自环

2. 边的松弛

放松边v -> w意味着检查从s到w的最短路径是否是先从s -> v -> w的,如果是,那么更新数据结构的内容

3. Dijkstra(greedy approach)

3.1 概述

采用了类似Prim的类似方法来计算最短路径树
Dijkstra可以解决边权重非负的加权有向图单起点最短路径问题。
也可以在加权无向图中找到最短路径
graph需要时connected的

3.2 应用

  • 给定两点的最短路径:起点s到重点t的最短路径
  • 任意顶点对之间的最短路径:同上
  • 欧几里得图中的最短路径

3.3 运行时间

使用Dijkstra计算根结点为给定起点的最短路径树所需的空间与V成正比,时间与ElogV成正比 -> O(ElogV)

4. 无环加权有向图中的最短路径(拓扑排序)

4.1 用途

  • 能在线性时间内解决最短路径问题
  • 能够处理负权重的边
  • 能够解决更多相关的问题(最长路径、并行任务调度=关键路径、相对最后期限限制下的并行任务调度)

4.2 定律

  • 按照拓扑排序放松顶点,就能在和E+V成正比的时间内解决无环加权有向图的单点最短路径问题
  • 解决无环加权有向图中的最常路径问题所需的时间与E+V成正比

5. 一般加权有向图中的最短路径(Bellman-Ford)

用处:

  • weighted digraph
  • negative weight
  • compute shortest path
  • determine negative weight cycle

5.1 定律

当且仅当加权有向图中至少存在一条从s到v的有向路径且所有从s到v的有向路径上的任意顶点都不存在于任何负权重环中时,s到v的最短路径才是存在的
Bellman-Ford算法所需的时间和EV成正比,空间和V成正比

5.2 原理

总结

  1. Dijkstra:解决边的权重非负的最短路径
  2. 无环加权有向图:边的权值可为负
  3. Bellman-Ford:解决有环 / 边的权重为负值的最短路径
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gcXyY28F-1605523062303)(Graph/Photo%20Nov%2013,%202020%20at%20110559%20PM.jpg)]

Minimum Spanning Tree

一幅加权图的最小生成树(MST)是它的一棵权值(树中所有边的权值之和)最小的生成树
最小生成树仅存在于加权无向图
每幅连通图都只有一棵唯一的最小生成树(所有边权重不同)
无cycle=a tree+weight minimize
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AgJkoBgj-1605523062304)(Graph/Photo%20Nov%2013,%202020%20at%20102515%20PM.jpg)]

1. Prim

1.1 概述

只有一个顶点,会向它添加V-1条边,每次总是将下一条连接树中的顶点与不在树中的顶点且权值最小的边加入树中

1.2 视图

最小生成树(Kruskal(克鲁斯卡尔)和Prim(普里姆))算法动画演示_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 4:00

1.3 运行时间
  • prim算法的延时实现计算MST所需的空间与E成正比,所需的时间与ElogE成正比(V个顶点,E条边)
  • prim算法的即时实现计算MST所需的空间与V成正比,所需的时间与ElogV成正比

2. Kruskal

2.1 概述

把所有边和weight按大小排序,但保证不能有cycle

2.2 视图

最小生成树(Kruskal(克鲁斯卡尔)和Prim(普里姆))算法动画演示_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 2:09

2.3 运行时间

所需的空间和E成正比,所需的时间和ElogE成正比

3. Baruvka's algorithm

分块然后选最短的路径连接
O(ElogV)

3. 切分定理

对于每一种切分,权重最小的横切边必然属于最小生成树。

4. 总结

Remarks:Prim和Kruskal不能处理有向图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iYd98l3e-1605523062305)(Graph/Photo%20Nov%2013,%202020%20at%20102448%20PM.jpg)]


Reference

图的邻接矩阵的实现
无向图1——图的邻接表数组表示以及DFS、BFS搜索算法实现_大魔王-CSDN博客
【数据结构】图的连通分量HaYa-CSDN博客数据结构 连通分量
连通图和连通分量weixin_30569153的博客-CSDN博客连通分量

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 数据结构:图结构的实现 【各种东拼西凑来的】 图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中...
    我不饿我不想吃东西阅读 6,343评论 0 3
  • 图定义和相关术语 抽象看,图由顶点(Vertex)和边(Edge)组成,可记作G(V,E)。连接边的两个顶点一定要...
    一斗阅读 414评论 0 0
  • 线性表是一对一,树是一对多,图是多对多的关系。 图中的数据元素我们称为顶点(相对于树中的结点),顶点集合不能为空,...
    XDgbh阅读 12,304评论 0 0
  • 0.什么是图? <0>:表示“多对多”的关系 <2>:包括 i:一组顶点:通常用V(Vertex)表示顶点的集合 ...
    BrightHewei阅读 384评论 0 1
  • 现实生活中有很大一类问题可以用简洁明了的图论语言来描述,可以转化为图论问题。 相关定义 图可以表示为G=(V, E...
    芥丶未央阅读 1,561评论 0 7