Самый дешевый обход стоимости на полном графике

Мне было интересно, есть ли алгоритм, который: учитывая полностью связанный граф из n узлов (с разными весами) ... даст мне самый дешевый цикл для перехода от узла A (начального узла) ко всем другим узлам и возврата к узлу A? Есть ли способ изменить алгоритм, подобный алгоритму Примма, для достижения этой цели?

Спасибо за вашу помощь

РЕДАКТИРОВАТЬ: я забыл упомянуть, что имею дело с неориентированным графом, поэтому внутренняя степень = исходящая степень для каждой вершины.


person hershey101    schedule 04.08.2011    source источник
comment
Я тоже часто праздно удивляюсь этому, время от времени ...   -  person Amir Afghani    schedule 04.08.2011


Ответы (3)


Разве вы не можете изменить Дейкстру, чтобы найти вам кратчайший путь ко всем остальным узлам, а затем, когда вы его найдете, кратчайший путь обратно к A?

person shaw2thefloor    schedule 04.08.2011
comment
Насколько я понимаю, Дейкстра находит кратчайший путь от начального узла (A) ко всем остальным узлам ... a- ›b, a-› c, ... но для этого мне потребуется вернуться обратно в A после перехода к B, чтобы добраться до C. Это неэффективно, потому что я дважды вызываю стоимость обхода ребра a- ›b. У меня уже есть модифицированная версия Dijkstra для поиска кратчайшего пути между всеми узлами, но это по-прежнему оставляет мне множество различных вариантов для циклов. Я чувствую, что это, по сути, проблема коммивояжеров без ограничения посещения каждого узла только один раз. - person hershey101; 04.08.2011

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

person Jeune    schedule 04.08.2011

Такого пути быть не должно. Он существует тогда и только тогда, когда входящая степень каждого узла равна его исходящей степени.

Вам нужен самый дешевый эйлеров путь. Проблема ее поиска называется проблемой коммивояжера. Нет и не может быть быстрого алгоритма для ее решения.

Изменить: если подумать: задача коммивояжера ищет тур, который посещает каждый узел ровно один раз. Вы просите тур, который посещает каждый узел хотя бы один раз. Таким образом, ваша проблема может быть просто в P. Я сомневаюсь в этом.

person nes1983    schedule 04.08.2011
comment
Кажется, это будет сложнее, чем коммивояжером, потому что с коммивояжером, когда вы идете из пункта А в пункт Б, вам даже не нужно думать, возвращаться ли обратно в А. Но я не скажу, что это невозможно, что для некоторых это проще другая причина. - person Samuel Edwin Ward; 27.06.2012