В исследовательской литературе эта проблема заключается в планировании заданий с приоритетом на одной машине, чтобы минимизировать общее взвешенное время выполнения.Есть алгоритм O (n log n) для параллельно-последовательного приоритета из-за Лоулера.Позвольте мне резюмировать это ниже в особом случае деревьев.
Если бы не было требования, чтобы родители были запланированы раньше, чем их дети, то мы бы хотели раскрашивать в порядке увеличения веса.Процедура Лоулера работает снизу вверх, объединяя узлы в так называемые составные узлы.Выходными данными в каждом узле x является набор составных узлов, который (1) содержит каждого потомка x ровно один раз (2) может быть окрашен в неубывающем порядке веса (где вес составного узла - это средний вес егосоставляющие узлы) без нарушения ограничений по порядку «родитель-потомок».
В каждом узле x в порядке следования сначала объедините наборы из дочерних элементов x.Хотя в объединенном наборе существует составной узел, который по крайней мере такой же тяжелый, как x, извлеките этот узел и замените x составным, состоящим из x и этого узла.Для эффективности представьте наборы как объединяемую очередь приоритетов (например, кучи сопряжения).
Наконец, сортируйте составные узлы и сведите их в список.