的問題(在問問題,找「ONE」頂點s
和t
這是張貼問題的圖片不同之間不相交的路徑)是不NP-hard
並且可以在多項式時間O(V^2E)
來解決。此外,is there are k disjoint paths between s and t
的問題也是而不是NP-Complete
。
這是上面提到證明NP-completeness
(http://www.shannarasite.org/kb/kbse48.html)的文章有一個微妙的差異....有你不知道的s
和t
,因此問題就變得很難。但是,一旦修復s
和t
,它就是多項式。
這裏是要找到在多項式時間a
頂點不相交路徑算法---
轉換這個問題的最大流問題和使用Dinic's
算法來解決它在O(V^2E)
http://en.wikipedia.org/wiki/Dinitz_blocking_flow_algorithm
這是轉換:
選擇源s
和目標t
要在其間找到不相交路徑的頂點。 對於每個頂點v
添加兩個新頂點到G'
(我們正在構建的圖),即對於每個v \in G
添加v_1 and v_2
到G'
。
對於每個邊緣(a,b)
添加以下邊緣(a_1, a_2)
,(b_1, b_2)
,(a_2, b_1)
和(b_2, a_1)
(記住,頂點已經被變換,並注意邊緣的方向上)。
添加S
和T
到G'
和邊緣(S,s_1)
和(t_2, T)
。
爲所有邊緣指定權重1並運行最大流算法(在S
和T
之間)。如果您獲得1的最大流量,那麼該流(或路徑)對應於原始圖中的頂點不相交路徑。
我們那種k
分離路徑:
的k
的邊緣(S,s_1)
,(t_2, T)
,(s1_, s_2)
和(t_1, t_2)
.....和重量1
對於其餘邊緣分配權重...運行迪尼奇的算法中再次,如果有最大流量的容量k
,那給你不相交的路徑。
爲什麼我覺得這是作業? – 2013-05-01 04:34:25
這個問題有點奇怪。 O(n * m^2)和NP-hard之間有相當的距離。鑑於這樣一個特定的複雜性目標,我懷疑你應該在「是」分支上工作。 :) – 2013-05-01 04:35:10
@TimothyShields,它的功課,或者說,它是我嘗試過去一年的考試試卷。 – 2013-05-01 10:27:21