Я пытался найти алгоритм, чтобы найти максимальное покрытие вершинных циклов ориентированного графа то есть набор непересекающихся циклов, которые содержат все вершины в G с максимально возможным количеством циклов (мы не рассматриваем отдельные вершины циклов здесь). Я знаю, что проблема нахождения минимального покрытия вершинных циклов, а также нахождения покрытия вершинных циклов с ровно k циклами является NP-полной. Но как насчет максимального случая?
Несмотря на то, что я нашел бы ответ на этот интересный вопрос в целом, графики, для которых я хочу использовать это, на самом деле весьма ограничены своей конструкцией, поэтому, возможно, даже если проблема является NP-полной, для этих конкретных случаев может быть полиномиальное решение.
У нас есть список целых чисел , элементы l i, и мы будем использовать S , элементы s i для ссылки на L после его сортировки. В качестве примера:
Вершины графа будут отождествляться с парами такими, что l i = n и s i ≠ n . Граф имеет направленное ребро ( n , i ) → ( m , j ) тогда и только тогда, когда s j = n . (Цикл на этом графике соответствует набору значений, которые можно циклически переставлять, чтобы они оказались в отсортированном положении.)
Приведенный выше пример даст следующий график (с использованием индексов на основе 1):
Одна вещь, которая не работает, - это жадный подход многократного удаления наименьшего цикла (как показано в этом примере).
Обратите внимание, что эта проблема (если я не допустил ошибок) эквивалентна вопросу о том, сколько свопов нужно для сортировки заданного списка. (Что и вдохновило на изучение этой проблемы в первую очередь.)
То есть вес зависит от размера цикла, а не от конкретных ребер, которые он включает. Но, возможно, это дает кому-то другое представление о том, как уменьшить проблему.
Также представляется, что ограничение размера циклов делает проблему APX сложной для общих графов. Это не обязательно означает, что то же самое верно для задачи максимизации числа циклов, а также для конкретных рассматриваемых здесь графиков, но, похоже, это достаточно тесно связано, что это может быть важно.
В итоге: можно ли найти максимальное покрытие вершины непересекающегося цикла для графов, построенных по описанному выше процессу?
Помимо этого, мне также было бы интересно узнать, имеет ли максимальное покрытие вершин непересекающихся циклов эффективное решение для произвольных графов, допускающих хотя бы одно покрытие циклов (которое, вероятно, выпадет в качестве ответа на главный вопрос), или же просто определение количества циклов в максимальном покрытии (в отличие от фактических ребер, содержащихся в каждом) делает проблему еще проще. Я рад опубликовать их как отдельные вопросы, если люди думают, что они заслуживают полноценных ответов самостоятельно.