Prof. RNDr. Vojtěch Jarník, DrSc.
Prof. RNDr. Vojtěch Jarník, DrSc.

Jarníkův-Primův algoritmus je grafový algoritmus pro vyhledávání minimální kostry souvislého ohodnoceného grafu. Je pojmenovaný podle českého matematika Vojtěcha Jarníka (1897-1970) a amerického matematika Roberta Claye Prima (narozen 1921). Oba tento algoritmus sice popsali nezávisle na sobě, ale první byl Jarník (1930).

Kroky algoritmu

  • Vytvoř prázdný graf T.
  • Do grafu T vlož libovolný jeden uzel vstupního grafu G.
  • Dokud má graf T méně uzlů než vstupní graf G, opakuj:
    • Najdi hranu s minimálním ohodnocením, spojující graf T s rozdílem grafů G-T
    • Přidej tuto hranu do grafu T.

Příklad

Inicializace

Graf T, který Jarníkův-Primův algoritmus postupně generuje, je zpočátku prázdný. Modře jsou označeny hrany, které algoritmus v daném kroku ověřuje, zelený je graf T a žlutý naposledy přidaný uzel.

diagram

Krok 1

Náhodně je vybrán a do grafu T přidán uzel A. Bez prvního uzlu nemůže být algoritmus spuštěn. Na konkrétním uzlu skutečně nezáleží, protože budou nakonec v kostře zahrnuty všechny.

Graf T má menší počet uzlů než graf G, algoritmus tedy pokračuje.

diagram

Krok 2

Nyní algoritmus vyhledá hranu s nejmenším ohodnocením, která graf T spojuje se zbývajícími uzly (rozdíl grafů G-T). Kandidáty jsou hrany (A-B), (A-F). Vybrána je hrana (A-F), protože má menší ohodnocení. Graf T má stále menší počet uzlů než graf G, algoritmus tedy pokračuje.

diagram

Krok 3

Dalšími kandidáty na rozšíření grafu T jsou hrany (F-E), (A-B). Vybrána je hrana (F-E), protože má menší ohodnocení. Graf T má stále menší počet uzlů než graf G, algoritmus tedy pokračuje.

diagram

Krok 4

Dalšími kandidáty na rozšíření grafu T jsou hrany (A-B), (E-B), (E-D). Vybrána je hrana (E-D), protože má menší ohodnocení. Graf T má stále menší počet uzlů než graf G, algoritmus tedy pokračuje.

diagram

Krok 5

Dalšími kandidáty na rozšíření grafu T jsou hrany (A-B), (E-B), (D-B), (D-G). Vybrána je hrana (D-B), protože má menší ohodnocení. Graf T má stále menší počet uzlů než graf G, algoritmus tedy pokračuje.

diagram

Krok 6

Dalšími kandidáty na rozšíření grafu T jsou hrany (B-C), (B-G), (D-G). Vybrána je hrana (B-C), protože má menší ohodnocení. Všimněte si, že hrany (A-B) a (E-B) uvažovány nejsou, protože nespojují graf T s rozdílem grafů G-T. Graf T má však stále menší počet uzlů než graf G, algoritmus tedy pokračuje.

diagram

Krok 7

Dalšími kandidáty na rozšíření grafu T jsou hrany (B-G), (D-G). Vybrána je hrana (B-G), protože má menší ohodnocení. Graf T má stejný počet uzlů jako graf G, výpočet může skončit.

diagram

Krok 8

Výpočet je dokončen. Graf T je minimální kostra grafu G.

diagram

Časová složitost

Jarníkův-Primův algoritmus lze naimplementovat se složitostí € O(|E| + |V| \log (|V|)) €.

Reference