Dijkstra(G,w,s) {
ISS(G,s);
let S be an empty set
let Q be a priority queue, initialized with V[G]
while Q is not Empty:
u<-extractMin(Q);
add u to S
for each vertex v neighbor of u
Relax(u,v,w);
}
мой вопрос: почему важно выбрать МИНИМАЛЬНОЕ d [v] всех v в Q на каждом шаге алгоритма в цикле while, что будет, если мы не выберем минимум?
Я имею в виду, как я вижу, все ребра (u, v) будут ослаблены в первом порядке (это означает, что если - s-> u-> v и (s, v) нетв E тогда (s, u) расслабится раньше (u, v)), так почему важно каждый раз выбирать минимальное d [v]?
предположим, что существует функция extractMaxFiniteD (Q), которая возвращает вершину v так, что она имеет максимальное значение d [v], конечное в Q
, давайте предположим, что мы изменили эту строку на u <-extractMaxFiniteD(Q);Может ли кто-нибудь нарисовать мне график, на котором измененный alg потерпит неудачу - или даже лучше - какое свойство кратчайшего пути получит фиолетовый цвет?если бы кто-нибудь мог мне помочь с этим. </p>