gpt4 book ai didi

graph - 我如何学习 Tarjan 算法?

转载 作者:行者123 更新时间:2023-12-03 21:22:53 27 4
gpt4 key购买 nike

我已经尝试从维基百科学习 Tarjan 的算法 3 个小时了,但我就是无法理解它。 :(

http://en.wikipedia.org/wiki/Tarjan's_strongly_connected_components_algorithm#cite_note-1

为什么是DFS树的子树? (实际上DFS产生了森林?o_O)
为什么v.lowlink=v.index暗示 v是根吗?

有人可以向我解释一下/给出这个算法背后的直觉或动机吗?

最佳答案

这个想法是:在遍历树时,每次搜索分支并回溯时,您都会检查是否遇到了树中“上”节点的边。

  • 如果你没有( if (v.lowlink = v.index) ),那么你刚刚完成了一个 SCC - 它由当前节点和堆栈上的所有节点组成。这正是 DFS 树的子树,除了 SCC 中已经完成的节点。
  • 如果这样做了,则将此信息传播到“上层”节点 ( v.lowlink := min(v.lowlink, w.lowlink) ),因为结合 DFS 树中的路径,边创建了“向上”路径。

  • DFS 生成森林,但您总是一次考虑一棵树。 SCC 总是包含在一个 DFS 树中,否则(作为一个 SCC)在两个(所有)有问题的树之间会有一条双向路径 - 这是一个矛盾。

    关于graph - 我如何学习 Tarjan 算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11010881/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com