•デイアルゴリズム[全表示]グラフ理論の26日問題•:強力なコネクティビティ+ Tarjanのアルゴリズム(A)

はじめに▎

  常にこのようなものを学びたいと思ったことは困難であり、これよりもはるかに優れました。

  これらの図に基づいて、その上に長くなります。

▎強連結

「定義」

  今強連結と呼ばれ、それは強力な接続性を持っている必要があります。

  強力なコミュニケーションは:、図を参照する2つの頂点は、相互に到達することができますので、我々は強連結呼び出します。

  強力なグラフ:有向グラフでは、任意の2点が相互に到達することができ、その後、私たちは、この数字は強連結グラフであると言います。

  強連結成分:有向グラフ(必ずしも強く接続されていないグラフ)において、多くのサブグラフが存在しなければならない強連結グラフは、特に、単一点も強連結グラフ、強連結成分と最大値が分割されているされています強連結グラフ。

  赤いボックス3つの強連結成分です。

  

"DFS&有向グラフ"

  使用図のDFSトラバーサル場合、それは木の形のようになります。

  原理は、任意の頂点から逸脱非常に簡単で、それはもはや横断されるように、私が行き来し続けることができない(またはビットに接続されていない)まで、拡大し続け、横断していません。

  そこ現在のツリーノード間の多くの関係があり、それらの側面のうち、ツリーを展開します。

  したがって、この知識の後、我々はいくつかの概念を把握する必要があります。

  現在のノードuと仮定します。

  ①枝エッジ:uは、エッジによって拡張され、訪れていません。

  ②表側:側は、ツリー内のDFS中性子ツリーノードを向け、

  ③エッジ後:監督DFSツリーの父の側。

  ④フォーク水平エッジ:エッジは、DFS非子ツリーのツリーを指示しました。

「裁きの関係。」

  このすべての条項の最初:現在のノードuは、ノードvを展開し、低ストレージアレイは、現在離れて最寄りのルートノード番号からなる、DFNは、ストレージノードの現在のアレイの数は、ノードとそのサブツリーを訪問です。

  次の図を考えてみます。

    

  現在のノードの数は、5:

  ①分岐側:側は、側枝として、まだ訪れていません。

  ②前縁:B側DFNサブツリーに記載[V]> DFN [U]、これは正面の側です。

  エッジ後③:有向エッジの後になるようにCは、スタック上にはなく、サブツリー内側を訪れました。

  横エッジフォーク④:D側がサブツリーで訪問していない、それがスタックされている、それは水平断面エッジです。

▎Tarjanアルゴリズム

『什么是Tarjan算法?』

  一种由Robert Tarjan提出的求解有向图强连通分量的线性时间的算法。

  Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。(copy自百度)

『算法核心』

  对于一条边(u,v),我们在之前的讲解中已经提到了dfn和low数组的意思。

  那么初始状态下:low[u]=dfn[u],这应该很好想,初始状态下离根节点最近的节点编号先赋值为自己遍历的编号,和并查集的初始化类似。

  每一次扩展时,若边为树枝边,那么我们就使用low[v]来更新low[u],如果是后向边,那么我们就使用dfn[v]来更新。

  当low[u] == dfn[u]时,就是一个分割点,要把u之后入栈的元素及u全部弹出栈。

  可能有些难理解,推荐一篇别人的博客,图解画得很好,链接在此

  当然,问tarjan算法也会告诉你图解的,小编就不画了。

おすすめ

転載: www.cnblogs.com/TFLS-gzr/p/11271586.html