Prim algoritmusa

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. június 15-én felülvizsgált verziótól ; az ellenőrzések 11 szerkesztést igényelnek .

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.

Leírás

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.

Példa

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.

Megvalósítás

Jelölés

Pszeudokód

{} Minden csúcshoz Még nem üres



Az If és minden csúcsához

Értékelés

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

Lásd még

Irodalom

Linkek