【问题标题】:what are root cut nodes,bridge cut nodes, parent cut nodes in finding the aritculation vertices?什么是根切割节点,桥切割节点,父切割节点在寻找关节顶点?
【发布时间】:2012-12-15 03:50:57
【问题描述】:

什么是根切割节点,桥切割节点,父切割节点在寻找关节顶点? 有人可以用例子解释一下吗? 我特别对桥接节点感到困惑。 它的定义说

如果从 v 中最早可达的顶点是 v,则删除单个 edge (parent[v], v) 断开图

v 中最早可达的顶点怎么可能是 v?

【问题讨论】:

  • 你从哪里得到这个定义的?
  • 我正在阅读skiena的算法设计手册。它将每个节点的最早可达顶点初始化为自身,并在使用dfs遍历图形后,如果它保持不变,则它是一个桥节点。
  • Skiena 的 ADM 通常非常出色,但我认为它会在特定部分丢球。这是我见过的关于关节顶点 DFS 算法的最复杂和最令人困惑的解释之一。根切割节点、桥切割节点、父切割节点。什么?您真正需要知道的是,如果节点 N 的任何直接子节点没有返回 N 的祖先之一的替代路径,则节点 N 就是 AV。它对所有 N 都有效,除非 N 是叶子或具有单个子节点的根(从技术上讲,这使它成为叶子)。
  • 另外,我认为对如何确定节点的最早可达祖先 (ERA) 进行更严格的解释 - 即通过从其后端选择其自己的直接祖先中最早的一个 它的孩子的ERA - 会非常有帮助。从那时起,算法变得轻而易举。

标签: graph depth-first-search


【解决方案1】:

不知道你是否还在乎,但我现在正在阅读相同的文本

根切割节点

我认为根切割节点很明显

桥切节点

记得改变v的reachable_ancestor必须满足以下三个条件:

  • 有一条边 (v, y) 是后边
  • 对于边 (v, y),y 不是 v 的父节点
  • y的entry_time在v的reachable_ancestor的entry_time之前

因此,如果您查看本书的图 5.13,您会发现,因为一个(树上较低的)桥切节点没有不是 y 的父节点,所以它永远不会从初始状态更改其reachable_ancestor reachable_ancestor[v] = v。这反过来又使它成为桥切节点的父节点,并且(仅因为它不是叶子)使该节点也成为桥切节点。

父剪切节点

在图 5.13 中 v 的 parent 是 parent cut-node(而不是 bridge cut-node)的原因是因为 bridges 必须满足以下条件:

  • 边是树边
  • 没有后边缘从 v 或以下连接到 y 或以上

在图中很明显,v 的子节点连接回它的父节点 (y) 及以上,使得 v 和 y 之间的边不是桥,但使 y 仍然是切割节点。

希望有所帮助!

【讨论】:

  • 感谢@gonzofish 的澄清
  • 这是一个非常古老的问题,但我想确保一件事。它说,“如果 v 中最早可达的顶点是 v ... 的父级”。但是在书中给出的例子中,v 的父节点是 v 的可达顶点吗?(图 5.13)。为此,必须有来自 v 的后沿,而没有。我陷入了 process_edge 如何为 v 设置可达祖先作为其父级的问题。请赐教。
  • 如果您在书中进一步阅读,会发生这种情况,即reachable_vertex 会备份到父级,以防父级的可达祖先晚于子级的可达顶点。只有在这种情况下,reachable_ancestor[y] == parent[y]
  • 这个想法是,如果一个孩子可以到达更早的顶点,那么父母也可以做到
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 2022-01-08
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多