Существует ли эффективный алгоритм поиска или аппроксимации кратчайшего обхода графа, который должен посещать некоторое подмножество вершин графа? - PullRequest
0 голосов
/ 06 апреля 2020

Заголовок полный, но, проще говоря, у меня есть большой, неориентированный, неполный граф, и мне нужно посетить некоторое подмножество вершин в (приблизительно) кратчайшее возможное время. Обратите внимание, что это не TSP, поскольку мне не нужно посещать все вершины.

Наивный подход состоял бы в том, чтобы просто перебрать решение путем грубой силы, пробуя каждую возможную прогулку, которая включает в себя требуемые вершины, используя, например, A *, для вычисления обходов между требуемыми вершинами. Однако это O(n!), где n - количество требуемых вершин. Это невозможно для меня, как n > 40 в моем среднем случае и n ≈ 80 в моем худшем случае.

Существует ли более эффективный алгоритм для этого, возможно, такой, который приближает решение?

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

1 Ответ

2 голосов
/ 06 апреля 2020

Если вы разрешаете посещать одни и те же узлы несколько раз, найдите кратчайший путь между каждой парой обязательных вершин. Затем вы решаете TSP между обязательными вершинами, используя вышеуказанные затраты кратчайшего пути. Если вы запрещаете многократные посещения, проблема намного хуже.

Боюсь, вы не можете избежать TSP.

...