Как называется такой поиск пути в графе?
От: Firstborn Латвия  
Дата: 06.11.21 16:07
Оценка:
Что-то я запутался, вот подскажите, пожалуйста — если кто-то университетскую программу ещё помнит )) Имеется ненаправленный, невзвешенный граф, в котором около 8,500 вершин и 14,000 рёбер. Как называется алгоритм нахождения кратчайшего пути, проходящего через заданное подмножество вершин (порядок которых не важен) и начинающийся в одной заданной вершине? Требования замкнутости пути (то есть возвращения в начало) НЕ имеется.
Re: Как называется такой поиск пути в графе?
От: bnk СССР http://unmanagedvisio.com/
Дата: 06.11.21 16:24
Оценка: 5 (1)
Здравствуйте, Firstborn, Вы писали:

F>Что-то я запутался, вот подскажите, пожалуйста — если кто-то университетскую программу ещё помнит )) Имеется ненаправленный, невзвешенный граф, в котором около 8,500 вершин и 14,000 рёбер. Как называется алгоритм нахождения кратчайшего пути, проходящего через заданное подмножество вершин (порядок которых не важен) и начинающийся в одной заданной вершине? Требования замкнутости пути (то есть возвращения в начало) НЕ имеется.


Задача коммивояжера что ли (незамкнутая)? Это разве не классическая NP-полная задача, где нормального решения не существует, только эвристики?
Re[2]: Как называется такой поиск пути в графе?
От: Firstborn Латвия  
Дата: 06.11.21 16:39
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Здравствуйте, Firstborn, Вы писали:


F>>Что-то я запутался, вот подскажите, пожалуйста — если кто-то университетскую программу ещё помнит )) Имеется ненаправленный, невзвешенный граф, в котором около 8,500 вершин и 14,000 рёбер. Как называется алгоритм нахождения кратчайшего пути, проходящего через заданное подмножество вершин (порядок которых не важен) и начинающийся в одной заданной вершине? Требования замкнутости пути (то есть возвращения в начало) НЕ имеется.


bnk>Задача коммивояжера что ли (незамкнутая)? Это разве не классическая NP-полная задача, где нормального решения не существует, только эвристики?


Так вот вроде не то. Задача коммивояжёра обходит все вершины графа, а мне нужно обойти только небольшое подмножество
Re[3]: Как называется такой поиск пути в графе?
От: Zhendos  
Дата: 06.11.21 16:51
Оценка:
Здравствуйте, Firstborn, Вы писали:

bnk>>Задача коммивояжера что ли (незамкнутая)? Это разве не классическая NP-полная задача, где нормального решения не существует, только эвристики?


F>Так вот вроде не то. Задача коммивояжёра обходит все вершины графа, а мне нужно обойти только небольшое подмножество



А не сводится ли эта задача к задаче коммивояжера? Создадим новый граф из этого небольшого подмножества
и ребер которые соединяют только это вершины этого подмножества.

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

После этого останется решить задачу коммивояжера для нового графа,
чтобы решить исходную?
Re[4]: Как называется такой поиск пути в графе?
От: Буравчик Россия  
Дата: 06.11.21 18:07
Оценка:
Здравствуйте, Zhendos, Вы писали:

Z>После этого останется решить задачу коммивояжера для нового графа,


Чтобы показать NP-полноту обсуждаемой задачи, нужно делать ровно наоборот — нужно сводить задачу коммивояжера к обсуждаемой задаче (а не обсуждаемую задачу к задаче коммивояжера).

1. Возьмем какую-нибудь задачу коммивояжера. Добавим любое количество вершин, и любые смежные им ребра.
2. Решаем для получившегося графа обсуждаемую задачу. При этом в качестве вершин которые нужно посетить выберем вершины из задачи коммивояжера.
3. Если существует решения обсуждаемой задачи за P, то существует и решение коммивояжера за P.

В общем, обсуждаемая задача и задача коммивояжера лежит в одном классе — NP.
Best regards, Буравчик
Re: Как называется такой поиск пути в графе?
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.11.21 09:00
Оценка:
Здравствуйте, Firstborn, Вы писали:

F>Что-то я запутался, вот подскажите, пожалуйста — если кто-то университетскую программу ещё помнит )) Имеется ненаправленный, невзвешенный граф, в котором около 8,500 вершин и 14,000 рёбер. Как называется алгоритм нахождения кратчайшего пути, проходящего через заданное подмножество вершин (порядок которых не важен) и начинающийся в одной заданной вершине? Требования замкнутости пути (то есть возвращения в начало) НЕ имеется.


Ну, казалось бы, Волновой алгоритм Ли должен легко обобщаться для решения этой задачи...
Re: Как называется такой поиск пути в графе?
От: ilnar Россия  
Дата: 07.11.21 09:53
Оценка:
Здравствуйте, Firstborn, Вы писали:

F>Что-то я запутался, вот подскажите, пожалуйста — если кто-то университетскую программу ещё помнит )) Имеется ненаправленный, невзвешенный граф, в котором около 8,500 вершин и 14,000 рёбер. Как называется алгоритм нахождения кратчайшего пути, проходящего через заданное подмножество вершин (порядок которых не важен) и начинающийся в одной заданной вершине? Требования замкнутости пути (то есть возвращения в начало) НЕ имеется.


1. строишь новый граф из подмножества вершин с имеющимися ребрами
2. раз граф не взвешенный, то ставим вес 1 там где есть ребро, и бесконечность там где нет, получаешь матрицу весов
3. решаешь задачу коммивояжера. Для того чтобы учесть условие, что возвращаться не надо, добавляешь вершину, которая имеет связь со всеми, а вес ребра с нужной начальной ставишь 0.
Re: Как называется такой поиск пути в графе?
От: Mr.Delphist  
Дата: 08.11.21 07:49
Оценка:
Здравствуйте, Firstborn, Вы писали:

F>Что-то я запутался, вот подскажите, пожалуйста — если кто-то университетскую программу ещё помнит )) Имеется ненаправленный, невзвешенный граф, в котором около 8,500 вершин и 14,000 рёбер. Как называется алгоритм нахождения кратчайшего пути, проходящего через заданное подмножество вершин (порядок которых не важен) и начинающийся в одной заданной вершине? Требования замкнутости пути (то есть возвращения в начало) НЕ имеется.


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

https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D0%BA%D1%80%D0%B0%D1%82%D1%87%D0%B0%D0%B9%D1%88%D0%B5%D0%BC_%D0%BF%D1%83%D1%82%D0%B8

Задача о кратчайшем пути очень часто встречается в ситуации, когда необходимо учитывать дополнительные ограничения. Наличие их может значительно повысить сложность задачи[1]. Примеры таких задач:

Кратчайший путь, проходящий через заданное множество вершин. Можно рассматривать два ограничения: кратчайший путь должен проходить через выделенное множество вершин, и кратчайший путь должен содержать как можно меньше невыделенных вершин. Первое из них хорошо известна в теории исследования операций[2].

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.