Prims algoritm
Användning | minimalt uppspännande träd, beslutsträd ![]() | |
---|---|---|
Uppkallad efter | Robert C. Prim, Vojtěch Jarník ![]() | |
Upptäckare eller uppfinnare | Vojtěch Jarník, Robert C. Prim, Edsger Dijkstra ![]() | |
Tidskomplexitet i värsta fall | , , ![]() |
Prims algoritm är en girig algoritm för att skapa ett minimalt uppspännande träd från en godtycklig sammanhängande, kostnadad och oriktad graf.
Algoritmen finner i varje iteration den länk med lägst kostnad som kan förbinda trädet med en nod som ännu inte finns med i trädet, varpå trädet utökas med denna länk (och den nod som den ansluter till). Iterationen fortsätter så länge det finns noder som inte lagts till i trädet.
Pseudokod
algoritm PRIM indata: graf, en sammanhängande, kostnadad och oriktad graf rot, ett nod i graf resultat: Varje nod i graf märks med sin förälder i ett minimalt uppspännande träd av graf med det angivna nodet som rot samt med kostnaden av länken till föräldern. för varje nod i graf nod.kostnad ← ∞ nod.förälder ← ogiltig rot.kostnad ← 0 kö ← en prioritetskö bestående av alla nod i graf, med minsta kostnad som prioriteringsvärde medan kö inte är tom u ← extrahera_minsta( kö ) för varje nod v som u ansluter till via en länk (u, v) om v finns i kö och kostnaden av länken (u, v) < v.kostnad v.förälder ← u v.kostnad ← kostnaden av länken (u, v)
Exempel
Tidskomplexitet
Prims algoritm har komplexitet O(E + V lg V), där E är antalet länker och V är antalet nod 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