Каков алгоритм динамического программирования для нахождения Гамильтонова цикла в графе?

каков алгоритм динамического программирования для нахождения Гамильтонова цикла в неориентированном графе? Я где-то видел, что существует алгоритм с O(n.2^n) сложность времени.

2 ответов


действительно есть O (n2n) алгоритм динамического программирования для нахождения гамильтоновых циклов. Идея, которая является общей, которая может уменьшить многие O (n!) обратные подходы к O (N22n) или O (n2n) (за счет использования большего объема памяти), следует рассмотреть подзадачи, которые наборы с указанными "конечными точками".

здесь, так как вы хотите цикл, вы можете начать с любой вершины. Так что исправь одну, назови ее. x. Подзадачи будут: "для данного набора S и вершины v на S, есть ли путь, начинающийся с x и проходя через все вершины S до v?- Назовите это, скажем,poss[S][v].

как и в большинстве проблем динамического программирования, как только вы определяете подзадачи, остальное очевидно: цикл над всеми 2n устанавливает s вершин в любом "возрастающем" порядке, и для каждого v в каждом таком S Вы можете вычислить poss[S][v] as:

poss[S][v] = (существует некоторое u в S такое, что poss[S - {v}][u] истинно и ребро )

наконец, существует Гамильтонов цикл, если существует вершина v таких, что ребро и poss[S][v] верно, где S - множество всех вершин (кроме x в зависимости от того, как ты его определил).

если вы хотите фактический Гамильтонов цикл, а не просто решить, является ли один существует или нет, сделать poss[S][v] сохранить фактическое u это сделало возможным вместо того, чтобы просто истинно или ложно; таким образом, вы можете проследить путь в конце.


Я не могу вырвать этот конкретный алгоритм, но есть больше о гамильтоновых циклах на Страница Гамильтона чем вы, вероятно, когда-нибудь понадобится. :)

эта страница намерена быть полный перечень документов, исходный код, препринты, технические отчеты и т. д., доступные на Интернет о Гамильтоновом цикле и проблемы Гамильтонова пути как некоторые связанные проблемы.

(исходный URL-адрес, в настоящее время 404), (Интернет-Архив)