Föreläsning 2. Kortaste vägar i grafer.

Relevanta dokument
Föreläsning 2. Kortaste vägar i grafer.

Föreläsning 2: Grafer. Exempel på graf

Föreläsning 2: Grafer. Exempel på graf

Föreläsningsanteckningar F6

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Föreläsning 5: Grafer Del 1

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Föreläsning 7 Datastrukturer (DAT037)

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

Föreläsning Datastrukturer (DAT037)

Föreläsning 5: Dynamisk programmering

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Datastrukturer. föreläsning 8. Lecture 6 1

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning 12+13: Approximationsalgoritmer

Föreläsning Datastrukturer (DAT036)

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 4: Kombinatorisk sökning

Föreläsning 9: NP-fullständighet

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 8 Datastrukturer (DAT037)

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Lösningar Datastrukturer TDA

Algoritmer, datastrukturer och komplexitet

Föreläsning 1. Introduktion. Vad är en algoritm?

Tentamen Datastrukturer (DAT037)

Algoritmer, datastrukturer och komplexitet

Några svar till TDDC70/91 Datastrukturer och algoritmer

Lösningsförslag för tentamen i Datastrukturer (DAT036) från

Algoritmer, datastrukturer och komplexitet

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

TNK049 Optimeringslära

Föreläsning 10. Riktade grafer. Viktade grafer. TDDC91,TDDE22,725G97: DALG. Innehåll. Innehåll Riktade grafer A 10.3

729G04 - Diskret matematik. Lektion 4

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Datastrukturer. föreläsning 8. Maps 1

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Optimering Kruskal s algoritm Prim-Jarník s algoritm

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

I en matchning ligger varje hörn i högst en kant. I en stig ligger varje hörn i högst två kanter.

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Algoritmer, datastrukturer och komplexitet

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:15 19:15

Eulercykel. Kinesiska brevbärarproblemet. Kinesiska brevbärarproblemet: Metod. Kinesiska brevbärarproblemet: Modell. Definition. Definition.

Föreläsning 7+8: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Tentamensskrivning i Diskret Matematik för CINTE och CMETE, SF1610, onsdagen den 20 augusti 2014, kl

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Datastrukturer. föreläsning 9. Maps 1

Algoritmer, datastrukturer och komplexitet

Trafiksimulering: Grafalgoritmer

Föreläsning 8+9: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Dekomposition och dynamisk programmering

Tentamen Datastrukturer för D2 DAT 035

Algoritmer, datastrukturer och komplexitet

Optimeringslära Kaj Holmberg

Kaliningrad) låg vid bägge sidor av floden Pregel samt på

Grafer. 1 Grafer. Grunder i matematik och logik (2015) 1.1 Oriktade grafer. Marco Kuhlmann

Algoritmer, datastrukturer och komplexitet

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Föreläsning 2 Datastrukturer (DAT037)

Graphs (chapter 14) 1

Algoritmer, datastrukturer och komplexitet

Datastrukturer. föreläsning 7. Maps 1

Ekvivalensrelationer

Lösningsförslag till tentamen

729G04 - Diskret matematik. Lektion 4

Tentamen Datastrukturer (DAT036)

Algoritmer, datastrukturer och komplexitet

Tentamen Datastrukturer D DAT 035/INN960

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Grafer, allmänt. Med datastrukturen graf menas vanligen: en mängd av noder (vertices) och en mängd av bågar (edges).

Optimeringslära Kaj Holmberg

Lektion 2: Sökagenter. Robin Keskisärkkä

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Övningsmästarprov 2 + några NP-reduktioner. Algoritmer, datastrukturer och komplexitet

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15-13:15

Föreläsning 4 Datastrukturer (DAT037)

Om plana och planära grafer

Algoritmer och datastrukturer, föreläsning 11

Föreläsning 11. Riktade grafer. Viktade grafer. TDDC70/91: DALG. Innehåll. Innehåll. 1 Riktade grafer A 11.3

Efternamn förnamn pnr årskurs

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 09:00 14:00

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Om plana och planära grafer

Tentamen Datastrukturer D DAT 036/INN960

Efternamn förnamn ååmmdd kodnr

Föreläsning Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

Algoritmer, datastrukturer och komplexitet

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen Datastrukturer, DAT037 (DAT036)

Transkript:

