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

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

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

Datastrukturer. föreläsning 8. Maps 1

Föreläsning Datastrukturer (DAT036)

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 5: Grafer Del 1

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning 7 Datastrukturer (DAT037)

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

Föreläsning 8 Datastrukturer (DAT037)

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsningsanteckningar F6

Datastrukturer. föreläsning 9. Maps 1

Föreläsning 5: Dynamisk programmering

Föreläsning Datastrukturer (DAT037)

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

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

Föreläsning Datastrukturer (DAT036)

Några svar till TDDC70/91 Datastrukturer och algoritmer

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

Magnus Nielsen, IDA, Linköpings universitet

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

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

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

729G04 - Diskret matematik. Lektion 4

Algoritmer, datastrukturer och komplexitet

Datastrukturer. föreläsning 7. Maps 1

Föreläsning 6 Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

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

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

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

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

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

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

Trafiksimulering: Grafalgoritmer

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

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

Tommy Färnqvist, IDA, Linköpings universitet

DAI2 (TIDAL) + I2 (TKIEK)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

729G04 - Diskret matematik. Lektion 4

Lösningar Datastrukturer TDA

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

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

Föreläsning 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd

Datastrukturer. föreläsning 7. Maps 1

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

Tentamen Datastrukturer D DAT 035/INN960

TNK049 Optimeringslära

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

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

Avancerad Problemlösning och Programmering i Praktiken

Algoritmer, datastrukturer och komplexitet

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

Graphs (chapter 14) 1

Träd. Sats. Grafer. Definition. En fullständig graf har en båge mellan varje par av noder. Definition

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

Algoritmer, datastrukturer och komplexitet

MA2047 Algebra och diskret matematik

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

Algoritmer, datastrukturer och komplexitet

Tentamen Datastrukturer för D2 DAT 035

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

Algoritmer, datastrukturer och komplexitet

N = {i}: noder (hörn) Graf: G = (N, B) Definitioner. Väg: Sekvens av angränsande bågar. Cykel: Väg som startar och slutar i samma nod.

Algoritmer och datastrukturer, föreläsning 11

Föreläsning 13. Dynamisk programmering

Grafer och grannmatriser

Föreläsning 11. Giriga algoritmer

Tentamen Datastrukturer (DAT037)

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

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

Föreläsning 6. Slumptal Testa slumptal Slumptal för olika fördelningar Grafer Datastrukturen graf

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

Datastrukturer. föreläsning 3. Stacks 1

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 13. Dynamisk programmering

Optimering Kruskal s algoritm Prim-Jarník s algoritm

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Algoritmer, datastrukturer och komplexitet

Ekvivalensrelationer

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

Föreläsning 4: Kombinatorisk sökning

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

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen Datastrukturer (DAT036)

Grundläggande datalogi - Övning 3

Föreläsning 12+13: Approximationsalgoritmer

Föreläsning 4 Datastrukturer (DAT037)

Transkript:

Föreläsning 11 Riktade grafer. Viktade grafer. T70/1: ALG Utskriftsversion av föreläsning i atastrukturer och algoritmer 14 oktober 2013 Tommy Färnqvist, IA, Linköpings universitet 11.1 Innehåll Innehåll 1 Riktade grafer 1 2 Konnektivitet 3 Transitivt hölje 6 4 Topologisk sortering 11 Viktade grafer 17 6 Kortaste vägar 1 11.2 1 Riktade grafer Introduktion I en riktad graf är alla bågar riktade A 11.3 genskaper n graf G = (V,) sådan att varje båge går i en riktning: åge (a,b) går från a till b men inte från b till a. Om G är enkel (inga parallella bågar och inga öglor) gäller m n (n 1), d.v.s. m O(n 2 ). 1

A 11.4 Politisk bloggosfär-graf The Political logosphere and the 2004 US lection: ivided They log, Adamic och Glance, 200 11. Nattliga lån mellan banker The Topology of the Federal Funds Market, ech och Atalay, 200 11.6 Implikationsgraf 2

11.7 Kombinatorisk krets 11. WordNet-graf 11. 3

http://www.guardian.co.uk/news/datablog/2010/apr/2/mcchrystal-afghanistan-powerpoint-slide 11.10 Tillämpningar riktad graf transport www näringskedja schemaläggning finansiell mobiltelefon smittsam sjukdom citeringar objektgraf arvshierarki kontrollflöde nod gatukorsning hemsida art uppgift bank person person artikel objekt klass kodblock rikatd båge enkelriktad gata hyperlänk rovdjur-byte-förhållande föregångarvillkor transaktion ringt samtal infektion citering pekare ärver från hopp 11.11 Några algoritmiska grafproblem Stig. Finns det en riktad stig från s till t? Kortaste väg. Vilken är den kortaste riktade stigen från s till t? Stark konnektivitet. Finns det en riktad stig mellan alla par av noder? Topologisk sorting. Går det att rita den riktade grafen så att alla kanter pekar uppåt? Transitivt hölje. För vilka noder v och w finns det en stig från v till w? Page Rank. Hur betydelsefull är en webbsida? 11.12 Riktad FS Vi kan specialisera traverseringsalgoritmerna (FS och FS) till riktade grafer I den riktade FS-algoritmen får vi fyra typer av bågar discovery -bågar bakåt-bågar framåt-bågar korsande bågar n riktad FS med start i nod s bestämmer vilka noder som är nåbara från s 4

