Algorithm 生成树与生成林
从概念上讲,生成树和生成林在图中有什么区别 另外,是否可以通过DFS或BFS遍历来构建跨越林?为什么?怎么做 我理解生成树,但我找不到任何关于生成林的清晰解释。甚至维基百科()也没有给出一个明确的定义。 我的书(数据结构和算法,威利-第六版)也没有关于跨越森林的定义Algorithm 生成树与生成林,algorithm,graph-theory,depth-first-search,breadth-first-search,spanning-tree,Algorithm,Graph Theory,Depth First Search,Breadth First Search,Spanning Tree,从概念上讲,生成树和生成林在图中有什么区别 另外,是否可以通过DFS或BFS遍历来构建跨越林?为什么?怎么做 我理解生成树,但我找不到任何关于生成林的清晰解释。甚至维基百科()也没有给出一个明确的定义。 我的书(数据结构和算法,威利-第六版)也没有关于跨越森林的定义 我想知道,如果我们有一个包含三个连通组件的图,是否可以通过DFS/BFS遍历来构造生成林?当图中只有一个连通组件时,生成树=生成林 但是当图形中有多个连接的组件时。例如,在下图中,我们有3连接的组件: 因此,对于每个组件,我们将有
我想知道,如果我们有一个包含三个连通组件的图,是否可以通过DFS/BFS遍历来构造生成林?当
图中只有一个连通组件时,生成树=生成林
但是当图形中有多个连接的组件时。例如,在下图中,我们有3连接的组件
:
因此,对于每个组件
,我们将有一个生成树
,所有3个生成树
将构成生成林
我想知道,如果我们有一个图,例如三个连通的
组件中,是否可以通过
DFS/BFS遍历
是的,这是可能的。当只有1个连接的组件时
,您的BFS
或DFS
将终止访问所有顶点,您将拥有一个生成树(在这种情况下,它等于生成林)
但是当您有多个连接的组件时
,如图所示,您只需从未访问的顶点开始另一个BFS
或DFS
。当没有未访问的顶点时,您的算法终止,每个BFS
或DFS
遍历将生成一个生成树
即使对于完整的图,也可以通过以下算法构建非平凡的生成林:
先决条件
- 所有顶点都未标记
- 从1到m枚举边
边缘处理
- 如果标记了它的两个相邻顶点,则跳过它,因为该边将合并森林的树或在其中一棵树中创建一个循环
- 否则,请标记其未标记的相邻顶点
算法
按边的枚举顺序处理边
解释:
虽然在构造生成树时添加“桥接”连接组件的边是可行的,但在上述算法中不添加这些边
解释:
如果按照递增长度枚举边,则生成的跨越林的边将是MST的子集,林的树将类似于“盆地”,即,对于创建连接组件的树,边的长度最小,并且随着后面步骤中连接的每条边的增加而增加。
在这种情况下,生成林的属性可以提供对原始图的结构属性的洞察和/或在算法中使用。很简单,图中每个连接的组件都会生成一棵生成树,所有这些都被称为生成林。@Rishav感谢您的回复。你能在这张图片上举例解释一下吗?我目前没有照片编辑器,但您熟悉连接组件的概念吗?一个连接的组件由所有彼此可以到达的顶点组成。那幅画里有三个。每个组件都用于生成一个生成树。当你获取所有3棵生成树的集合时,它被称为生成林。@NimaSalami可以自由地进行任何查询。