Я работаю над алгоритмом, целью которого является найти минимальный набор пакетов для установки пакета "X".
Я объясню лучше с примера:
X depends on A and (E or C)
A depends on E and (H or Y)
E depends on B and (Z or Y)
C depends on (A or K)
H depends on nothing
Y depends on nothing
Z depends on nothing
K depends on nothing
Решение заключается в установке: A E B Y.
Вот образ, чтобы описать пример:
Есть ли алгоритм для решения проблемы без использования подхода грубой силы?
Я уже много читал об алгоритмах, таких как DFS, BFS, Dijkstra и т.д. Проблема в том, что эти алгоритмы не могут обрабатывать условие "ИЛИ".
UPDATE
Я не хочу использовать внешние библиотеки.
Алгоритм не должен обрабатывать круговые зависимости.
UPDATE
Одним из возможных решений могло бы быть вычисление всех возможных путей каждой вершины и для каждой вершины на возможном пути, делая то же самое. Таким образом, возможный путь для X будет (A E), (A C). Теперь для каждого элемента этих двух возможных путей мы можем сделать то же самое: A = (E H), (E Y)/E = (B Z), (B Y) и так далее... В конце мы можем объединить возможные пути каждой вершины в SET и выбрать ту, которая имеет минимальную длину.
Как вы думаете?