Ho implementato un ordinamento topologico basato sull'articolo di Wikipedia che sto usando per la risoluzione delle dipendenze, ma restituisce un elenco lineare. Che tipo di algoritmo posso usare per trovare i percorsi indipendenti?
Ho implementato un ordinamento topologico basato sull'articolo di Wikipedia che sto usando per la risoluzione delle dipendenze, ma restituisce un elenco lineare. Che tipo di algoritmo posso usare per trovare i percorsi indipendenti?
Risposte:
Si considera che un bordo mezzi che u deve essere eseguita prima v . In caso contrario, girare attorno a tutti i bordi. Suppongo inoltre che tu sia meno interessato ai percorsi (quelli già forniti dal DAG) che a una buona strategia di esecuzione date le dipendenze.
for i=0 to k
parallel foreach T in S_k
execute T
parallel foreach T in S_0
recursive_execute T
dove
recursive_execute T {
atomic { if T.count++ < T.indeg then return }
execute T
parallel foreach T' in T.succ
recursive_execute T'
}
ed T.count
è un semplice contatore che contiene il numero di predecessori T
già eseguiti, T.indeg
il numero di predecessori e T.succ
l'insieme di successori.