Minimum Spenntrær Lars Vidar Magnusson 2.4.2014 Kapittel 23 Minimum spenntrær Kruskal Prim
Minimum Spenntrær Et spenntre er et tre som spenner over alle nodene i en graf G = (V, E). Et minimum spenntre (MST) er det spenntreet med lavest vekt på kantene. Vi har en urettet graf G = (V, E) med en vekt w(u, v) satt på hver kant (u, v) E. Vi kan finne et minimum spenntre T E slik at. T kobler sammen alle nodene i grafen, og w(t ) = (u,v) T w(u, v) er minst mulig Merk at en graf kan ha flere enn et MST.
Et Eksempel på Anvendelse av Minimum Spenntrær Vi skal se på et konkret eksempel på anvendelse for minimum spenntrær. En by har et sett med hus og et sett med veier. En vei går bare mellom 2 hus. Hver vei har en reparasjonskostnad (w(u, v)). Oppgaven går da ut på å repareren akkurat nok vei. Alle husene må være sammenkoblede med et veinett. Reparasjonskostnaden skal være så liten som mulig.
En Eksempelgraf med Minimum Spenntre Figuren under viser en graf med minimum spenntree merket med grå kanter.
Vokse Minimum Spenntrær Vi skal se på hvordan vi kan vokse frem minimum spenntrær. Vi begynner med å se på et noen egenskaper med et MST. Treet har V 1 kanter. Det har ingen sykler (da hadde det ikke lenger vært et tre) Det er ikke nødvendigvis unikt i.e. det kan finnes flere MST for en graf. Vi kan skissere en løsning på problemet med følgende punkter Vi bygger et sett A med kanter. Til og begynne med er A =. A vil til enhver tid være et subset av et MST. Vi legger bare til trygge (safe) kanter (u, v) slik at hvis A er et subset av et MST så er A {(u, v)} også et subset av et MST.
Pseudokode for en Generisk Minimum Spenntre Algoritme Pseudokoden for en generisk minimum spenntree algoritme kalt Generic-MST er listet under. Denne algoritmen ivaretar en loop invariant slik at A til enhver tid er et subset av en MST. Intialization Mainenance Termination
Hvordan Finne Trygge Kanter Vi skal se på hvordan vi finner trygge kanter til å vokse frem et MST. La oss ta en titt på et eksempel. Vi har en kant (h, g) som har den laveste vekten av alle kantene i grafen. Kan vi trygt legge til denne kanten til A =? Vi deler opp grafen i to deler S og V S slik at h er med i S og g er med i V S. Det må finnes en kant som forbinder S med V S siden vi skal lage et spenntre. Intuitivt kan vi kanskje enkelt si at det er greit å velge (h, g) for å være med i A. For å kunne vite det samme formelt sett må vi først få på plass noen definisjoner.
Diverse Definisjoner For å kunne bevise at vi velger trygge kanter trenger vi noen definisjoner. Vi lar S V og A E. Et kutt (cut) (S, V S) er partisjonering av nodene i to disjunkte sett S og V S. En kant (u, v) krysser (crosses) et kutt (S, V S) hvis en av sluttpunktene er i S og en i V S. Et kutt respekterer (respect) A hvis ingen av kantene i A krysser kuttet. En kant er en lett kant (light edge) hvis vekten til kanten er den minste av alle kantene som krysser kuttet. For ethvert kutt er det > 1 antall lette kanter.
Et Eksempel på et Kutt Figuren under viser et eksempel på et kutt.
Hvordan Vite at en Kant er Trygg Vi skal se på et teorem som sier når en kant er trygg. Teorem Vi lar A være et subsett av et MST, (S, V S) et kutt som respekterer A, og (u, v) være en lett kant som krysser (S, V S). Da er (u, v) en trygg kant for A. Vi skal ikke formelt bevise teoremet fullt ut, men vi skal ta for oss de viktigste delene.
Beviset for Teoremet Beviset for teoremet på forrige slide bygger på følgende resonnement. Vi lar T være et MST som inneholder et subsettet A. Den lette kanten (u, v) som krysser kuttet (S, V S) er ikke med i T. Vi lar stien p være de kantene som forbinder u og v i T. Stien p må krysse kuttet (S, V S) minst en gang Siden kanten (x, y) er med T, og w(u, v) w(x, y), må også (u, v) være med i et MST.