Eu implementei uma classificação topológica com base no artigo da Wikipedia que estou usando para resolução de dependências, mas ele retorna uma lista linear. Que tipo de algoritmo posso usar para encontrar os caminhos independentes?
Eu implementei uma classificação topológica com base no artigo da Wikipedia que estou usando para resolução de dependências, mas ele retorna uma lista linear. Que tipo de algoritmo posso usar para encontrar os caminhos independentes?
Respostas:
Suponho que uma borda significa que u deve ser executado antes de v . Se não for esse o caso, vire todas as bordas. Além disso, suponho que você esteja menos interessado em caminhos (já fornecidos pelo DAG) do que em uma boa estratégia de execução, dadas as dependências.
for i=0 to k
parallel foreach T in S_k
execute T
parallel foreach T in S_0
recursive_execute T
Onde
recursive_execute T {
atomic { if T.count++ < T.indeg then return }
execute T
parallel foreach T' in T.succ
recursive_execute T'
}
e T.count
é um contador simples que contém o número de predecessores T
já executados, T.indeg
o número de predecessores e T.succ
o conjunto de sucessores.