Föreläsning 2. Kortaste vägar i grafer. Problem: KORTASTE VÄGAR Den enklaste varianten är om vi inte har kantvikter och kortaste väg är en väg med såfåkanter som möjligt. Indata: En riktad graf G och en startnod s. Mål: Kortaste väg från s till alla andra noder. Metod: Sök igenom grafen enligt Bredden-Först-Sökning (BFS) Algoritm BFS tar en graf och går igenom hörnen ett i taget. Algoritmen börjar i starthörnet s och tar sedan grannarna till s, grannarna till grannarna till s etc. En kö används för att hålla reda på ordningen i vilken hörnen besöks. Det oviktade avståndet från s beräknas samtidigt. BFS(V,E,s) (1) d[u] för alla u V (2) d[s] 0 (3) Q {s} (4) while Q (5) u Dequeue(Q) (6) foreach granne v till u (7) if d[v] = (8) d[v] d[u] +1 (9) p[v] =u (10) Enqueue(Q, v) (11) Bearbeta u här Tidskomplexitet: O( V + E ) Grafer med kantvikter Om vi har kantvikter som längden påen väg räknas som summan av kantvikterna längs vägen får vi ett svårare problem. Vi har två fall: 1. Alla kantvikter är 0. 2. Vi tillåter kantvikter < 0. Det första fallet är betydligt enklare än det andra. Det första kan lösas med Dijkstras algoritm.

Dijkstras algoritm Dijkstra(G = V,E,s, t V, l : E ) (1) foreach u V (2) Märk u med d[u] = (3) foreach u såatt (s, u) E (4) Märk u med d[u] =w(s, u) (5) Märk s med d[s] =0 (6) S {s} (7) while t S (8) Välj u/ S med d[u] minimal. (9) S S {u} (10) foreach v/ S såatt (u, v) E (11) if d[v] >d[u] +w(u, v) (12) d[v] d[u] +w(u, v) (13) p[v] u (14) return Märkningen hos t G antas representerad i form av grannlistor. När algoritmen är klar markerar d[v] kortaste avståndet från s till v. Kortaste vägen fås baklänges som p[v],p[p[v]],... Tidskomplexitet: Den inledande märkningen tar O( V ) tid. Att hitta hörnet som S ska utvidgas med tar O( V ) tid, och detta utförs högst V gånger. För varje kant i grafen kommer högst en uppdatering ske. Totalt: O( V + V 2 + E ) =O( V 2 ) (eftersom E O( V 2 )) Korrekthetsbevis Vi antar för enkelhets skull att alla noder kan nås från s. Låtδ[s, v] betyda kortaste vägen från s till v och δ S [s, v] betyda kortaste vägen som går genom noder i S, förutom v. Vi använder följande invariant för den yttersta slingan: Alla noder u i S är märkta med d[u] =δ[s, u]. Dessutom är alla v / S med d[v] < märkta med d[v] =δ S [s, v]. Noderna märkta med d[v] = går inte att nåmed en S-stig. Invarianten är sann innan slingan börjar köras. Antag att den är sann i ett steg i algoritmen. I nästa steg läggs u till. Vi måste visa att d[u] =δ[s, u]. Antag att d[u] δ[s, u]. I den korstaste vägen från s till u finns en första nod x som ligger utanför S. Dågäller δ[s, u] =δ[s, x]+δ[x, u]. Menδ[s, x] =δ S [s, x] =d[x] enligt antagandet. Dågäller δ[s, u] =d[x]+δ[x, u] d[x] d[u] eftersom negativa vägar inte finns. Eftersom d[u] < måste det finnas y S såatt d[u] =d[y]+w(y, u). Eftersom d[y] =δ S [s, y] såär d[y]+w(y, u) längden påen möjlig väg från s till u. Därför är δ[s, u] d[u]. Detgerd[u] =δ[s, u].

Vi lägger nu till u till S. Kalla den nya mängden S.Vimärkeromnoderna utanför S.Vimåstevisaattd[v] =δ S [s, v] för de ommärkta noderna. Vi antar att v / S är granne till u och att v har märkningen d[v] före en eventuell ommärkning. Om d[v] =δ S [s, v] =δ S [s, v] såär δ S [s, v] δ[s, u]+w(u, v) = d[u] +w(u, v). Noden kommer inte att märkas om utan behåller märkningen d[v] =δ S [s, v] =δ S [s, v]. Om δ S [s, v] <δ S [s, v] såmåste kortaste S -vägen gåöver u. Låtz vara noden som kommer efter u påen sådan väg. Om z v måste z S och δ S [s, v] = δ S [s, u]+w(u, z)+δ S [z,v] δ S [s, z]+δ S [z,y] δ S [s, v]. Men detta är omöjligt. Alltsåmåste z = v och δ S [s, v] =δ S [s, u]+w(u, v) =d[u]+w(u, v). Nodenv kommer dåatt märkas om såatt den får d[v] =d[u]+w(u, v) =δ S [s, v]. När man går ur slingan har man beräknat korrekt kortaste avstånd d[t] från s till t. Negativa kantvikter tillåtna Om en graf har negativa kantvikter men inga negativa cykler såfinns kortaste vägar. Men de kan inte hittas med Dijkstras algoritm. Mer avancerad algoritm krävs. Om en graf har negativa cykler finns följande val. 1. Acceptera att kortaste avstånd inte kan beräknas och förkasta grafen. 2. Leta efter kortaste stigar istället för vägar. Ingen effektiv algoritm som gör detta är känd. 3. Leta efter kortaste vägar med begränsning att de får innehålla högst k kanter. Detta går att göra relativt enkelt. (Men är det det man är ute efter?) Bellman-Fords algoritm Följande algoritm löser problemet enligt fall 1 ovan. Vi antar att varje nod kan nås från s. Målet är då att hitta kortaste vägar från s till varje annan nod. Bellman-Ford(G = V,E,s V, w : E ) (1) foreach u V (2) d[u] (3) d[s] 0 (4) for i =1to V 1 (5) foreach (u, v) E (6) if d[v] >d[u] +w(u, v) (7) d[v] d[u] +w(u, v) (8) p[v] u (9) foreach (u, v) E (10) if d[v] >d[u] +w(u, v) (11) return Negativ cykel! (12) return d, p

