Что такое алгоритм динамического программирования для поиска гамильтонова цикла в неориентированном графе? Я где-то видел, что существует алгоритм с временной сложностью O(n.2^n)
.
Каков алгоритм динамического программирования для нахождения гамильтонова цикла в графе?
Ответы (2)
Действительно, существует O(n2n) алгоритм динамического программирования для нахождения гамильтоновых циклов. Идея, которая является общей, может сократить количество подходов обратного отслеживания O(n!) до O(n22n) или O(n2n< /sup>) (за счет использования большего объема памяти), заключается в рассмотрении подзадач, которые представляют собой наборы с указанными "конечными точками".
Здесь, поскольку вам нужен цикл, вы можете начать с любой вершины. Так что исправьте один, назовите его x
. Подзадачи будут такими: «Для заданного множества S
и вершины v
в S
существует ли путь, начинающийся в x
и проходящий через все вершины S
и заканчивающийся в v
?» Назовите это, скажем, poss[S][v]
.
Как и в большинстве задач динамического программирования, как только вы определите подзадачи, остальное станет очевидным: выполните цикл по всем 2n множествам S вершин в любом «возрастающем» порядке, и для каждого v в каждом таком S, вы можете вычислить poss[S][v]
как:
poss[S][v] = (существует некоторое
u
в S такое, что poss[S{v}][u] равно True и существует реброu->v
)
Наконец, существует гамильтонов цикл тогда и только тогда, когда существует вершина v
такая, что существует ребро v->x
и poss[S][v]
истинно, где S
— это множество всех вершин (кроме x
, в зависимости от того, как вы его определили).
Если вам нужен фактический гамильтонов цикл, а не просто решать, существует ли он или нет, заставьте poss[S][v]
сохранить фактический u
, который сделал это возможным, а не только True или False; таким образом вы можете проследить путь в конце.
Я не могу выделить этот конкретный алгоритм, но есть больше о гамильтоновых циклах на Страница Гамильтона, чем вам, вероятно, когда-либо понадобится. :)
Эта страница представляет собой исчерпывающий список статей, исходного кода, препринтов, технических отчетов и т. д., доступных в Интернете, о гамильтоновом цикле и гамильтоновых путях, а также о некоторых связанных проблемах.
(исходный URL, в настоящее время 404), (Интернет-архив)