Я реализовал топологическую сортировку на основе статьи в Википедии, которую я использую для разрешения зависимостей, но она возвращает линейный список. Какой алгоритм я могу использовать, чтобы найти независимые пути?
Я реализовал топологическую сортировку на основе статьи в Википедии, которую я использую для разрешения зависимостей, но она возвращает линейный список. Какой алгоритм я могу использовать, чтобы найти независимые пути?
Ответы:
Я предполагаю, что ребро означает, что u должно быть выполнено до v . Если это не так, разверните все края. Кроме того, я предполагаю, что вас меньше интересуют пути (те, которые уже определены DAG), чем хорошая стратегия выполнения с учетом зависимостей.
for i=0 to k
parallel foreach T in S_k
execute T
parallel foreach T in S_0
recursive_execute T
где
recursive_execute T {
atomic { if T.count++ < T.indeg then return }
execute T
parallel foreach T' in T.succ
recursive_execute T'
}
и T.count
представляет собой простой счетчик, содержащий количество предшественников, T
которые уже были выполнены, T.indeg
количество предшественников и T.succ
набор преемников.