В ориентированном ациклическом графе, описывающем набор задач для обработки, мне нужно найти все задачи, которые можно обрабатывать одновременно. График не имеет циклов и довольно мал (~ 1000 узлов, ~ 2000 ребер), производительность не является основной проблемой.
Примеры с желаемым результатом:
[]
группа. Все задачи в группе должны быть обработаны перед продолжением [x & y]
означает, что x
и y
могут обрабатываться одновременно (x и y параллельно) x -> y
означает x
и y
должны обрабатываться последовательно (x перед y)
1
a -> [b & c] -> c
2
[a & e] -> b -> c -> [d & f]
3
[ [a -> b] & [e -> f] ] -> [ [c -> d] & g ]
Я не хочу на самом деле выполнять график, а скорее построить структуру данных, которая будет как можно более параллельной при сохранении порядка. Номенклатура и названия алгоритмов мне не очень знакомы, поэтому я с трудом пытаюсь найти похожие проблемы / решения в Интернете.