Primov algoritmus: Rozdiel medzi revíziami
preklepy |
d preklepy |
||
Riadok 10: | Riadok 10: | ||
** Pridaj ''v'' do V', pridaj (u,v) do E' |
** Pridaj ''v'' do V', pridaj (u,v) do E' |
||
* Výstup: T(V',E') je minimálna kostra grafu |
* Výstup: T(V',E') je minimálna kostra grafu |
||
== Časová zložitost == |
== Časová zložitost == |
Verzia z 15:57, 27. máj 2011
Primov algoritmus (známy aj ako Jarníkov algoritmus, Primov-Jarníkov algoritmus alebo aj DJP algoritmus) je v informatike greedy algoritmus hľadajúci minimálnu kostru ohodnoteného grafu. Nájde teda takú podmnožinu hrán grafu, ktorá tvorí strom obsahujúci všetky vrcholy pôvodného grafu a súčet ohodnotenia hrán z tejto množiny je minimálny. Algoritmus patrí medzi najefektívnejšie a najelegantnejšie implementovateľné algoritmy s týmto účelom. Prvýkrát algoritmus popísal český matematik Vojtěch Jarník roku 1930. V roku 1957 ho nezávisle na Jarníkovi popísal americký matematik a informatik Robert Clay Prim a potom ešte raz v roku 1959 tento algoritmus znovu objavil holandský informatik Edsger Wybe Dijkstra a na jeho základe vytvoril svoj Dijkstrov algoritmus na hľadanie najkratšej cesty v ohodnotenom grafe.
Popis
Algoritmus začína s jedným vrcholom a postupne pridáva ďalšie, čím zväčšuje veľkosť stromu dovtedy, kým neobsahuje všetky vrcholy.
- Vstup: súvislý ohodnotený graf G(V,E)
- Inicializácia: V' = {x}, kde x je ľubovoľný vrchol z V, E' = {}
- Opakuj, kým neplatí, že V'=V:
- Vyber hranu (u,v) z E s minimálnou cenou tak, že u patrí V' a v nepatrí V'
- Pridaj v do V', pridaj (u,v) do E'
- Výstup: T(V',E') je minimálna kostra grafu
Časová zložitost
Dátová štruktúra s ohodnotením hrán | Celková časová zložitosť |
---|---|
matica susednosti | O(n2) |
binárna halda a zoznam susedov | O((n + m) log(n)) = n log(n) |
Fibonacciho halda a zoznam susedov | O(m + n log(n)) |
Jednoduchá implementácia s reprezentáciou grafu pomocou matice susednosti a prehľadávaním poľa ohodnotení má časovú zložitosť O(n2). S použitím binárnej haldy a zoznamu susedov dosiahneme zložitosť O(m log n), kde m je počet hrán a n je počet vrcholov. S použitím sofistikovanej Fibonacciho haldy zložitosť znížime až na O(m + n log n), čo je výhodné najmä pri grafoch, kde m je .