Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertSiri Samuelsen Endret for 9 år siden
1
INF 295 Forelesning 16 - kap 9 Minimalt spenntre og korteste vei i grafer Hans Fredrik Nordhaug (Ola Bø)
2
Minimale spenntrær Spenntre for en graf Et tre som inneholder de kantene som er nødvendig for å kople sammen alle nodene i grafen. Skal grafen ha et spenntre på den være connected (sammenknyttet) Det vil som oftest være flere mulige spenntrær Et minimalt spenntre er et spenntre med lavest mulig total kostnad Det kan være flere mulige minimale spenntrær
4
Minimale spenntrær Antall kanter |V|-1 Å legge til kant til spenntre gir sykel Sykelen kan fjernes ved å fjerne en annen kant Har den andre kanten høyere pris får vi et "billigere" spenntre Algoritmer som tar billigste brukbare kanter først gir et minimalt spenntre DVS grådige algoritmer fungerer for spenntrær
5
Prims algoritme For hvert trinn, velg den korteste kant som forbinder treet med en node som ikke er i treeet Merk noden som kjent Oppdater avstand til alle ukjente noder som kan nås fra den nytilknyttede noden Kjøretid O(|V| 2 ) uten heap - OK for tette grafer O(|E|log|V|) med heap - Bedre for glisne grafer
6
Tabell for Prims algoritme nodekjentavstandforgjenger
7
Kruskals algoritme Velg alltid korteste kant Godta kanten hvis den ikke lager sykel Kruskals bruker egentlig en samling av trær Starter med |V| en-nodes trær En akseptert kant kopler sammen to trær Vi er ferdig når alle noder er koplet sammen
8
Tabell for Kruskals algoritme KantKostnadResultat
10
Kruskals algoritme Avsluttes når nok kanter er akseptert Tre-medlemskap administreres ved hjelp av Disjunkte Mengder union(u,v) for å kople sammen to trær find(u) for å sjekke hvilken mengde noden er i Invariant: to noder er i samme mengde hvis de er koplet sammen (er i samme tre) hvis kantens endenoder er i samme tre, kan kanten ikke aksepteres fordi den danner en sykel Kjøretidsbetraktninger: Kanter i heap er effektivt Worst case: O(|E|log|E|) Mye raskere i praksis
11
Korteste vei algoritner Veid og uveid veilengde Korteste vei fra ett utgangspunkt-problemet Problemet med negative kostnader Negativ kost-syklus gir ubestemmelig korteste vei Mange anvendelser Algoritmer: Ingen eksisterende algoritmer som er raskere på en til en enn på en til alle Fire versjoner av problemet med korteste vei Uvektet graf O(|E|+|V|) Veid graf uten negative kanter O(|E|log|V|) Graf med negative kanter: enkelt, men O(|E|*|V|) Asyklisk graf: O(N)
13
Uveid korteste vei Spesialtilfelle av veid graf Algoritme 1. Starte med en node avstand 0 2. Deretter alle naboene avstand 1 3. Så ubesøkte naboer av dem igjen... Bredde først Trenger avstand, forgjenger, behandlet Veien finnes ved å gå tilbake fra enden
14
Algoritme 1
15
Algoritme 2
16
Veid graf uten negative kanter Dijkstras algoritme Samme ide som forrige algoritme Trenger Kjent Tentativ avstand d v : avstand bare via behandlede noder Forgjenger pv: siste node som endrer dv For hvert steg: velg noden v med lavest dv av de som ikke er kjent oppdater avstand hos alle naboer w av denne noden hvis det er kortere å gå via v Dijkstras er en greedy algoritme
17
Greedy algoritmer Greedy algoritmer løser problem trinnvis ved å gjøre det som synes best for hvert trinn Vekslingsalgoritme Kan svikte i noen situasjoner Vekslingsalgoritme
21
Kjøretid for dijkstra Scanne etter korteste dv: O(|E|+|V 2 |) OK for tette grafer der |E|=O(|V 2 |) Tynne (sparse) grafer trenger bedre løsninger priority queue: deleteMin og decreaseKey O(|E|log|V|+|V|log|V|))=O(|E|log|V|) Eller sette inn i heapen på nytt ved oppdatering Gir flere forekomster av samme node i heapen Hoppe over kjente noder Enkel og rask løsning, men plasskrevende
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.