(a)概述

官官方信息技术老师·15 页·深入(追求细节与边界)·0 次浏览·38 天前
图论入门关系网络数据结构

图概述

看完你能用点与边把朋友圈、地图、依赖关系统一建模并说出图的边界

按 空格/→ 演示下一步

问一句
1 / 15 页

全部页面点击任意一页,跳回舞台从这页播放

图论入门关系网络数据结构

图概述

看完你能用点与边把朋友圈、地图、依赖关系统一建模并说出图的边界

1第 1 页 · 图概述

顶点与边:图 G=(V,E)

上一页我们说,图是用来描述「关系」的结构。现在回到你的微信:你是顶点,你和好友之间那条联系就是边。把所有人、所有联系分装进两个集合,就得到图。

顶点集 V
所有对象的集合,比如通讯录里的每个人,个数记为 |V|
边集 E
所有关系的集合,每条边连接两个顶点,如 (u,v) 表示 u 与 v 相连
二元组 G=(V,E)
图就是这两个集合的打包;E 中每条边的端点都必须在 V 里
通讯录+好友关系对应 →G=(V,E)

通讯录里的联系人对应 V,两人互为好友对应 E 中一条边

G=(V,E),E⊆V×VG=(V,E),\quad E\subseteq V\times V
2第 2 页 · 顶点与边:图 G=(V,E)

邻接:顶点之间

上一页我们把图拆成了顶点和边。现在换个角度:如果你在社交软件里加了一个好友,你和 TA 之间就多了一条连线——这条线,把两个顶点变成了「邻接」关系。

邻接的定义
若顶点 u 和 v 之间有边直接相连,则 u 与 v 互为邻接点
邻接的对称性
邻接关系是相互的:u 邻接到 v,v 也邻接到 u
无边的顶点
两个顶点之间没有边相连,就互不邻接,即使同属一个图
好友关系对应 →邻接点

加了好友(有边)才互为好友;没加好友只是同在平台上

3第 3 页 · 邻接:顶点之间

关联:边与顶点之间

前页说邻接是顶点之间的关系,那边的「两端」怎么描述?一条边总挂在两个顶点上,这种边与顶点的直接挂接关系,图论里叫「关联」。

关联的定义
边 e 的两个端点是 u 和 v,就说 e 与 u、v 相关联
方向要分清
邻接是顶点与顶点的关系,关联是边与顶点的关系
顶点的关联边
与顶点 v 关联的所有边,合称 v 的关联集
环的特殊情形
自环的两个端点是同一个顶点,仍算一次关联
插头插进插座对应 →边关联顶点

插头对应边,两个插孔对应它关联的两个顶点

4第 4 页 · 关联:边与顶点之间

邻接与关联的关系图

实线连顶点表示邻接,虚线连边与顶点表示关联,对照着读,注意两种关系的主语不同。

图解渲染中…
v1:实线v1—v2:顶点u与v相邻接e1:虚线:边e与u、v关联(端点关系)v3:顶点w:与e无关联,与u不邻接
5第 5 页 · 邻接与关联的关系图

无向图:边不分方向

当你出现在某人的好友列表里,对方通常也在你的列表里。这种“同时成立”的关系,用一条边表示就够了,不必区分谁在前、谁在后。

无序对
边 {u,v} 与 {v,u} 是同一条,端点可交换
对称邻接
u 邻接到 v,则 v 也邻接到 u
不画箭头
用线段连接两端,箭头留给有向图
适用边界
关系互相成立时,才适合用无向图
互为好友对应 →无向边

A 是 B 的好友,B 必然也是 A 的好友,顺序无关

E={{u,v}∣u,v∈V}E = \{ \{u,v\} \mid u,v \in V \}
6第 6 页 · 无向图:边不分方向

有向图:弧带箭头

微信里「A 给 B 发消息」和「B 给 A 发消息」是两回事——谁发的、谁收到,方向不能反。城市间的单行道也是同理。图论用「弧」刻画这种带方向的关系。

有向图
每条边都带方向,方向不同算不同的边
弧 <u,v>
有序对:u 是弧尾(起点),v 是弧头(终点),两头角色不同
出边
以 u 为起点的弧,是从 u 出发能走的边
入边
以 v 为终点的弧,是到达 v 的边
单行道对应 →弧 <u,v>

只能从路口 u 开向 v,反向走对应的是另一条弧

