数据结构算法笔记 从入门到放弃 (二)一篇文章读懂图

图(Graph)

为什么要使用图?

如果你有一个编程问题可以通过顶点和边表示出来,那么你就可以将你的问题用图画出来,然后使用著名的图算法(比如广度优先搜索 或者 深度优先搜索)来找到解决方案。

基本知识点

  • 阶(Order)、度:出度(Out-Degree)、入度(In-Degree)
  • 树(Tree)、森林(Forest)、环(Loop)
  • 有向图(Directed Graph)、无向图(Undirected Graph)、完全有向图、完全无向图
  • 连通图(Connected Graph)、连通分量(Connected Component)
  • 存储和表达方式:邻接矩阵(Adjacency Matrix)、邻接链表(Adjacency List)

与图相关的算法

  • 图的遍历:深度优先、广度优先
  • 环的检测:有向图、无向图
  • 拓扑排序
  • 最短路径算法:Dijkstra、Bellman-Ford、Floyd Warshall
  • 连通性相关算法:Kosaraju、Tarjan、求解孤岛的数量、判断是否为树
  • 图的着色、旅行商问题等

必会知识点

  • 图的存储方式:邻接矩阵、邻接列表

数据结构算法笔记 从入门到放弃 (二)一篇文章读懂图

数据结构算法笔记 从入门到放弃 (二)一篇文章读懂图

两种储存方式如何抉择?

假设 V 表示图中顶点的个数,E 表示边的个数。

数据结构算法笔记 从入门到放弃 (二)一篇文章读懂图

所以,当图比较密集,顶点较少时,每一个顶点都和大多数其他顶点相连,那么相邻矩阵更合适。反之,在 稀疏图的情况下,每一个顶点都只会和少数几个顶点相连,这种情况下相邻列表是最佳选择。

  • 图的遍历(广度优先,深度优先)

二部图的检测、树的检测、华北的检测:有向图、无向图

拓扑排序

联合——查找算法

最短路径