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

Relevanta dokument
Datastrukturer. föreläsning 8. Maps 1

Datastrukturer. föreläsning 7. Maps 1

Datastrukturer. föreläsning 9. Maps 1

Föreläsning Datastrukturer (DAT036)

Föreläsning 7 Datastrukturer (DAT037)

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Datastrukturer. föreläsning 7. Maps 1

Föreläsning Datastrukturer (DAT036)

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

Datastrukturer. föreläsning 9. Maps 1

Föreläsning 6 Datastrukturer (DAT037)

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

Föreläsning 8 Datastrukturer (DAT037)

Föreläsningsanteckningar F6

Föreläsning Datastrukturer (DAT037)

Föreläsning 5: Grafer Del 1

Lösningar Datastrukturer TDA

Föreläsning Datastrukturer (DAT036)

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

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

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

Graphs (chapter 14) 1

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

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

Tentamen Datastrukturer för D2 DAT 035

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 6 Datastrukturer (DAT037)

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

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

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

DAI2 (TIDAL) + I2 (TKIEK)

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

Trädstrukturer och grafer

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

Tentamen Datastrukturer D DAT 035/INN960

Algoritmer och datastrukturer, föreläsning 11

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Föreläsning 5: Dynamisk programmering

Datastrukturer. föreläsning 10. Maps 1

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

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Trafiksimulering: Grafalgoritmer

Tentamen Datastrukturer (DAT036)

TNK049 Optimeringslära

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

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 4 Datastrukturer (DAT037)

F11. Läsanvisning: kap 10 + dessa OH. Kruskals algoritm kortaste vägar en till alla

Datastrukturer. föreläsning 3. Stacks 1

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

Datastrukturer och Algoritmer D0041D

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 4: Kombinatorisk sökning

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

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

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Exempeltenta GruDat 2002/2003

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

FÖRELÄSNING 11 DATALOGI I

Datastrukturer. Föreläsning 5. Maps 1

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

Seminarium 13 Innehåll

Tentamen Datastrukturer (DAT036)

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

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.

Föreläsning 4 Datastrukturer (DAT037)

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

Algoritmer, datastrukturer och komplexitet

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

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

Tentamen Datastrukturer, DAT037 (DAT036)

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

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

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Tentamen Datastrukturer, DAT037 (DAT036)

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

Föreläsning 13 Innehåll

Algoritmer, datastrukturer och komplexitet

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Dugga Datastrukturer (DAT036)

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

Tentamen Datastrukturer (DAT036)

Tommy Färnqvist, IDA, Linköpings universitet

Datastrukturer och algoritmer

Föreläsning 13 Datastrukturer (DAT037)

13 Prioritetsköer, heapar

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

Datastrukturer och algoritmer

Föreläsning 13 Innehåll

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

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

Fredag 10 juni 2016 kl 8 12

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

Transkript:

atastrukturer föreläsning 8 Lecture 6 1

jupet-först sökning (S) och bredden-först sökning (S) Två metoder att genomsöka en graf; två grafiteratorer! Kan även användas för att avgöra om två noder är sammanbundna. jupet först: välj en startnod, följ en väg så långt som möjligt, gör sedan backtracking, följ nästa väg så långt som möjligt, osv redden först: välj en startnod, genomsök först alla noder med avståndet 1, sedan alla noder med avståndet 2, osv. Lecture 6 2

jupet-först sökning Lecture 6 3

xempel obesökt nod besökt nod obesökt båge upptäcktsbåge bakåtbåge Lecture 6 4

xempel, fortsättning Lecture 6 5

jupet-först sökning: tillämpningar vgör om en graf är sammanhängande estäm de sammanhängande komponenterna estäm en uppspännande skog inn en väg mellan två noder inn en cykel Lecture 6 6

redden-först sökning L 0 L 1 L 2 Lecture 6 7

xempel obesökt nod besökt nod obesökt båge upptäcktsbåge övergångsbåge L 1 L 0 L 0 L 0 L 1 L 1 Lecture 6 8

xempel (forts.) L 0 L 0 L 1 L 1 L 2 L 0 L 0 L 1 L 1 L 2 L 2 Lecture 6 9

xempel forts. L 0 L 0 L 1 L 1 L 2 L 2 L 0 L 1 L 2 Lecture 6 10

