Kostra grafu

Z testwiki
Verze z 21. 7. 2024, 13:12, kterou vytvořil imported>666-Bandera Mouse
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání
Kostra (červeně) grafu (černě)
Tři příklady na mřížkovém grafu 8x8

V teorii grafů je kostra souvislého grafu G takový podgraf souvislého grafu G na množině všech jeho vrcholů, který je stromem.

Příklady

  • Kružnice na n vrcholech (graf Cn) má právě n různých koster.
  • Libovolný strom má jedinou kostru – sám sebe.
  • Úplný graf na n vrcholech má právě nn2 různých koster (tzv. Cayleyho vzorec).

Algoritmy pro hledání kostry

Libovolná kostra

Následující základní algoritmus je schopen nalézt nějakou (blíže neurčenou) kostru:

  1. Nechť G=(V,E) je graf s n vrcholy a m hranami; seřaďme hrany G libovolně do posloupnosti (e1,e2,,em); položme E0=.
  2. Byla-li již nalezena množina Ei1, spočítáme množinu Ei takto:
    • Ei=Ei1 ∪ {ei}, neobsahuje-li graf (V, Ei1ei) kružnici,
    • Ei=Ei1 jinak.
  3. Algoritmus se zastaví, jestliže buď Ei již obsahuje n − 1 hran nebo i = m, tedy se probraly všechny hrany z G. Graf T=(V,Ei) pak představuje kostru grafu G.

Minimální kostra

Minimální kostra grafu

Je-li navíc definována funkce w:𝐸 (tzv. ohodnocení hran), má smysl hledat minimální kostru – tedy takovou kostru (𝑉,𝐸), že výraz

w(E)=e𝐸w(e)

nabývá minimální hodnoty.

Tuto úlohu řeší několik algoritmů, které jsou označovány jako hladové, neboť jednou provedená rozhodnutí už nikdy nemění, čili „hladově“ postupují přímo k řešení.

Předpokládejme, že je dán souvislý graf G = (V, E) s ohodnocením w:

Kruskalův algoritmus

Šablona:Podrobně Předpokládejme navíc, že hrany jsou uspořádány tak, že platí w(e1)w(e2)w(em).

Pro toto uspořádání provedeme algoritmus pro hledání libovolné kostry (viz výše).

Borůvkův algoritmus

Šablona:Podrobně

Předpokládejme, že ohodnocení hran v grafu je prosté. Algoritmus pracuje ve fázích tak, že postupně spojuje komponenty souvislosti (na počátku je každý vrchol komponentou souvislosti) do větších a větších celků, až zůstane jen jediný, a to je hledaná minimální kostra. V každé fázi vybere pro každou komponentu souvislosti hranu s co nejnižší cenou, která směřuje do jiné komponenty souvislosti a tu přidá do kostry.

Jarníkův algoritmus

Šablona:Podrobně

  1. Nechť |𝑉|=n a |𝐸|=m. Položme 𝐸0=,𝑉0={v}, kde v je libovolný vrchol G.
  2. Nalezneme hranu ei={xi,yi}𝐸(𝐺) nejmenší možné váhy z množiny hran takových, že xi𝑉i1,yi𝑉𝑉i1.
  3. Položíme 𝑉𝑖=𝑉i1{yi} a 𝐸𝑖=𝐸i1{ei}.
  4. Pokud žádná taková hrana neexistuje, algoritmus končí a T=(𝑉𝑖,𝐸𝑖), jinak pokračuj krokem 2.

Nejrychlejší známý deterministický algoritmus pro hledání minimální kostry grafu vytvořil Bernard Chazelle modifikací Borůvkova algoritmu. Asymptotická časová složitost tohoto algoritmu je O(E α(V)), kde α je inverzní Ackermannova funkce.

Literatura

Externí odkazy

Šablona:Autoritní data