Как обнаружить бесполезные зависимости?

1

Предполагая, что у меня есть куча зависимостей между некоторыми задачами:

 A --> B 
 A --> D 
 B --> C  
 C --> D 
 E --> F  
 F --> G

Таким образом, что A → B означает, что B может работать только после завершения A.

Как я могу обнаружить и удалить бесполезные зависимости?

В этом случае "A → D" вызывает D зависит от C, который зависит от B и B, зависит от A.

  • 0
    Если вы используете Maven в качестве системы сборки, смотрите здесь: [is-there-a-простой-способ-удалить-неиспользованные-зависимости-от-a-maven-pom-xml] [1] [1]: stackoverflow. ком / вопросы / 1517611 / ...
  • 0
    Почему не А -> Б?
Показать ещё 13 комментариев
Теги:
graph-theory
constraint-programming

2 ответа

0
Лучший ответ

мне удалось найти более легкое решение для реализации, чем предлагаемое stuXnet.

Используя библиотеку Jung, я проверяю, существует ли более одного пути между каждой парой данной зависимости. Если это так, то эта зависимость, безусловно, не нужна, поэтому мне просто нужно удалить соответствующий край.

2

Переведя это в матрицу смежности, вы получите следующее:

  A B C D E F G
A 0 1 0 1 0 0 0
B 0 0 1 0 0 0 0
C 0 0 0 1 0 0 0
D 0 0 0 0 0 0 0
E 0 0 0 0 0 1 0
F 0 0 0 0 0 0 1
G 0 0 0 0 0 0 0

Умножение этой матрицы на результат приведет к созданию новой матрицы, рассказывающей о том, сколько разных способов от каждого узла к каждому, используя два шага. Умножая его снова, вы увидите результат для трех шагов и т.д.

Вообще говоря, A раз k приведет к тому, что матрица сообщит вам количество разных путей от одного узла к другому, выполнив k шагов.

Используя эту информацию, вы можете попытаться определить зависимости между узлами/задачами, описанными несколькими путями. Между A и D вы увидите путь с A ^ 1 (A → D) и в ^ 3 (A → B → C → D).

После того, как эти множественные пути от узла X до узла Y будут замечены, вы можете удалить прямую зависимость в исходной матрице смежности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню