Отримання паралельних елементів у роздільній здатності залежності


13

Я реалізував топологічний сортування на основі статті у Вікіпедії, яку я використовую для вирішення залежності, але вона повертає лінійний список. Який алгоритм можна використовувати для пошуку незалежних шляхів?


1
Один із способів вирішити це - моделювати вузли на графіку як актори та дозволити деякій бібліотеці акторів подбати про впорядкування.
svick

Відповіді:


16

Я припускаю, що ребро означає, що u має бути виконано перед v . Якщо це не так, оберніть усі краї. Крім того, я припускаю, що вас менше цікавлять шляхи (ті, які вже надаються DAG), ніж хороша стратегія виконання з урахуванням залежностей.(у,v)уv

SiГ=(V,Е)

S0={vVуV.(у,v)Е}Si+1={vVуV.(у,v)Еук=0iSк}

к

for i=0 to k
  parallel foreach T in S_k
    execute T

S0

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набір наступників.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.