A 11.13 2 Konnektivitet Nåbarhet FS-träd rotat i v: noder nåbara från v via riktade stigar F A A F A 11.14 Starkt sammanhängande Varje nod är nåbar från alla andra noder a c g d e f b 11.1 Algoritm för att avgöra starkt sammanhängande Välj en nod v i G // Kan alla noder nås från v?utför FS från v i G Om det finns w som inte besöks svara nej Låt G vara G med riktningen på varje båge omkastad // Kan v nås från alla noder?utför FS från v i G Om det finns w som inte besöks svara nej Annars, svara ja

Körtid: O(n + m) G: a c g d e f b G : a c g d e f b 11.16 Starkt sammanhängande komponenter Maximal delgraf sådan att varje nod kan nå alla andra noder i delgrafen Kan också göras i O(n + m) tid genom att använda FS i flera steg a c g { a, c, g } f d e b { f, d, e, b } 11.17 3 Transitivt hölje Transitivt hölje Givet en riktad graf G, låt det transitiva höljet av G vara den riktade grafen G sådan att G har samma noder som G om G har en riktad stig från u till v (u v) så har G en riktad båge från u till v et transitiva höljet ger information om nåbarheten i en riktad graf A G A G* 11.1 eräkning av transitiva höljet Vi kan köra FS med start i varje nod v 1,...,v n, alltså O(n (n + m)) Alternativt använda dynamisk programmering: Floyd-Warshalls algoritm 11.1 6

Transitiva höljet med Floyd-Warshall Numrera noderna 1,2,...,n. I fas k, betrakta bara stigar som använder noder med nummer 1,2,...,k som mellanliggande noder: i Använder bara noder numrerade 1,,k (lägg till bågen om den inte redan är med) Stig med noder numrerade 1,,k-1 k Stig med noder numrerade 1,,k-1 j 11.20 Floyd-Warshalls algoritm Floyd-Warshalls algoritm numrerar noderna i G som v 1,...,v n och beräknar en serie riktade grafer G 0,...,G n G 0 = G G k har en riktad båge (v i,v j ) om G har en riktad stig från v i till v j med mellanliggande noder i mängden {v 1,...,v k } Vi ser att G n = G I fas k beräknas grafen G k utgående från G k 1 Körtid: O(n 3 ) om areadjacent är O(1) 11.21 Floyd-Warshalls algoritm function FLOYWARSHALL(G) G 0 G for k 1 to n do G k G k 1 for i 1 to n (i k) do for j 1 to n ( j i,k) do if G k 1.ARAJANT(v i,v k ) then if G k 1.ARAJANT(v k,v j ) then if G k.arajant(v i,v j ) then G k.insrtirtg(v i,v j,k) return G n 11.22 xempel: Floyd-Warshall OS v 7 OR v 4 v 2 SFO JFK v 6 LAX v 1 v 3 FW MIA v 7

11.23 Floyd-Warshall, iteration 1 OS v 7 OR v 4 v 2 SFO JFK v 6 LAX v 1 v 3 FW MIA v 11.24 Floyd-Warshall, iteration 2 OS v 7 OR v 4 v 2 SFO JFK v 6 LAX v 1 v 3 FW MIA v 11.2 Floyd-Warshall, iteration 3

OS v 7 OR v 4 v 2 SFO JFK v 6 LAX v 1 v 3 FW MIA v 11.26 Floyd-Warshall, iteration 4 OS v 7 OR v 4 v 2 SFO JFK v 6 LAX v 1 v 3 FW MIA v 11.27 Floyd-Warshall, iteration

OS v 7 OR v 4 v 2 SFO JFK v 6 LAX v 1 v 3 FW MIA v 11.2 Floyd-Warshall, iteration 6 OS v 7 OR v 4 v 2 SFO JFK v 6 LAX v 1 v 3 FW MIA v 11.2 Floyd-Warshall, slutet 10

