Frage

Pseudo-Code, die ich verwendet:

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;

Nach meinem Verständnis:

  • Zeile 1: führt V-1 mal
  • .
  • Zeile 2: Summe der Grad aller Ecken mal ... ..das 2E mal
  • ist

Für jede Zeile 2: Linie 3 und Linie 4 nehmen log E Zeit, weil wir hinzufügen / löschen alle Kanten zum / vom PQ eins nach dem anderen.

So Gesamt time = V-1+2E.logE = E.log E

Aber das Buch sagt, es E.logV ist, könnten Sie erklären, warum das so ist?

War es hilfreich?

Lösung

O (log (V)) und O (log (E)) gleich sind.

  • E ist höchstens V 2 .
  • log (V 2 ) = 2 * log (V)
  • , die ein O (log (V))

Andere Tipps

  

für alle Kanten e (s, t) Vorfall s

Wie viele Kanten ein Knoten s kann höchstens haben?
V-1 höchstens. So, PQ-Operationen haben O (LogV) Zeitkomplexität.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top