我有一個向無環圖其中每個節點代表一個任務,每一個有向邊A -> B
意味着task A
前應task B
開始識別冗餘依賴於圖表
一個簡單的例子可能是這樣進行:
所以這實際上是一個工作流程。在該圖中,邊緣A -> B
被認爲是冗餘的,因爲任務B需要首先完成任務C,並且任務C需要首先完成任務A. (更不用說另一條路徑A -> D -> E -> B
,這使得不需要A -> B
)
問題是:我想確定(說,只是輸出)圖上的所有冗餘依賴(邊)。我的朋友和我有這樣一個想法:迭代遍歷圖上的所有邊,並且對於每條邊說X -> Y
,將其刪除並檢查從X
到Y
(例如,運行DFS/BFS)的連接性,如果仍然存在一個路徑(除了被刪除的路徑),那麼邊緣X -> Y
是多餘的,可以被物理刪除,否則就把它放回去。在這種情況下,最壞情況下的複雜度可能是O(n^2)
(DFS/BFS每次通過幾乎所有邊),其中n代表圖上邊的數量。
我不知道這是否有任何優化?
這正是我想要的。我注意到維基沒有提供標準的實現或僞代碼。猜猜我最好參考那些論文。 –