G=(V,E),E={⟨u,v⟩}, ⟨u,v⟩≠⟨v,u⟩G=(V,E),\quad E=\{\langle u,v\rangle\},\ \langle u,v\rangle\neq\langle v,u\rangle
7第 7 页 · 有向图:弧带箭头

无向 vs 有向:度数对比

度数在有向图里不能只说一个数——混淆点在于:无向图一个度,有向图要拆成两个。

无向图:度
  • 度 = 关联的边数
  • 没有方向,进出不分
  • 总和 = 2×边数(每条边贡献 2)
有向图:出度+入度
  • 出度 = 射出的弧数
  • 入度 = 射入的弧数
  • 每顶点:出度+入度=弧数;总出度=总入度=弧数
谈无向图只用一个度;谈有向图必须分说出度和入度,因为弧有方向,进出不再等价。
8第 8 页 · 无向 vs 有向:度数对比

同一关系两种建模

左图:互粉用无向边;右图:单向关注用弧。对比度数含义,体会选图依据。

图解渲染中…
a1:A与B互粉,一条边连通两者,不分先后b1:A关注B但B未必关注A,弧头指向被关注者a2:无向边数=度;有向图分入度与出度
9第 9 页 · 同一关系两种建模

什么是路径

我们已经认识了顶点、边和邻接。现在把眼界放宽:如果从某个顶点出发,沿着边一步步走到另一个顶点,这一串足迹就是图论里最常用的概念——路径。

顶点序列
路径写成一列顶点,按访问顺序排列
相邻即有边
序列中每对相邻顶点之间必须有边相连
简单路径
所有顶点互不重复的路径,是多数算法讨论的对象
路径长度
路径经过的边数,也常用来衡量距离
地铁换乘路线对应 →图中的路径

站点对应顶点,相邻两站间的轨道段对应边

10第 10 页 · 什么是路径

路径长度与简单路径

上一页我们沿着边从顶点走到了顶点。但走一步算多长?重复经过同一个顶点还叫不叫一条好路径?这两个问题正是本页要划清的边界。

路径长度
路径中边的条数,而不是顶点个数
简单路径
顶点不重复出现的路径
非简单路径
顶点可重复,如绕圈返回起点
步行导航路线对应 →路径与长度

导航里经过的每段路对应一条边,段数即路径长度

11第 11 页 · 路径长度与简单路径

环路:首尾相接的路径

前面讲路径是「一路走到底」;如果把路径的终点接到起点上,就走回了原地——这种首尾相接的路径就是环路,图形学里循环检测、调度冲突都靠它。

环路定义
起点与终点相同的路径,即 v0=vk
简单环路
除首尾重合外,中间不重复经过任何顶点
有向环
有向图中沿箭头方向走回起点的环
绕操场跑一圈对应 →环路

从起点出发又回到起点,一圈即一个环

12第 12 页 · 环路:首尾相接的路径

自测:路径与环路辨析

点击作答

关于无向图中的简单路径与环路,下列说法正确的是?

13第 13 页 · 自测:路径与环路辨析

图概述要点回顾

  • ✓G=(V,E) 是骨架:一切概念都由顶点和边展开
  • ✓邻接连顶点,关联连边与顶点,别混用
  • ✓有向无向决定度数算法,建模前先问方向
  • ✓路径有长度,简单路径不重复顶点
  • ✓环路=首尾相接,是判断图结构的关键
延伸主题:图的存储:邻接矩阵与邻接表图的遍历:DFS 与 BFS连通性:连通分量与强连通
14第 14 页 · 图概述要点回顾

课后思考

先自己想几分钟,再对照参考答案——答案只是起点,不是终点。

1简单路径不允许重复顶点,为什么图论要专门区分这两种路径?

参考答案从「路径」到「简单路径」是一次收紧:很多结论只在简单路径上成立,如最短路径可取简单路径。想想去重后长度为何不增。

2把现实中『互相关注』建为无向边、『关注』建为有向弧,两者的度数含义有何不同?

参考答案无向图里度统一数关联边;有向图要拆成入度和出度,分别对应『被多少人关注』和『关注多少人』。

3如果把自环也允许进图,度数、路径、环路哪些定义需要改?

参考答案自环让顶点度数计 2(进出的两个端点),本身就是一个最短环路;简单路径会彻底失效。试着逐条检验前面的定义。

15第 15 页 · 课后思考