Подтвердить что ты не робот

Как удалить циклы в невзвешенном ориентированном графе, чтобы число ребер было максимизировано?

Пусть G - невзвешенный ориентированный граф, содержащий циклы. Я ищу алгоритм, который находит/создает все ациклические графы G ', состоящие из всех вершин из G и подмножества ребер G, достаточно малые, чтобы G' ациклично.

Более формальный: искомый алгоритм потребляет G и создает набор ациклических графов S, где каждый граф G 'в S удовлетворяет следующим свойствам:

  • G 'содержит все вершины из G.
  • G 'содержит подмножество ребер G, такое, что G' ациклично.
  • Число ребер G 'максимизировано. Это означает, что G '' не удовлетворяет свойствам 1 и 2, так что G '' содержит больше ребер, тогда G 'и G' 'ацикличны.

Фон: исходный граф G моделирует парное упорядочение между элементами. Это не может быть использовано как упорядочение по всем элементам из-за циклов на графике. Поэтому максимальные ациклические графы G должны моделировать наилучшее возможное приближение к этому упорядочению, пытаясь как можно более эффективно учитывать парное упорядочивающее отношение.

В наивном подходе можно было удалить все возможные комбинации ребер и проверить ацикличность после каждого удаления. В этом случае существует сильно разветвляющееся дерево вариаций, означающее плохое время и сложность пространства.

Примечание. Проблема может быть связана с остовным деревом, и вы можете определить графы G как своего рода ориентированное остовное дерево. Но имейте в виду, что в моем случае пара ребер в G 'может иметь один и тот же начальный или один и тот же конечный вершин. Это противоречит некоторым определениям ориентированных связующих деревьев, используемых в литературе.

EDIT: добавлено интуитивное описание, справочная информация и примечание, связанные с перекрытием деревьев.

4b9b3361

Ответ 1

Эта проблема называется Arc Arc Arc. Поскольку он NP-жесткий, маловероятно, что вы найдете масштабируемый быстрый алгоритм. Однако, если ваши экземпляры малы, тогда могут работать алгоритмы, такие как из статьи "О перечислении всех минимальных решений проблем обратной связи" Б. Швиковского и Э. Спеккенмейера.

Ответ 3

Если ваша цель состоит в том, чтобы удалить края циклов (прерывания циклов) при сохранении как можно большего числа иерархий (структур) графа, эта работа может быть полезной: https://github.com/zhenv5/breaking_cycles_in_noisy_hierarchies