DFT中交叉边缘和前边缘之间的差异


11

在深度优先的树中,有定义树的边(即遍历中使用的边)。

有一些剩余的边缘连接其他一些节点。交叉边缘和前边缘有什么区别?

从维基百科:

基于此生成树,原始图的边缘可分为三类:前向边缘(从树的节点指向其后代之一),后边缘(从节点到其祖先之一),和交叉边缘,两者都不起作用。有时,属于生成树本身的树边缘与前边缘分开进行分类。如果原始图形是无向的,则其所有边缘均为树形边缘或后边缘。

从一个节点指向另一个节点的遍历中未使用的边线是否不建立父子关系?


相关信息:cs.stackexchange.com/questions/99988/…寻求建立一种算法,对于有向图,该算法在深度优先搜索期间将优先选择前向边缘而不是交叉边缘。
pfalcon

Answers:


23

维基百科有答案:

在此处输入图片说明

所有类型的边缘均出现在此图片中。在此图上找出DFS(按数字顺序浏览节点),然后查看直觉失败的地方。


这将解释该图:

前缘:(u,v),其中v是u的后代,但不是树的边缘,它是将顶点连接到DFS树中的后代的非树的边缘。

交叉边缘:任何其他边缘。可以在相同的深度优先树或不同深度优先树中的顶点之间移动。(layman)
它是图形G中的任何其他边。它连接两个不同DFS树中的顶点或同一DFS树中的两个顶点,两者都不是另一个祖先。(正式)


为什么要首先遍历6个(不是最右侧),这是不可能的?如果那件事发生了,那2-> 3边又叫什么呢?
soandos

@soandos,我建议您花些时间自己跟踪算法。假设Wikipedians没记错,该图在此图上描述了DFS的真实运行,因此有一种方法可以将算法拟合到该跟踪中。边缘的类型在Wikipedia中已足够清楚地描述,您也可以参考此示例。
Yuval Filmus 2013年

我了解这是执行DFS的有效方法。我只是问如果以其他方式完成了该怎么办。
soandos

那么结果将是不同的。抱歉,您必须自己解决。
Yuval Filmus 2013年

2
@soandos通常,很可能会有多个DFS遍历。此处使用的概念是相对于一个给定遍历的,对于多次遍历将有所不同。
拉斐尔

9

在无向图中遍历DFS不会留下交叉边缘,因为会探索入射在顶点上的所有边缘。

但是,在有向图中,您可能会遇到一条导致先前已发现的顶点的边,从而该顶点不是当前顶点的祖先或后代。这样的边缘称为十字边缘。


阿波罗夫,感谢您的答复。在我看来,当您到达Wikipedia中所描绘的DFS中的顶点6时,您有三个要从6遍历的边。此时,顶点6是“当前”的。最终,您将遍历该边到顶点3。虽然已经访问了3,但是由于存在从6到3的边,所以3是“当前”顶点6的后代。如果是这样,则它违反了十字边的定义。该定义中还必须包含一些没有被明确定义的内容。

实际上,DFS仅包含任一树边缘作为后边缘(算法概论22.10)。
jrhee17 '16

2

在DFS遍历中,节点的所有子节点完成后,节点也将完成。如果在遍历期间标记每个节点的发现和完成时间,则可以通过比较开始时间和结束时间来检查节点是否为后代。实际上,任何DFS遍历都会根据以下规则对其边缘进行分区。

令d [node]为节点的发现时间,同样令f [node]为完成时间。

括号定理对于所有u,v,恰好满足以下条件之一:
1. d [u] <f [u] <d [v] <f [v]或d [v] <f [v] <d [u ] <f [u]并且u和v都不是另一个的后代。

  1. d [u] <d [v] <f [v] <f [u]并且v是u的后代。

  2. d [v] <d [u] <f [u] <f [v]并且u是v的后代。

因此,d [u] <d [v] <f [u] <f [v]不会发生。
像括号一样:()[],([])和[()]可以,但是([]]和[(])不能。

例如,考虑带有边的图形:
A-> B
A-> C
B-> C

让访问顺序由一串节点标签表示,其中“ ABCCBA”表示A-> B-> C(完成)B(完成)A(完成),类似于((()))。

因此,“ ACCBBA”可以是“(()())”的模型。

示例:
“ CCABBA”:由于CC不在A的内部,所以A-> C是一个交叉边

“ ACCBBA”:那么A-> C是树的边缘(直接后代)。

来源:
CLRS:
https:
//mitpress.mit.edu/books/introduction-algorithms讲义笔记http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/GraphAlgor/depthSearch.htm

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.