Øvingsforelesning 7 ijkstras algoritme oiler: redrik Ludvigsen oreleser: Jon Marius Venstad 0/4/09
Korteste sti - hvorfor? ksempel på bruk GPS-systemer ilde-krymping (som vist forrige mandag) Routing-protokoller i ip-nettverk (lan, internett etc.) Simulering av kombinasjonskostnader + mye, mye mer 0/4/09 2
Simulering av kombinasjonskostnader n administrator skal kjøpe inn datamaskiner, operativsystemer, og programvare til sitt universitet. Hans eneste mål er at maskinene skal kunne gjøre en gitt type avansert bildebehandling, men han vil bruke så lite penger som mulig. (Prisen på maskiner, OS, og programvare skal minimeres.) Operativsystemene fungerer kun på gitte datamaskiner, og de avanserte bildebehandlingsprogrammene fungerer kun under gitte operativsystemer (og enkelte krever plugins). 0/4/09
Simulering av kombinasjonskostnader Operativsystemer atamaskiner (rees, MC OS X, Linux, Vista,...) (x86, power6, MIPS,...) Linux GIMP (00 k for nødvendign (00 k) Kinesisk maskin support i 0 år) med MIPS-prosessor (2 mill kr) ildebehandlingsprogrammer (CS4, Paintshop pro, GIMP, CSee, ) Plugin, utvikles ved Universitetet (00 k) Pris på maskin Plugins (som må kjøpes inn eller lages selv) Pris på OS-lisens Pris på bildebahandlings programvare Pris på innkjøp / utvikling av plugin 0/4/09 4
Korteste sti med dijkstra hvordan? ijkstras algoritme følger en tankegang som ligner på S. S finner faktisk korteste sti i grafer, hvis man kun ser på antall kanter traversert. (Hvis du tenker at hver kant har lengde ) 0/4/09 5
ijkstras algoritme i én setning Velg noder med (minste) økende avstand fra utgangsnoden, helt til målet er nådd. 0/4/09 6
ijkstras algoritme eksempel, første gang 8 7 5 2 4 2 C 4 0 5 0/4/09 7
ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger 0/4/09 8
ijkstras algoritme i praksis INITILIZ-SINGL-SOURC(G, s) S Ø while Q Ø do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 9
ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 0
ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09
ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 2
ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09
ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 4
ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 5
ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 6
ijkstras algoritme i praksis sett alle estimater til sett startnodens estimat til 0 S er en tom liste Q er en prioritetskø legg alle noder inn i Q så lenge Q ikke er tom: sett u til den "korteste" noden i Q fjern u fra Q legg u til de kjente nodene for hver nabo v av u: hvis u kan tilby en kortere sti til v: oppdater v sitt estimat sett u som v sin forgjenger INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) 0/4/09 7
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q 0 S 2 C 4 0/4/09 8
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q S 0 * 2 C 4 0/4/09 9
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q 2 4 S 0 * 2 C 4 0/4/09 20
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q 4 S 0 2 * 2 C 4 0/4/09 2
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) C Q S 0 2 * 2 C 4 9 0/4/09 22
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 2 C 4 9 0/4/09 2
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 2 C 4 6 9 4 C C 0/4/09 24
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 6 C 4 C 9 2 C 4 0/4/09 25
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 5 4 C 9 2 C 4 0/4/09 26
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 4 C 9 5 2 C 4 0/4/09 27
ijkstras algoritme eksempel, andre gang 7 5 INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 4 C 8 5 2 C 4 0/4/09 28
ijkstras algoritme eksempel, andre gang INITILIZ-SINGL-SOURC(G, s) do u XTRCT-MIN(Q) for each vertex v # dj[u] do RLX(u, v, w) Q S C 0 2 * 2 C 4 5 8 C 0/4/09 29
ijkstras algoritme H I J I forrige eksempel lå alle nodene etter hverandre på den korteste stien G 70 K 20 L 57 ijkstra finner korteste vei en-til-alle, så resultatet er et tre. 0/4/09 0
ijkstras algoritme - korrekthet start 2 2 7 (4) (8) 0/4/09 () Tankegangen her likner tankegangen i prims algoritme, men nå velges nye noder ut ifra avstand til startnoden, ikke bare avstand til en hvilken som helst del av treet. Hver gang vi velger en ny node u vet vi at avstanden til den er riktig Vi vet at avstanden til alle de andre nodene i S er riktig, og vi kan ikke finne en kortere vei til u via bare disse. Så en kortere vei til u må gå via noder i Q. MN: lle disse har avstand større enn eller lik avstanden til u, og vi antar at det ikke fins negative kanter, så da kan ikke en vei gjennom Q være kortere likevel :) Hvis det finnes negative kanter fungerer verken algoritmen eller beviset.
ijkstras algoritme alternativ tankegang, bruk av S 7 5 2 C 4 0/4/09 2
ijkstras algoritme valg av prioritetskø INITILIZ-SINGL-SOURC(G, s) 2 4 5 do u XTRCT-MIN(Q) 6 7 for each vertex v # dj[u] 8 do RLX(u, v, w) Konstruksjon av Q med V elementer () While-løkka kjøres V ganger tt uttak fra Q (5) or-løkka kjøres totalt ganger (7) I verste fall én oppdatering i Q for hver kant (8) 0/4/09
ijkstras algoritme valg av prioritetskø Vi skal gjøre følgende: : Konstuere prioritetskø 2: V antall extract-min fra køen : antall oppdateringer i køen (til lavere verdi) Sortert rray rray (Min-)Heap ibonacci Heap konstruer O(n log n) O(n) O(n) O(n) extract-min O() O(n) O(log n) O(log n) * decreasekey O(n) O() O(log n) O() * totalt V log V + V + * V V + V 2 + V + V log V + log V V + V log V + forenklet * V V 2 log V V log V + 0/4/09 4
ijkstras algoritme valg av prioritetskø Når vi sammenligner kjøretidene til dijkstras algoritme ved bruk av usortert array og min-heap V 2 log V ser vi at dersom nærmer seg V 2 vil det lønne seg å bruke usortert array. 0/4/09 5