Существует ли алгоритм для нахождения максимального веса, охватывающего слабосвязный DAG в ориентированном графе, где каждый разрез имеет слабосвязные множества (существует хотя бы один направленный путь от одного множества к другому)? Или это сложная задача NP? В предыдущем вопросе по этой теме не было указано https://mathoverflow.net/questions/31864/algorithms-for-maximum-weighted-spanning-connected-dag-directed-acyclop-graph слабая или сильная связность, поэтому я хотел быть более точным.
Алгоритмы максимального взвешенного охвата слабосвязной DAG
Ответы (2)
Надеюсь, это не слишком поздно. В упомянутом случае легко подвести и Крускала, и Прим. Рассмотрим граф с двумя узлами: A --> B (вес 10), B --> A (вес 6), B --> A (вес 6) (да: два ребра из B в A; ничего в графе defn исключает!). Крускал сначала выбрал ребро A -> B и застрял. Прим выберет одно из ребер от B до A, а затем застрянет. Макс. взвешенный ациклический подграф — это тот, который содержит оба ребра из B в A. Это подграф, и он ацикличен!
Лучший Рави
Кажется, что ваше слабое условие связности просто связано с тем, что базовый неориентированный граф связан. Это достаточно легко; вы можете использовать Kruskal или Prim или любой другой ваш любимый алгоритм минимального связующего дерева.
Сильносвязный подграф минимального веса является NP-полным; заметим, что любой такой подграф имеет по крайней мере |V| ребер и что он имеет ровно |V| ребра тогда и только тогда, когда это гамильтонов цикл.
Вы можете выбрать вершину в качестве «корня» и попросить указать путь от каждой вершины к корню в вашем подграфе. Это проблема «минимального разветвления». Как указал @matejpavouk, для этого существует квадратичный алгоритм, созданный Чу, Лю и Эдмондсом.