2016-04-28 50 views
1

給定一個具有頂點u和v的加權DAG,每個邊權重爲-1或1.如何確定從u到v的路徑是否具有零權重和?我只能想出一個算法來計算從u到v的所有路徑,然後總結權重以查看路徑是否可以滿足要求。我聽說過類似問題的A *方法,但我認爲這個問題不應該那麼複雜。這個問題有更好的算法嗎?在兩個頂點之間找到一條具有零權重總和的路徑

+0

您可以使用DP來解決它,因爲它是一個DAG。 – Sayakiss

+0

是的,DP可以解決它。但是不知道這些子問題是怎麼樣的:/ – haruhi93

回答

3

考慮具有後繼節點n_i的頂點u,其各自的邊權重爲w_i

你有重路徑W的uv如果您有:從n_0v體重W - w_0

  • 路徑,或

  • n_1v體重W - w_1路徑,或

  • ...

可以作出上述的基礎上,一個DP算法,並在一組的形式memoizing子問題的解決方案,包含<n,w>雙,意爲「有來自n的路徑v體重w。 「 如果該套件最終包含<u,0>,則您有解決方案。

+1

空間複雜度最差爲O(| V || E |),因爲在所有路徑中不能超過2 | E | +1個不同的權重(路徑可以達到最高重量是| E |,最低的是| | E |)。 –

+0

合理的解決方案。但如何確定子問題的數量? – haruhi93

+0

@ haruhi93:每個不同的(頂點,總重量)對至多有一個子問題。這不是太多(參見我以前的評論),所以你可以解決*每一個這樣的對。 –

相關問題