Ett antal problem inom grafteorin handlar om att hitta ett minsta uppspännande träd (MST). I grafteori är ett träd ett sätt att förbinda alla hörn så att det finns exakt en väg mellan varje par hörn. Om grafen representerar ett antal städer som är förbundna med vägar, kan man välja ett delmängd av vägarna så att varje stad kan nås från varje annan stad och så att det inte finns någon cykel (d.v.s. inte mer än ett sätt att resa mellan två städer).

Definition

Minsta uppspännande träd (MST) i en viktad, sammanhängande graf är ett uppspännande träd (ett träd som innehåller alla hörn) som minimerar summan av vikterna på de ingående kanterna. I praktiken vill man alltså koppla samman alla noder med minsta möjliga totalkostnad.

Egenskaper

  • En graf kan ha fler än ett träd, och kan ha fler än ett MST om flera kanter har samma vikt.
  • Om alla kanter i grafen har olika vikter (inga lika vikter) är MST unik.
  • Två viktiga egenskaper som används i bevis och algoritmer är skär-egenskapen (cut property) och cykel-egenskapen (cycle property):
    • Skär-egenskapen: För varje partition av hörnen (en skärning) är den lättaste kanten som går mellan partitionerna alltid del av något MST.
    • Cykelegenskapen: I en cykel är den tyngsta kanten aldrig i ett MST.

Algoritmer för att hitta MST

De två vanligaste algoritmerna är Kruskal och Prim:

  • Kruskal: Sortera kanterna efter vikt och lägg successivt till den lättaste kanten som inte bildar cykel (använd disjoint-set/union-find). Komplexitet: ungefär O(E log E) beroende på sortering.
  • Prim: Starta i en nod och väx trädet genom att varje gång lägga till den lättaste kanten som förbinder trädet med en ny nod (kan implementeras med prioritetskös/heaps). Komplexitet: O(E + V log V) eller O(E log V) beroende på implementation.
  • För speciella grafer finns även linjära eller nästan-linjära algoritmer och parallella varianter.

Exempel (intuition)

Tänk dig fyra städer A, B, C och D med vägkostnader mellan dem. För att få minsta totalkostnad väljer du de tre vägar som binder ihop alla fyra städer utan att skapa en cykel och med minsta möjliga summa av vägkostnader. Både Kruskal och Prim hittar sådana val genom att konsekvent föredra lägre kostnadskanter och undvika cykler.

Tillämpningar

  • Nätverksdesign (elnät, telekommunikation, väg- och järnvägsplanering).
  • Klustring och bildsegmentering inom maskininlärning och bildbehandling.
  • Approximationer av svårare problem, t.ex. för Steiner-träd och vissa rutter.

Unicitet och specialfall

Som nämnts ovan är MST unik om alla kanter har olika vikt. Om flera kanter delar samma vikt kan flera olika träd ge samma minsta totala vikt. I specialfall där grafen inte är sammanhängande finns inget uppspännande träd för hela grafen; man kan istället hitta ett minsta uppspännande skog (en MST per komponent).

Sammanfattningsvis ger begreppet minsta uppspännande träd ett enkelt men kraftfullt verktyg för att koppla samman noder med minimal kostnad, och algoritmerna för MST är både teoretiskt viktiga och praktiskt användbara i många tekniska problem.