S-algoritmen lgorithm S Input graph G Output labeling of the edges and partition of the vertices of G for all u G.vertices() setlabel(u, UNXPLOR) for all e G.edges() setlabel(e, UNXPLOR) for all v G.vertices() if getlabel(v) = UNXPLOR S(G, v) lgorithm S(G,s) L 0 new empty sequence L 0.insertLast(s) setlabel(s, VISIT) i 0 while L i.ismpty() L i +1 new empty sequence for all v L i.elements() for all e G.incidentdges(v) if getlabel(e) = UNXPLOR w opposite(v,e) if getlabel(w) = UNXPLOR setlabel(e, ISOVRY) setlabel(w, VISIT) L i +1.insertLast(w) else setlabel(e, ROSS) i i +1 Lecture 6 11

redden-först sökning (S) xekveringstiden för S på en graf med n noder och m bågar är O(m+n) S kan användas ör att hitta kortaste vägen (i en oviktad graf) mellan två noder Se även tillämpningarna för S (finna sammanhängande komponenter, cykler, etc) Lecture 6 12

en kortaste vägen 0 8 4 2 8 7 2 1 2 5 3 9 8 5 3 Lecture 6 13

Viktade grafer I en viktad graf tillordnar vi ett tal till varje båge. etta tal kallas en vikt Vikter kan representera avstånd, kostnader mm xempel: avstånd mellan flygplatser SO 337 1843 OR 802 849 LG PV 1205 HNL LX 1233 W 1120 MI Lecture 6 14

tt finna kortaste vägen Givet en viktad graf och två noder u och v, finn en väg mellan dem vars bågar har minimal sammanlagd vikt Tillämpningar ärdplaner för flyg, tåg, bilar, osv Snabbaste vägen att skicka ett paket över internet xempel: HNL Kortaste vägen mellan PV och HNL SO 337 LX 1843 1233 OR 802 W 849 1120 LG PV MI Lecture 6 15 1205

Hur man finner kortaste vägen mellan två noder i en riktad graf ijkstras algoritm är en generalisering av S som beräknar kortaste vägar i en viktad graf. en besöker noderna i avståndsordning från startnoden. en beräknar även avståndet från startnoden till alla andra noder. Lecture 6 16

S, S och ijkstras algoritm essa tre algoritmer delar in noderna i besökta, kandidatnoder (grannar till besökta noder), och obesökta noder. S har en stack med kandidatnoder S har en kö med kandidatnoder ijkstras algoritm har en prioritetskö med kandidatnoder Obs. Kön i pseudokoden för S är implicit! Lecture 6 17

xempel: kortaste vägar från noden till övriga noder 0 8 4 2 7 1 3 9 2 5 esökta noder: 0 Prioritetskö Q: (0,) Lecture 6 18

Steg 1: besök och lägg dess grannar i Q! 8 4 8 2 2 4 7 1 3 9 2 5 esökta noder: 1 Prioritetskö Q:(2,) (4,) (8,) Lecture 6 19

Steg 2 8 4 8 2 2 3 7 1 5 3 9 11 2 5 esökta noder: 2 Prioritetskö Q: (3,)(5,)(8,)(11,) esök och lägg till grannarna och som inte redan finns i Q. Uppdatera också avståndet till eftersom en kortare väg från startnoden har hittats. Lecture 6 20

Steg 3 8 4 8 2 2 3 7 1 5 3 9 8 2 5 esökta noder: 3 Prioritetskö Q: (5,)(8,)(8,) Nu är alla noder antingen besökta eller ligger i Q. Vi måste dock uppdatera avståndet till. Lecture 6 21

Steg 4 8 4 7 2 2 3 7 1 5 3 9 8 2 5 esökta noder: 4 Prioritetskö Q: (7,)(8,) Nu uppdaterade vi avståndet till. Lecture 6 22

Steg 5 8 4 7 2 2 3 7 1 5 3 9 8 2 5 esökta noder: 5 Prioritetskö Q: (8,) Lecture 6 23

Steg 6 8 4 7 2 2 3 7 1 5 3 9 8 2 5 esökta noder: 6 Q: tom Lecture 6 24