Om en negativ cykel finns talar algoritmen om det. Annars svarar den med d och p. Komplexitet Inledande märkningen tar O( V ) steg. Yttre slingan tar O( V ) steg. Inre slingan tar O( E ) steg. Det ger tillsammans O( V E ) steg. Den sista kontrollen tar O( E ) steg. Totalt får vi O( V E ) =O( V 3 ). Det är sämre än Dijkstras algoritm. Korrekthetsanalys Vi antar först att grafen inte har negativa cykler. Dåexisterar kortaste vägar. Vi använder följande invariant för yttre slingan: Efter iteration k gäller för alla noder u med d[u] < att d[u] δ k [u] där δ k [u] =längden påden kortaste väg som har högst k kanter. Pekarna p[u] som har tilldelats ett värde genererar ett träd som är rotat i s och om p[v] =u så gäller d[v] d[u] +w(u, v). Påståendet är sant för k =0. Vi antar att det är sant för k och visar att det dåär sant för k +1 också. Om u kan nås med en väg som innehåller högst k kanter finns det en kortaste sådan väg. Kalla längden på den för δ k [u]. Antag att noden före u påen sådan väg är x. Dåmåsteδ k [u] =δ k 1 [x]+w(x, u) och enligt antagandet är då δ k [u] d[x]+w(x, u). Omd[u] >d[x]+w(x, u) kommer d[u] att märkas om till d[x]+w(x, u). I senare steg i samma iteration kan värdet på d[u] minska. I vilket falls som helst kommer d[u] δ k [u] när iterationen är klar. För en kant (u, v) med p[v] =u gäller d[v] =d[u]+w(u, v) precis efter märkningen. Om inte v märks om (och p[v] ändras) kan ändå d[u] sänkas. Men d[v] d[u] +w(u, v) kommer att fortsätta gälla. Antag att algoritmen i något steg skulle införa en pekare p[y] =x som genererar en pekarcykel. Dåskulle det före införandet av pekaren finnas en cykel (x, y), (y, z 1 ),..., (z r,x) där d[y] >d[x] +w(x, y) (annars ingen ny pekare) och med d[z 1 ] d[y] +w(y, z 1 ) o.s.v. för de övriga kanterna. Beräkna summan (d[y] d[x]) + (d[z 1 ] d[y]) +... +(d[x] d[z r ]). Summan är 0 och samtidigt >w(x, y) +w(y, z 1 )+... + w(z r,x). Cykeln är dånegativ vilket är omöjligt. Pekarna genererar inga cykler. Man kan dålätt se att de bildar ett träd som är rotat i s. Antag nu att yttersta slingan i första delen av algoritmen är klar. Dåär d[u] δ n 1 [u] för alla u. Men eftersom det finns en väg u, p[u],p[p[u]],... med d[u] = d[p[u]] + w(p[u],u) o.s.v. som leder till s såser vi att det finns en väg med värde d[u] från s till u. Dåmåsted[u] =δ n 1 [u]. Eftersom varje kortaste väg innehåller som mest n 1 kanter får vi d[u] =längden påkortaste vägen från s till u. Återstår att se om sista steget i algoritmen godkänner grafen. Men d[v] >d[u]+ w(u, v) är omöjligt eftersom d värdena nu anger korrekta avstånd. Så grafen måste bli godkänd.

Antag nu att grafen innehåller en negativ cykel med noderna u 1,u 2,..., u r.första steget i algoritmen kommer att generera d- värden (som inte kommer att vara korrekta avstånd). Om d[u i+1 ] d[u i ]+w(u i,u i+1 ) för alla i skulle summan (d[u 2 ] d[u 1 ]) + (d[u 3 ] d[u 2 ]) +... +(d[u 1 ] d[u r ]) vara både 0 och w(u 1,u 2 )+... + w(u r,u 1 ). Eftersom cykeln är negativ är det omöjligt och det måste finnas i med d[u i+1 ] >d[u i ]+w(u i,u i+1 ) Den olikheten kommer sista delen av algoritmen att upptäcka.