[CLRS Chapter22]基本的图算法Ⅳ(深度优先搜索后图中每条边的类型可以提供关于图的重要信息)

39 篇文章 3 订阅
8 篇文章 0 订阅

在这里插入图片描述

边的分类

G ( V , E ) G(V,E) G(V,E)在基于深搜定义下的前驱子图 G π G_\pi Gπ(又称深度优先森林)中定义了四种类型的边:

  • 树边均为深度优先森林的边( E π E_\pi Eπ);
  • 后向边 E E E中非树边且将节点连向祖先节点的边(自循环的边被认为是后向边);
  • 前向边为后向边的反向描述,连接向后代节点的边;
  • 横向边为所有其他类型的边,包含同一树中非祖先、深搜森林中连接两棵树的边等等;

在这里插入图片描述

对应上节验证括号化定理的深搜的前驱子图可以得出,粗线描述的都为树边构成了前驱子图,标注为B为的是连接祖先的后向边,标注F是连接后代的前向边,而标注C的是横向边。

其中书中讨论的情况为:搜索过程中第一次探索 ( u , v ) (u,v) (u,v)边时,通过节点颜色可以得出该边的类型:

  1. 节点v为白色:树边;

    情况很容易得证,因为白色时会被添加到前驱子图使得 ( u , v ) ∈ E π (u,v)\in E_\pi (u,v)Eπ

  2. 节点v为灰色:后向边;

    不同于书中讨论:当在搜索中访问相邻节点只会有两个状态:

    • 访问节点为图中其他搜索树的节点,那么因为当前的树搜索未完成,其他树的状态有两种,一种是整棵树未被搜索节点为白色,这时可以将访问到的节点归纳到当前节点所在的树中;另一种情况是访问节点所在的树已经被搜索过,那么树的颜色应为黑色,与上述条件不符;
    • 访问节点为图中当前搜索树的节点,有两种状态,若为白色时这种情况归纳到第一种情况为树边;若为灰色时说明找到了该树中搜索还未回溯的节点 x x x且节点 x x x通过递归调用搜索找到了当前节点并形成了环访问回到了 x x x,这是可以证明x为节点v的祖先;若节点为黑色说明访问到的节点不是当前搜索树,与前提矛盾不考虑。
  3. 节点v为黑色:前向边或横向边;

    依旧分为两种可能性:

    • 若是一棵树中的节点,分为了两类情况,一类为上图 s → w s\rightarrow w sw的指向后代的前向边,另一类是 w → x w\rightarrow x wx没有直系亲缘关系的横向边;
    • 若不是一棵树中的节点,那么就只能归类为横向边。

在上述过程中的问题是深搜算法是一个在应用中全局搜索找答案的方法,所以边的性质可能不是唯一的,要针对顶点链表的顺序去看,但上述边的分类是基于深搜后的前驱子图的而不是待搜索的图。

[定理]在无向图搜索中,任意一条边要么是树边,要么是后向边。

搜索边 ( u , v ) (u,v) (u,v)的过程中,若节点v未被搜索过,那么根据上述判断边 ( u , v ) (u,v) (u,v)为树边;反之如果节点v被搜索过那么说明算法通过 ( v , u ) (v,u) (v,u)完成了第一次搜索,则u为后代,边 ( u , v ) (u,v) (u,v)为一条连接祖先的后向边。

问题: ( u , v ) (u,v) (u,v)在访问节点v为黑色时有性质: u . d < v . d u.d<v.d u.d<v.d时边为前向边, u . d > v . d u.d>v.d u.d>v.d时边为横向边。

色时有性质: u . d < v . d u.d<v.d u.d<v.d时边为前向边, u . d > v . d u.d>v.d u.d>v.d时边为横向边。

该问题情况三的讨论1中做了举例描述,可以尝试进行证明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数学小牛马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值