Hur man implementerar ijkstras algoritm Input: en graf G med icke-negativa vikter och en startnod s Output: ör varje nod u det kortaste avståndet [u] från s. rån början sätter vi [s] till 0 och [u] till oändligheten. Under exekveringen av algoritmen kommer [u] att innehålla de hittills funna kortaste avstånden från s. lgoritmen använder sig av en prioritetskö Q som innehåller alla obesökta noder u med [u] som prioriteter. Vi besöker den nod som har högst prioritet i Q. Om vi vill returnera kortaste vägar och inte bara kortaste avstånd låter vi [u] även innehålla en pekare till föregående nod på den kortaste vägen. Om vi vill kunna uppdatera prioriteten i Q för en viss nod behöver vi dessutom lagra platsen som noden lagras på i Q. (Om Q är en heap så lagrar vi index i fältet som lagrar Q.) Lecture 6 25

ijkstras algoritm lgorithm ShortestPath(G,s) [s] = 0 [u] = infinity for all nodes u different from s. Q new priority queue containing all nodes u with priorities [u] while Q.ismpty() u Q.removeMinNode() ( visit u) for each node z adjacent to u and not yet visited do if [u] + weight(u,z) < [z] then [z] [u] + weight(u,z) and update the priority of z in Q return [u] for each node u n implementeringsdetalj: Q i exemplet tidigare visar inte de avstånd [u] som är oändligheten. n alternativ implementering har inte dessa med i Q. Lecture 6 26

Några egenskaper genskap 1: n delväg till en kortaste väg är också en kortaste väg genskap 2: et finns ett träd av kortaste vägar från en startnod till de alla de andra noderna xempel: Träd med kortaste vägar från PV SO OR LG PV HNL 337 1843 802 849 1205 LX 1233 W 1120 MI Lecture 6 27

Komplexiteten hos ijkstra med heap Om grafen har n noder och m bågar och vi implementerar Q med en heap gäller att Heapmetoderna (ta bort minsta och ändra prioriteten på ett element i Q) är O(log n). Man tar bort minsta elementet n gånger Man ändrar en prioritet för någon nod maximalt en gång för varje båge, dvs O(m). lltså är komplexiteten O((m+n) log n). Om grafen sammanhängande blir detta O(m log n). Lecture 6 28

Komplexiteten hos ijkstra med Q som fält Om vi i stället implementerar Q med ett osorterat fält av noder och grafen har n noder och m bågar är tt ta bort minsta elementet är O(n) och man gör detta maximalt n gånger. Totala tiden för denna operation är alltså O(n 2 ). tt ändra prioriteten på ett element är O(1) och man gör detta maximalt en gång för varje båge. Totala tiden för denna operation är alltså O(m). lltså är komplexiteten O(n 2 + m). etta är bättre än O((m+n)log n) om vi har en tät graf. Lecture 6 29

Heuristisk sökning Om man letar efter en specifik nod i en graf kan man förbättra ijkstras algoritm om man har ytterligare heuristisk information T ex kan man uppskatta tiden det tar att åka till en viss hållplats om man vet det geografiska avståndet ( as the crow flies ) När man väljer kandidatnod rankar man noderna efter summan av tiden från utgångspunkten och den uppskattade tiden till målet enna algoritm kallas * (brukar betraktas som I) Heuristik = tumregel Lecture 6 30

Riktade grafer Lecture 6 31

jupet-först, bredden-först och ijkstras algoritm fungerar på väsentligen samma sätt för riktade grafer som för oriktade grafer (exemplen var oriktade) Lecture 6 32

Transitiva höljet Transitiva höljet av en riktad graf G är en riktad graf G* som har samma noder som G om G har en väg från u till v (u v), så har G* en båge från u till v Transitiva höljet beskriver vilka noder man kan nå från andra noder ( reachability ) Vi kan beräkna transitiva höljet genom att använda S én gång för varje nod. xekveringstiden blir då O(n(n + m)). ungerar för oriktade grafer också förstås - oriktade grafer är specialfall av riktade grafer! G G* Lecture 6 33

loyd-warshalls algoritm Grafen G är implementerad som en grannmatris. Vilken tidskomplexitet har följande algoritm? lgorithm loydwarshall(g) Output transitive closure G* of G matrix representing the graph G n number of vertices for k 1 to n do for i 1 to n do for j 1 to n do (i,j) (i,j) ((i,k) (k,j)) return Lecture 6 34