OS v 7 OR v 4 v 2 SFO JFK v 6 LAX v 1 v 3 FW MIA v 11.30 4 Topologisk sortering Riktade acykliska grafer och topologisk ordning n riktad acyklisk graf (AG) är en riktad graf som inte har några riktade cykler n topologisk ordning av en graf är en totalordning v 1,...,v n av noderna sådan att varje båge (v i,v j ) uppfyller i < j xempel: I en riktad graf som svarar mot en instans av uppgiftsschemaläggning är en topologisk ordning en sekvens av uppgifter som uppfyller kraven på inbördes ordning mellan uppgifterna Proposition 1 (13.21 i kursboken). n riktad graf går att ordna topologiskt omm grafen är en AG A AG G v 2 v 1 A v 4 v v3 Topologisk ordning av G 11.31 Topologisk sortering Numrera noderna, så att (u,v) u < v 11

1 vakna 2 3 äta plugga ALG 7 spela baka kakor till läraren 4 sova mer ALG skriva datorprogram 10 sova n typisk studentdag 6 träna 11 drömma om grafer 11.32 Algoritm för topologisk sortering procedure TOPOLOGIALSORT(G) S ny tom stack for all u G.VRTIS() do låt INOUNTR(u) vara ingraden för u if INOUNTR(u) = 0 then S.PUSH(u) i 1 while S.ISMPTY() do u S.POP() låt u få nummer i i den topologiska ordningen i i + 1 for all utgående kanter (u,w) från u do INOUNTR(w) INOUNTR(w) 1 if INOUNTR(w) = 0 then S.PUSH(w) Körtid: O(n + m). 11.33 Alternativ algoritm för topologisk sortering procedure TOPOLOGIALSORT(G) H G n G.NUMVRTIS while H är icke-tom do låt v vara en nod utan utgående bågar märk v med n n n 1 ta bort v från H temporär kopia av G Körtid: O(n + m). Hur då...? 11.34 Algoritm för topologisk sortering via FS Simulera algoritmen genom att använda en djupetförstsökning procedure TOPOLOGIALFS(G) n G.NUMVRTIS sätt alla noder och bågar till UNXPLOR som i FS for all v G.VRTIS() do if GTLAL(v) = UNXPLOR then TOPOLOGIALFS(G, v) procedure TOPOLOGIALFS(G, v) STLAL(v,V ISIT ) for all e G.ININTGS(v) do if GTLAL(e) = UNXPLOR then w OPPOSIT(v, e) 12

if GTLAL(w) = UNXPLOR then STLAL(e, ISOV RY ) TOPOLOGIALFS(G, w) else e är korsande båge eller framåt-båge märk v med topologiskt nummer n n n 1 11.3 xempel: Topologisk sortering 11.36 xempel: Topologisk sortering 11.37 xempel: Topologisk sortering 13

11.3 xempel: Topologisk sortering 7 11.3 xempel: Topologisk sortering 14

6 7 11.40 xempel: Topologisk sortering 6 7 11.41 xempel: Topologisk sortering 1

6 4 7 11.42 xempel: Topologisk sortering 3 6 4 7 11.43 xempel: Topologisk sortering 16

2 3 6 4 7 11.44 xempel: Topologisk sortering 2 1 3 6 4 7 11.4 Viktade grafer Viktade grafer I en viktad graf är varje båge associerad med ett numeriskt värde kallat bågens vikt. ågvikter kan representera avstånd, kostnader, etc. 11.46 Google maps 17

11.47 olaget ontinentals flygrutter i USA (augusti 2010) 11.4 Tillämpningar PRT/PM Kartapplikationer Seam carving Robotnavigering Texture mapping Typsättning i TeX Trafikplanering i stadsmiljö Optimal pipelining för VLSI-chip Schemaläggning av telemarketingförsäljare Routing av meddelanden inom telekom. Routingprotokoll för nätverk (OSPF, GP, RIP) Utnyttja gynsamma situationer vid valutahandel Optimal ruttplanering för lastbilar givet trafikstockningsmönster 1

ng. endpoints, incident, adjacent, degree, parallel, loops 6 11.4 Kortaste vägar Problemet kortaste väg Givet en viktad graf och två noder u och v vill vi hitta en stig mellan u och v med minimal total vikt. Längden av en stig är summan av vikterna på stigens bågar xempel Kortaste vägen mellan Providence och Honolulu PV OR SFO LGA HNL LAX FW MIA 11.0 genskaper hos kortaste vägar n delväg av en kortaste väg är också en kortaste väg et finns ett träd av kortaste vägar från en startnod till alla andra noder xempel tt träd av kortaste vägar från Providence PV OR SFO LGA HNL LAX FW MIA 11.1 1

