Kortete veje Egenkaber for kortete veje Dijktra algoritme Kortete veje på DAG Kortete veje Egenkaber for kortete veje Dijktra algoritme Kortete veje på DAG Philip Bille Introduktion Kortete veje. Givet en orienteret, vægtet graf G og en knude, find kortete vej fra til alle knuder i G. Introduktion Kortete veje. Givet en orienteret, vægtet graf G og en knude, find kortete vej fra til alle knuder i G. Kortete veje træ. Repræentér kortete veje om et træ fra.
Anvendeler Google map, bilnavigation, rutning i netværk, kedulering, pipelining, Kortete veje Egenkaber for kortete veje Dijktra algoritme Kortete veje på DAG Kortete veje egenkaber Simplificerende antagele. Alle knuder kan nå fra. der finde altid (kortete) vej til en knude. Kortete veje egenkaber Lemma. Enhver delvej af en kortete vej er en kortete vej. Bevi. Modtridbevi. Kig på en kortete vej p fra til t betående af p, p og p. p p p u v t q Antag q er kortere en delvej p. Da er p, q og p en kortere vej fra til t end p.
Dijktra algoritme Kortete veje Egenkaber for kortete veje Dijktra algoritme Kortete veje på DAG Mål. Givet en orienteret og vægtet graf G med ikke-negative vægte og en knude, beregn kortete vej fra til alle andre knuder. Dijktra algoritme. Vedligeholder aftandetimat v.d for hver knude v = længde af kortete kendte vej til v fra. Opdaterer aftandetimater ved at afpænde (relax) kanter. RELAX(u,v) if (v.d > u.d + w(u,v)) v.d = u.d + w(u,v) Dijktra algoritme Sæt.d = og v.d = for alle knuder v V\{}. Opbyg et træ T fra. I hvert kridt, tilføj knude v med mindte aftandetimat til T. Afpænd alle kanter om v peger på.
Dijktra algoritme Sæt.d = og v.d = for alle knuder v V\{}. Opbyg et træ T fra. I hvert kridt, tilføj knude v med mindte aftandetimat til T. Afpænd alle kanter om v peger på. Opgave. Håndkør Dijktra algoritme fra knude på følgende graf. Dijktra algoritme Notation. δ(,v) er længden af den kortete vej fra til v. Lemma. Når aftandetimater opdatere med afpænding er v.d δ(,v) for alle knuder v. Bevi. Induktion over antallet af afpændinger. Dijktra algoritme Lemma. Dijktra algoritme beregner v.d = δ(,v) for alle knuder v. Bevi. Modtridbevi. Lad u være den førte knude valgt af algoritmen å u.d er forkert. Lad P være den kortete vej fra til u og lad (x,y) være førte kant der forlader S. Kig på tidpunkt hvor algoritmen tilføjer u til S: P Vi har: u. u.d y.d (alg. valgte u før y).. u.d > δ(,u) (u var forkert). x y Dijktra algoritme Implementation. Hvordan implementerer vi Dijktra algoritme? Udfordring. Find knude med mindte aftandetimat. Vi har: u.d > δ(,u) = w(p) w(p til x) + w(x,y) ( + def.) (P kåret af) = δ(,x) + w(x,y) (delvej af kortete vej er kortete vej) x S å (x,y) afpændt å: y.d x.d + w(x,y) = δ(,x) + w(x,y) (u er førte knude med forkert etimat å x.d = δ(,x)) u.d > δ(,x) + w(x,y) y.d i modtrid med.
Dijktra algoritme Dijktra algoritme Implementation. Vedligehold knuder med aftandetimat i prioritetkø. Nøgle af knude v = v.d. I hvert kridt: Find knude u med mindte aftandtandetimat = EXTRACT-MIN Afpænd kanter om u peger på med DECREASE-KEY. DIJKSTRA(G, ) for alle knuder v V v.d = v.π = null INSERT(P,v) DECREASE-KEY(P,,) while (P ) u = EXTRACT-MIN(P) for alle v om u peger på RELAX(u,v) RELAX(u,v) if (v.d > u.d + w(u,v)) v.d = u.d + w(u,v) DECREASE-KEY(P,v,v.d) v.π = u Tid. n EXTRACT-MIN n INSERT < m DECREASE-KEY Samlet tid med min-hob. O(n log n + n log n + m log n) = O(m log n) Dijktra algoritme Dijktra algoritme Theorem. Dijktra algoritme implementeret med en min-hob beregner kortete veje i O(m log n) tid. Grådighed. Dijktra algoritme er ekempel på en grådig algoritme. Prioritetkøer og Dijktra. Komplekitet af Dijktra algoritme afhænger af prioritetkø: n INSERT n EXTRACT-MIN < m DECREASE-KEY Prioritetkø INSERT EXTRACT-MIN DECREASE-KEY Total tabel O() O(n) O() O(n ) binær hob O(log n) O(log n) O(log n) O(m log n) Fibonacci hob O() O(log n) O() O(m + n log n) = amortieret køretid
Edger W. Dijktra Kortete veje Edger Wybe Dijktra (-) Dijktra algoritme. "A note on two problem in connexion with graph". Numeriche Mathematik,. Egenkaber for kortete veje Dijktra algoritme Andre bidrag. Grundlæggende reultater i programmering, ditribueret beregning, algoritmer, verifikation. Kortete veje på DAG Citater. Object-oriented programming i an exceptionally bad idea which could only have originated in California. The ue of COBOL cripple the mind; it teaching hould, therefore, be regarded a a criminal offence. APL i a mitake, carried through to perfection. It i the language of the future for the programming technique of the pat: it create a new generation of coding bum. Kortete veje på DAG Kortete veje på DAG Udfordring. Er det nemmere at beregne kortete veje på DAG? Lemma. Algoritme beregner v.d = δ(,v) for alle knuder v. DAG kortete veje algoritme. Behandl knuder i topologik orden. For hver knude v, afpænd alle kanter fra v. Virker ogå for negative kanter. Bevi. Induktion over topologik ortering af knuder v, v,, vn- Bai. v.d = = δ(v,v). Induktionkridt. Kig på vi for i >. Antag vj.d = δ(, vj) for j < i vi.d = min(vj.d + w(vj, vi)) hvor (vj, vi) er kant i G å j < i. = min(δ(, vj) + w(vj, vi)) (pga. induktionhypotee) = δ(, vi) (ingen veje til vi via enere knuder i topologik orden)
Kortete veje på DAG Implementation. Sorter knuder i topologik rækkefølge. Afpænd kanter ud af hver knude. Samlet tid. O(m + n). Kortete veje varianter Knuder. Enkelt kilde (ingle-ource): fra til alle andre knuder. Enkelt kilde, enkelt dræn (ingle-ource ingle-target): fra til t. Alle par (all pair): mellem alle par af knuder. Begrænninger på kantvægte. Ikke-negative vægte. Vilkårlige vægte. Euklidike vægte. Krede. Ingen krede. Ingen negative krede. Kortete veje Egenkaber for kortete veje Dijktra algoritme Kortete veje på DAG