我有一個依賴關係算法的問題,依賴類似於maven依賴,除了它是基於嚴格的版本範圍。算法來解決版本範圍的依賴關係
例如:
component A, version 1 depends on: component B, version 1~3; and component C, version 2~3
component D, version 1 depends on: component B, version 2~4; and component C, version 1~2
現在,我想的依賴,當我想安裝組件A,版本1和成分d,第1版。因爲它們都依賴於組分B,C等我需要一個正確的算法來獲得B和C的正確版本
進一步,我可能需要升級組件A和D.例如,現在我有以下新版本:
component A, version 2 depends on: component B, version 3~5; and component C, version 4~5
component A, version 3 depends on: component B, version 6~7; and component C, version 4~5
component D, version 2 depends on: component B, version 3~4; and component C, version 3~4
現在我需要一種算法來獲得我可以升級到的A和D的正確版本及其所有依賴項。這裏的一個問題是成分A 3版本和組件d,第2版具有成分B的依賴性衝突
是否有現有的算法來解決這樣的問題呢?或類似(更容易)的問題。你有什麼建議嗎?
由於不應該有大量的數據,所以不考慮性能。
在此先感謝!
對於一個簡單的解決方案,你可以使用拓撲排序嗎?您可以從建立一個每個節點都是{節點ID,版本號}的圖開始。之後,做一個拓撲排序來獲得依賴順序。 – trequartista 2013-04-09 17:57:35
謝謝,但在我的情況下,依賴只需要解析一個組件版本,所以如果構建一個圖,對於具有相同節點id的節點,輸出列表只能輸出一個節點;對於某些節點來說,它們的版本可能會有衝突,所以這樣的節點可能永遠不會在輸出列表中。如何解決這個問題呢? – Xilang 2013-04-10 01:57:18
不是我的意思是,每個節點都有節點ID和版本ID。即。 {組件A,版本1}和{組件A,版本2}是不同的節點。例如: – trequartista 2013-04-10 18:38:10