Как сложность времени алгоритма Прима ElogV, используя Приоритет Q? - PullRequest
4 голосов
/ 22 августа 2009

Псевдокод, который я использовал:

for all V vertices: visited[n]=0

pick any vertex r from graph and set visited[r]=1

For all edges e incident to r
PQ.insert()

while(PQ is not empty)//line 1
  f=PQ.min()//f(r,s) is such that visited[s]=0
  for all edges e(s,t) incident to s//line 2
     if(visited[t]==0)
        PQ.insert(e);//line 3
     else
        PQ.delete(e);//line 4
  visited[s]=1;
end while;

Насколько я понимаю:

  • строка 1: выполняется V-1 раз.
  • Строка 2: сумма степеней всех времен вершин… ..это 2E раз

Для каждой строки 2: Строка 3 и строка 4 занимают log E время, потому что мы добавляем / удаляем все ребра в / из PQ по одному.

Итого time = V-1+2E.logE = E.log E

Но в книге сказано, что это E.logV, не могли бы вы объяснить, почему это так?

Ответы [ 2 ]

4 голосов
/ 23 августа 2009

O (log (V)) и O (log (E)) одинаковы.

  • E не более V 2 .
  • log (V 2 ) = 2 * log (V)
  • который является O (log (V))
1 голос
/ 22 августа 2009

для всех ребер e (s, t), инцидентных s

Сколько ребер у узла s может быть максимум?
V-1 самое большее. Таким образом, операции PQ имеют сложность времени O (logV).

...