CS61B - Lec28 - Intro to Graphs


今天学习了新的结构——Graph,是更广义上的Tree(Tree∈Graph)。

Trees and Traversals

这一节讲了之前提到的Tree的遍历方式(Traversals)——preorder, inorder, postorder。具体意思就是根节点的三种遍历顺序,最先,中间以及最后。
先打根节点(preOrder):
在这里插入图片描述
先打左节点(inOrder):
在这里插入图片描述
最后打根节点(postOrder):
在这里插入图片描述
树形结构适合文件管理,如下图,递归的遍历方式可以很方便的实现各个文件夹统计文件总数的功能。
在这里插入图片描述

Graphs

前面说过了,Graphs是更广义上的Tree,Tree属于Graph的一部分。Tree必须满足两点之间有且只有一条路径,而Graph可以包含cycle,并且两点之间还可以不相连。
在这里插入图片描述
这张图可以更清楚地看到为什么称这种结构为Graph。因为这种结构更像几何图形:包含顶点、边。有时也可给顶点编号或者设置权重。
Path是一系列被边相连的顶点,simple path是不经过重复顶点的一条path。
Cycle是起始顶点和终止顶点相同的path。
如果有两个顶点中间有一条path,就说这两个顶点是相连的;如果所有的顶点相连,就说这个graph是相连的。
在这里插入图片描述
Graph有acyclic和cyclic分类方式,标准就是包不包含循环方式;还有directed和undirected,节点包不包含方向。
在这里插入图片描述

Graph Problems

在这里插入图片描述
两个比较著名的问题:

  • 有没有一条经过所有edge的cycle?
  • 有没有一条经过所有顶点的cycle?

在这里插入图片描述

Depth-First Traversal

这一节讲了深度优先的遍历方式。

首先看s-t问题,求两点是否相连,也就是看看有没有一条path经过s和t。需要遍历一下graph。
在这里插入图片描述
可以这样:
在这里插入图片描述
但是很明显,由于没有方向,所以在遍历某个节点的所有neighbour的时候,会遍历到上一个节点,造成死循环,解决方式是加一个mark,如果遍历过了就变为1,遍历到就自动跳过。
在这里插入图片描述
以上的遍历方式叫深度优先遍历(Depth First Traversal)。意思就是把某个节点的一个subgraph全遍历了,再转到下一个subgraph。因为遍历是越挖越深,不断穷尽到底(Tree更直观一点),所以称之为深度优先遍历方式。
在这里插入图片描述
上图中0-3的特殊情况,没有遍历完0的subgraph就有可能转到另一个subgraph3,不过这也算深度优先,说是毕竟还是先遍历subgraph了。

发布了20 篇原创文章 · 获赞 0 · 访问量 170

猜你喜欢

转载自blog.csdn.net/fourier_transformer/article/details/105584381