本节主要关注深度优先搜索的有关性质,包括:括号化定理、白色路径定理、深度优先搜索边的分类。下一节会涉及拓扑排序与强连通分支的算法,这些性质是算法的基础。
目录
一 括号化定理
深度优先搜索的一个重要的性质是,节点的发现时间与完成时间具有括号化结构。以" (u "表示节点的发现,以" u) "表示节点u的完成,则所有的括号都适当的嵌套在一起。以下图为例,我们通过DFS后获得的d[ ]与f[ ](详情见图论(一)):
该定理的本质其实就是递归栈的情况,因为我们的DFS是递归实现的,一个节点被遍历后就递归的遍历它的子节点,这样父子节点之间就存在嵌套关系,而兄弟节点必须等待一个节点的子节点全部被遍历才能遍历另一个节点,这样兄弟节点之间的括号不相交。
因此我们给出括号化定理的一般描述:在对有向或无向图G=(V,E)进行的任意深度优先搜索中,对于任意两个节点u和v来说,下面三种情况只有一种成立:
- 区间[u.d,u.f]与区间[v.d,v.f]完全分离,在深度优先森林中,节点u不是节点v的后代,节点v也不是节点u的后代。
- 区间[u.d,u.f]完全包含在区间[v.d,v.f]内,节点u是节点v的后代
- 区间[v.d,v.f]完全包含在区间[u.d,u.f]内,节点v是节点u的后代
二 白色路径定理
以DFS中每个节结点的颜色变化为前提【图论(一)】,白色路径定理给出的是在深度优先森林中,当一个结点是另一个结点的后代时的另一个重要特征。
(白色路径定理)在有向图或无向图G=(V,E)的深度优先森林中,结点v是结点u的后代当且仅当在发现结点的时间 u.d ,存在一条从结点u到结点v的全部由白色节点所构成的路径。
三 边的分类
我们可以通过深度优先搜索来对输入图G=(V,E)的边进行分类。每条边的类型可以提供关于图的重要信息。
对于在图G上进行DFS所生成的深度优先森林T,我们定义4种边的类型:
- 树边:DFS遍历经过的边
- 后向边/回边:后向边(u,v)是将节点u连接到深度优先数中一个祖先v的边,环也被认为是后向边
- 前向边:将节点u连接到其在深度优先树中后代节点v的边(u,v)
- 横向边/交叉边:其他的边,可以是连接同一棵树中的节点,只要其中一个结点不是另一个结点的祖先,也可以连接不同深度优先树中的两个结点。
在上图中椭圆内是时间戳
边的分类:灰色框内的是树边、B为后向边、F为前向边、C为横向边
在DFS中,通过第一次探索边(u,v)时结点v的颜色可以简单判断该边的类型:
- 结点v是白色:会被DFS遍历到,是树边。
- 结点v是灰色:该边早于u被遍历到,是后向边
- 结点v是黑色:剩余情况且u.d<v.d时是前向边,而u.d>v.d时是横向边
在无向图中,有一个推论:在对无向图进行深度优先搜索时,每条边要么是树边、要么是后向边。