ijkstras algoritm Avståndet från en nod v till en nod s är längden av kortaste vägen mellan s och v ijkstras algoritm beräknar avstånden från en given startnod s till alla noder v i grafen Antaganden: grafen är sammanhängande bågarna är oriktade grafen har inga öglor eller parallella bågar bågvikterna är ickenegativa Vi bygger ett moln av noder med start i s, som till slut täcker alla noder Vi märker varje nod v med d(v), vilket betecknar avståndet mellan v och s i delgrafen bestående av molnet och noderna som är grannar till molnet I varje steg lägger vi till den nod u utanför molnet som har minst avståndsmärkning d(u) uppdaterar vi märkningen av noderna som är grannar till u 11.2 Utökningssteget etrakta en båge e = (u,z) sådan att u är noden vi nyligen lagt till i molnet z inte är med i molnet Relaxeringen av bågen e uppdaterar d(z) enligt: d(z) min{d(z), d(u) + weight(e)} s d(u) 0 u e d(z) 7 z s d(u) 0 u e d(z) 60 z 11.3 xempel 0 A 4 2 7 2 1 4 3 2 F 0 A 4 2 7 2 1 3 3 2 F 0 A 4 2 7 2 1 3 3 11 2 F 0 A 4 2 7 7 2 1 3 3 2 F 11.4 20

Fortsättning på exemplet 0 A 4 2 7 7 2 1 3 3 2 F 0 A 4 2 7 7 2 1 3 3 2 F 11. ijkstras algoritm n prio-kö lagrar noderna utanför molnet Nyckel: avstånd Värde: nod Lokator-baserade metoder insert(k,v) returnerar en lokator replacekey(l,k) ändrar en posts nyckelvärde Vi lagrar två saker i varje nod: avstånd (d(v)) lokator i prio-kön procedure IJKSTRA(G, s) Q ny tom heapbaserad prio-kö for all v G.VRTIS() do if v = s then STISTAN(v, 0) else STISTAN(v, ) l Q.INSRT(GTISTAN(v), v) STLOATOR(v, l) while Q.ISMPTY() do u Q.RMOVMIN() for all e G.ININTGS(u) do z G.OPPOSIT(u, e) r GTISTAN(u)+WIGHT(e) if r <GTISTAN(z) then STISTAN(z, r) Q.RPLAKY(GTLOATOR(z), r) 11.6 Analys av ijkstras algoritm Grafoperationer Vi anropar incidentdges en gång för varje nod Märkningsoperationer Vi hämtar/sätter avstånd och lokator för nod z O(deg(z)) gånger Att sätta/hämta en märkning tar tid O(1) Prio-köoperationer 21

Varje nod sätts in en gång och tas ut en gång från prio-kön, där varje insättning och borttagning tar tid O(logn) n nods nyckel i prio-kön ändras som mest deg(w) gånger, där varje nyckeländring tar tid O(logn) ijkstras algoritm har exekveringstid O((n+m) logn) givet att grafen representeras med en grannlista Kom ihåg att v deg(v) = 2m xekveringstiden kan också uttryckas som O(mlogn) eftersom vi antagit att grafen är sammanhängande 11.7 Varför ijkstras algoritm fungerar ijkstras algoritm är baserad på den giriga metoden. Algoritmen lägger till noderna efter ökande avstånd. Antag att algoritmen inte hittade alla kortaste avstånd. Låt F vara den första felaktiga noden som behandlas. När den föregående noden,, längs den sanna kortaste vägen behandlades var dess avstånd korrekt. Men bågen (,F) relaxerades i det steget! Mao, så länge d(f) d() kan inte avståndet till F bli fel. vs, ingen nod får fel avstånd. 7 0 A 2 7 2 1 3 2 F 4 3 11. Varför ijkstras algoritm inte fungerar med negativa bågvikter ijkstras algoritm är baserad på den giriga metoden. Algoritmen lägger till noderna efter ökande avstånd. Om en nod med en negativ incident båge skulle läggas till sent i molnet skulle den förstöra avståndet till noder som redan finns i molnet. 0 A 4 6 7 7 1 4 0-2 F s sanna avstånd är 1, men finns redan i molnet med d()=! 11. ellman-fords algoritm (finns inte i kursboken) Fungerar även med negativa bågvikter Måste anta riktade bågar (annars kan det finnas cykler med negativ vikt) Iteration i hittar alla kortaste vägar som använder i bågar xekveringstid: O(nm) Kan utökas till att detektera cykler med negativ vikt procedure LLMANFOR(G, s) for v G.VRTIS() do if v = s then STISTAN(v, 0) else STISTAN(v, ) for i 1 to n 1 do for each e G.GS() do u G.ORIGIN(e) z G.OPPOSIT(u, e) r GTISTAN(u)+WIGHT(e) if r <GTISTAN(z) then STISTAN(z, r) 11.60 22

xempel Noderna är märkta med resp d(v)-värde 0-2 7 1 4 0 4-2 7-2 1 4 3-2 3-2 0-2 7 1-2 1 3-2 6 4 4-1 0 4-2 7 1-2 -1 3-2 4 1 11.61 23