Нахождение гамильтоновых циклов в кубических плоских графах - PullRequest
6 голосов
/ 05 июля 2010

У меня есть относительно небольшие (40-80 узлов) кубические (3-регулярные) плоские графы, и я должен решить их гамильтоновость.Мне известно о том, что эта задача является NP-полной, но я надеюсь на асимптотически экспоненциальные алгоритмы времени, которые, тем не менее, очень быстры для интересующего меня размера графика.

Ответы [ 2 ]

3 голосов
/ 07 июля 2010

40 узлов кажется выполнимым. Вы выбираете 40 из 60 ребер для включения.

Давайте попробуем поиск в глубину.

Для начала выберите вершину V. Вам нужно будет исключить ровно один из 3 ее инцидентных ребер. Попробуйте эти 3 варианта по одному. Когда вы выбираете ребро для исключения, вы принудительно включаете 4 ребра. После этого мы будем называть вершины исключенного ребра «used».

Если бы вы могли повторить этот процесс 10 раз, вы бы выбрали все 40 ребер, ища только 3 ^ 10 (59049) возможностей. Конечно, у вас закончатся «изолированные» вершины после того, как будет определено достаточное количество ребер.

Но теперь у нас есть идея для алгоритма. На каждом шаге попробуйте выбрать вершину с наименьшим количеством «используемых» соседей. На самом деле, выбор вершины с 2-мя использованными соседями является наилучшим, поскольку используемый край является принудительным. Я не уверен, что выбор вершины с 1 или 0 использованными соседями является следующим лучшим. Попробуйте оба способа! (И 3 используемых соседа указывают на неудачный поиск)

Когда мы закончим выбирать ребра, проверьте, образуют ли они один цикл.

У вас есть несколько примеров графиков? Я мог бы попробовать простую реализацию.

2 голосов
/ 07 июля 2010

из http://mathworld.wolfram.com/HamiltonianCycle.html: «Рубин (1974) описывает эффективную процедуру поиска, которая может найти некоторые или все гамильтоновы пути и схемы в графе, используя выводы, которые значительно уменьшают обратный поиск и догадки».

Бумага продается здесь: http://portal.acm.org/citation.cfm?id=321850.321854

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...