В этот предыдущий вопрос ОП спросил, как найти кратчайший путь в графе, который идет от u к v, а также проходит через некоторый узел w.Принятым ответом, который был бы неплохим, было запустить алгоритм Дейкстры дважды - один раз для перехода от u к w и один раз для перехода от w к v. Это имеет временную сложность, равную двум вызовам алгоритма Дейкстры, то есть O (m +).n log n).
Теперь рассмотрим связанный вопрос - вам дана последовательность узлов u 1 , u 2 , ..., u k и хотите найти кратчайший путь от u 1 до u k так, чтобы путь проходил через u 1 , u 2 , ..., u k по порядку.Очевидно, что это можно сделать, запустив k-1 экземпляры алгоритма Дейкстры, по одному для каждой пары смежных вершин, а затем объединить кратчайшие пути вместе.Это занимает время O (км + kn log n).В качестве альтернативы, вы можете использовать алгоритм кратчайших путей всех пар, такой как алгоритм Джонсона, чтобы вычислить все кратчайшие пути, а затем объединить соответствующие кратчайшие пути вместе за O (mn + n 2 log n) времени, что хорошо дляk намного больше, чем n.
Мой вопрос заключается в том, существует ли алгоритм для решения этой проблемы, который быстрее, чем описанные выше, при малых k.Существует ли такой алгоритм?Или итерация Дейкстры настолько хороша, насколько это возможно?