我有一个依赖关系算法的问题,依赖类似于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