У меня проблема с алгоритмом зависимостей, зависимость похожа на зависимость от 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
Теперь я хочу, чтобы получить зависимость, когда я хочу установить компонент А, версия 1 и компонент D, версия 1. Поскольку все они зависят от компонента В, С, так что я нужно правильный алгоритм, чтобы получить правильную версию B и C
более того, я, возможно, потребуется обновить компонент а и 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
Существует ли существующий алгоритм для решения такой проблемы? Или аналогичная (более простая) проблема. Есть ли у вас предложения?
Как и не должно быть большого количества данных, поэтому не учитывайте производительность.
Заранее благодарен!
Для простого решения вы можете использовать топологический вид? Вы можете начать с построения графа, где каждый узел {node id, version no}. После этого выполните топологическую сортировку, чтобы получить порядок зависимостей. – trequartista
Спасибо, но в моем случае зависимости нужно только решить одну версию компонента, поэтому, если построить граф, для узлов с одинаковым идентификатором узла, в выходном списке должен выводиться только один узел; и для некоторого узла их версия может быть конфликтной, поэтому такой узел может никогда не появляться в выходном списке. Как решить эту проблему? – Xilang
Нет, я имел в виду, что каждый узел имеет идентификатор узла и идентификатор версии. то есть. {Компонент A, версия 1} и {Компонент A, версия 2} - разные узлы. Например, например: – trequartista