hello-algo/docs/chapter_graph/summary.md
2023-10-08 01:22:57 +08:00

30 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 小结
### 重点回顾
- 图由顶点和边组成,可以被表示为一组顶点和一组边构成的集合。
- 相较于线性关系(链表)和分治关系(树),网络关系(图)具有更高的自由度,因而更为复杂。
- 有向图的边具有方向性,连通图中的任意顶点均可达,有权图的每条边都包含权重变量。
- 邻接矩阵利用矩阵来表示图,每一行(列)代表一个顶点,矩阵元素代表边,用 $1$ 或 $0$ 表示两个顶点之间有边或无边。邻接矩阵在增删查操作上效率很高,但空间占用较多。
- 邻接表使用多个链表来表示图,第 $i$ 条链表对应顶点 $i$ ,其中存储了该顶点的所有邻接顶点。邻接表相对于邻接矩阵更加节省空间,但由于需要遍历链表来查找边,时间效率较低。
- 当邻接表中的链表过长时,可以将其转换为红黑树或哈希表,从而提升查询效率。
- 从算法思想角度分析,邻接矩阵体现“以空间换时间”,邻接表体现“以时间换空间”。
- 图可用于建模各类现实系统,如社交网络、地铁线路等。
- 树是图的一种特例,树的遍历也是图的遍历的一种特例。
- 图的广度优先遍历是一种由近及远、层层扩张的搜索方式,通常借助队列实现。
- 图的深度优先遍历是一种优先走到底、无路可走时再回溯的搜索方式,常基于递归来实现。
### Q & A
!!! question "路径的定义是顶点序列还是边序列?"
维基百科上不同语言版本的定义不一致英文版是“路径是一个边序列”而中文版是“路径是一个顶点序列”。以下是英文版原文In graph theory, a path in a graph is a finite or infinite sequence of edges which joins a sequence of vertices.
在本文中,路径被认为是一个边序列,而不是一个顶点序列。这是因为两个顶点之间可能存在多条边连接,此时每条边都对应一条路径。
!!! question "非连通图中,是否会有无法遍历到的点?"
在非连通图中,从某个顶点出发,至少有一个顶点无法到达。遍历非连通图需要设置多个起点,以遍历到图的所有连通分量。
!!! question "在邻接表中,“与该顶点相连的所有顶点”的顶点顺序是否有要求?"
可以是任意顺序。但在实际应用中,可能会需要按照指定规则来排序,比如按照顶点添加的次序、或者按照顶点值大小的顺序等等,这样可以有助于快速查找“带有某种极值”的顶点。