Prims algoritm
Prims algoritm är en girig algoritm för att skapa ett minimalt uppspännande träd från en godtycklig sammanhängande, viktad och oriktad graf[förtydliga].
Algoritmen finner i varje iteration den kant med lägst vikt som kan förbinda trädet med ett hörn som ännu inte finns med i trädet, varpå trädet utökas med denna kant (och det hörn som den ansluter till). Iterationen fortsätter så länge det finns hörn som inte lagts till i trädet.
Pseudokod
algoritm PRIM indata: graf, en sammanhängande, viktad och oriktad graf rot, ett hörn i graf resultat: Varje hörn i graf märks med sin förälder i ett minimalt uppspännande träd av graf med det angivna hörnet som rot samt med vikten av kanten till föräldern. för varje hörn i graf hörn.vikt ← ∞ hörn.förälder ← ogiltig rot.vikt ← 0 kö ← en prioritetskö bestående av alla hörn i graf, med minsta vikt som prioriteringsvärde medan kö inte är tom u ← extrahera_minsta( kö ) för varje hörn v som u ansluter till via en kant (u, v) om v finns i kö och vikten av kanten (u, v) < v.vikt v.förälder ← u v.vikt ← vikten av kanten (u, v)
Exempel
Tidskomplexitet
Prims algoritm har komplexitet O(E + V lg V), där E är antalet kanter och V är antalet hörn i den graf som trädet skapas från, under förutsättning att prioritetskön implementeras som en Fibonacciheap. (Om en binär heap används försämras komplexiteten till O(E lg V), vilket är asymptotiskt likvärdigt med Kruskals algoritm.)[1]
Se även
Referenser
- ^ Cormen, T.H., Leiserson, E.L., Rivest, R.L., Stein, C (2001). Introductions to Algorithms (2 utgåvan). USA: MIT Press. sid. 570–573. ISBN 0-262-03293-7