Нахождение ребра самой низкой стоимости ( u , v ), так что u находится в U, а v - в VU,выполняется с приоритетной очередью .Точнее говоря, приоритетная очередь содержит каждый узел v из VU вместе с наименьшим ребром стоимости из v в текущее дерево U. Другими словами, очередь содержит точно | VU |elements.
После добавления нового узла u в U необходимо обновить очередь с приоритетами, проверив, можно ли теперь достичь соседних узлов u край меньшей стоимости, чем ранее.
Выбор очереди приоритетов определяет сложность времени.Вы получите O (| V | ^ 2), реализовав приоритетную очередь в виде простого массива cheapest_edges[1..|V|]
.Это потому, что поиск минимума в этой очереди занимает время O (| V |), и вы повторяете, что | V |раз.
В псевдокоде:
V = {2...,n}
U = {1}
T = NULL
P = array, for each v set P[v] = (1,v)
while V != U
(u,v) = P[v] with v such that length P[v] is minimal
T = T + {(u,v)}
U = U + {v}
for each w adjacent to v
if length (v,w) < length P[w] then
P[w] = (v,w)