Я просматриваю свои старые алгоритмы и сталкиваюсь с этим доказательством. Это было из задания, которое у меня было, и я понял его правильно, но я чувствую, что доказательства, безусловно, не хватает.Доказывается, что значения расстояния, извлеченные в алгоритме Дейкстры, не уменьшаются?
Вопрос заключается в том, чтобы prove that the distance values taken from the priority queue in Dijkstra's algorithm is a non-decreasing sequence.
Мое доказательство идет следующим образом:
Доказательство от противного. Кулак, предположим, , что мы вытаскиваем вершину из Q с d-value 'i'. В следующий раз мы потянем вершину с d-значением 'j'. Когда мы набрали , мы завершили наше d12-значение и вычислили кратчайший путь от начальной вершины s до i. С у нас есть положительные веса, это невозможно для наших значений d сжиматься , поскольку мы добавляем вершины к нашему пути. Если после вытягивания i из Q, мы вытаскиваем j с меньшим значением d, у нас может не быть кратчайшего пути 0, чтобы мы могли , чтобы достичь i-j. Однако мы уже вычислили кратчайший путь . Мы не проверяли возможный путь . У нас больше нет гарантированного пути . Противоречие.
Как можно улучшить это доказательство? Или еще лучше, есть ли другой подход? Это только кажется довольно слабым :)
Edit: К сожалению, в этом случае моя очередь приоритет реализуется с Min кучи
В классической реализации псевдокод алгоритма Дейкстры реализация очереди приоритета не определен.Никто не ответил, так как трудно выполнить доказательство без реализации (даже в псевдокоде), используемой для очереди приоритетов. Не могли бы вы добавить ссылку в вопрос? –
Извините, я обновил :) Действительная точка – Gail