強連通分量的簡單概括

簡介

對於強連通分量,是只懂得原理,但不知道如何用算法實現求解。今天就對強連通分量的算法進行一個整理,也對強連通分量的實例進行分析。

強連通分量

強連通分量出現在有向有環圖中,每一個連通的分量都可以被當作是強連通分量。如左下圖每一個虛線框內都是一個強連通分量,右下圖則將強連通分量當作一個結點後構成的一個DAG
這裏寫圖片描述

在《算法概論》中採用的pre,post時間序列的線性算法中,強連通分量有以下的特點:
1. 在DFS中得到的post值最大的頂點一定位於一個源點強連通部件中
2. 如果C和C’是強連通部件,同時從C中的一個頂點到C’中的一個頂點存在一條邊,則C中post的最大值要大於C’中post的最大值。
3. 每個有向圖至少存在一個匯點和一個源點

根據上面的性質,強連通部件能夠通過按照其各自內部頂點的post最大值的降序排列,實現線性化。

一旦我們找到了第一個匯點強連通部件,就將它從圖中刪除(刪除該強連通部件的所有結點),得到的新圖中的post值最大的頂點一定在新圖中的一個匯點強連通部件中。從而我們可以重複使用這種基於針對GR 的DFS的頂點post值排序操作。完成上述動作直至找到所有的強連通部件爲止。

算法實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章