В этот более ранний вопрос ОП спросил, как найти кратчайший путь в графе, который идет от u до v, а также проходит через некоторый node 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 (km + k n log n). В качестве альтернативы вы можете использовать алгоритм кратчайших путей всех пар, такой как алгоритм Джонсона, для вычисления всех кратчайших путей, а затем объединить соответствующие кратчайшие пути вместе в O (mn + n 2 log n) времени, что хорошо для k много больше n.
Мой вопрос заключается в том, существует ли алгоритм решения этой задачи, который быстрее, чем приведенный выше подход, когда k мало. Существует ли такой алгоритм? Или повторяется Дейкстра так хорошо, как это получается?