gubanovpa
@gubanovpa

Какой алгоритм использовать для поиска кратчайшего пути в ненаправленном графе через все вершины?

Всем, привет!

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

Спасибо!
  • Вопрос задан
  • 1081 просмотр
Решения вопроса 2
sayber
@sayber
Да, я программирую на PHP и еще асинхронно!
Вам 100% требует алгоритм Гамильтоновых путей.

Сам завершил его не так давно, писал на PHP.
Расчет происходит при кол-ве вершин от 500 до 1000.
В данном случае у меня используются координаты переведенные в радианы и разложенные в матреце смежности.
Ну а далее уже этот алгоритм.
Ответ написан
Splo1ter
@Splo1ter
.NET Developer (9 years+)
A* продолжение алгоритма дейкстры, но с эвристикой
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Mrrl
@Mrrl
Заводчик кардиганов
Гамильтонов путь тут ни при чём - ведь нет запрета проходить одну вершину дважды? Но это в чистом виде задача коммивояжера. Тоже входит в класс NP. Точное решение будет слишком долгим, надо искать приближённые.
Ответ написан
@Vlad_Fedorenko
Под ваше описание подходит алгоритм Флойда-Уоршелла. Они ищет кратчайшие пути из всех вершин во вск. Алгоритм имеет очень высокую сложность - O(n^3)
Ответ написан
@SeptiM
Теория говорит, что точных алгоритмов быстрее 2^n не известно, а приближенные с ошибкой 229/228 не существуют, пока P != NP.

Для точных на практике пишут либо метод ветвей и границ, либо записывают задачу с терминах линейного программирования и пытаются найти целочисленное решение. Кстати, второе я бы попробовал. Нужно взять какой-нибудь солвер типа Gurobi и проверить.

Есть простенькие приближенные эвристики. Например, отсортируем все ребра графа и будем их пробовать вставлять в наш путь в порядке возрастания веса. Пишут, что такое дает на практике ошибку по 15-20%.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы