A Prim algoritmusa egy súlyozott összekapcsolt irányítatlan gráf minimális feszítőfájának megalkotására szolgáló algoritmus . Az algoritmust először 1930-ban a cseh matematikus , Wojciech Jarnik fedezte fel , később Robert Prim 1957-ben, és ettől függetlenül E. Dijkstra 1959-ben.
Az algoritmus bemenete egy összefüggő irányítatlan gráf. Minden élhez be van állítva a költsége.
Először egy tetszőleges csúcsot veszünk fel, és találunk egy élt, amely erre a csúcsra esik, és amelynek a legkisebb költsége van. A talált él és az általa összekapcsolt két csúcs egy fát alkot. Ezután a gráf azon éleit veszik figyelembe, amelyeknek az egyik vége egy már a fához tartozó csúcs, a másik pedig nem; ezek közül az élek közül a legkisebb költségű szél kerül kiválasztásra. Az egyes lépéseknél kiválasztott él hozzáadódik a fához. A fa addig nő, amíg az eredeti gráf összes csúcsa el nem fogy.
Az algoritmus eredménye egy minimális költségen átívelő fa.
Kép | A kiválasztott U csúcsok halmaza | Edge (u, v) | A ki nem választott csúcsok halmaza V \ U | Leírás |
---|---|---|---|---|
{} | {A,B,C,D,E,F,G} | Az eredeti súlyozott grafikon. Az élek melletti számok a súlyukat mutatják, amely a csúcsok közötti távolságnak tekinthető. | ||
{D} | (D,A) = 5 V (D,B) = 9 (D,E) = 15 (D,F) = 6 |
{A,B,C,E,F,G} | A D csúcsot tetszőlegesen választottuk kiindulópontnak . Az A , B , E és F csúcsok mindegyike egyetlen élen keresztül kapcsolódik D -hez. Az A csúcs van a legközelebb D -hez, és az AD éllel együtt második csúcsként van kiválasztva . | |
{HIRDETÉS} | (D,B) = 9 (D,E) = 15 (D,F) = 6V (A,B) = 7 |
{B,C,E,F,G} | A következő csúcs az, amelyik a legközelebb van a kiválasztott D vagy A csúcsokhoz . B 9 távolságra van D -től és 7 távolságra A -tól. E távolsága 15, F -é pedig 6. F a legközelebbi csúcs, tehát benne van az F fában a DF éllel együtt . | |
{ADF} | (D,B) = 9 (D,E) = 15 (A,B) = 7 V (F,E) = 8 (F,G) = 11 |
{B,C,E,G} | Hasonlóképpen a B csúcsot választjuk, amely 7 távolságra van A -tól. | |
{A,B,D,F} | (B, C) = 8 (B, E) = 7 V (D, B) = 9 hurok (D, E) = 15 (F, E) = 8 (F, G) = 11 |
{C,E,G} | Ebben az esetben választhat C , vagy E , vagy G -t . C 8 távolságra van B -től , E 7 távolságra B -től, G pedig 11 -re van F -től. E a legközelebbi csúcs, ezért E -t és BE élt választunk . | |
{A,B,D,E,F} | (B,C) = 8 (D,B) = 9 ciklus (D,E) = 15 ciklus (E,C) = 5 V (E,G) = 9 (F,E) = 8 ciklus (F,G ) ) = 11 |
{C,G} | Itt csak a C és G csúcsok érhetők el . A távolság E -től C -ig 5, G -től 9. Egy C csúcsot és egy EC élt választunk . | |
{A,B,C,D,E,F} | (B,C) = 8 hurok (D,B) = 9 hurok (D,E) = 15 hurok (E,G) = 9 V (F,E) = 8 hurok (F,G) = 11 |
{G} | Az egyetlen megmaradt csúcs a G. Az F -től a távolság 11, az E -től a 9 -ig. E közelebb van, tehát a G csúcs és az EG él van kiválasztva . | |
{A,B,C,D,E,F,G} | (B, C) = 8 ciklus (D, B) = 9 ciklus (D, E) = 15 ciklus (F, E) = 8 ciklus (F, G) = 11 ciklus |
{} | Az összes csúcs ki van jelölve, a minimális feszítőfa megépül (zölddel kiemelve). Ebben az esetben a súlya 39. |
Az algoritmus aszimptotikája attól függ, hogy hogyan tároljuk a gráfot, és hogyan tároljuk azokat a csúcsokat, amelyek nem szerepelnek a fában. Ha a prioritási sor reguláris tömbként van implementálva , akkor ez tart , és a művelet költsége . Ha egy bináris piramist ábrázol , akkor a költség -ra csökken, a költség pedig -re nő . Fibonacci piramisok használatakor a műveletet a , és a számára hajtjuk végre .
A prioritási sor és grafikon ábrázolásának módja | Aszimptotikumok |
---|---|
d tömb, szomszédsági listák (szomszédsági mátrix) | |
Bináris piramis, szomszédsági listák | |
Fibonacci piramis, szomszédsági listák |
Grafikon keresési algoritmusok | ||
---|---|---|
Tájékozatlan módszerek | ||
Tájékozott módszerek | ||
Parancsikonok | ||
Minimálisan átívelő fa | ||
Egyéb |