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.
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 Kortete veje Simplificerende antagele. Alle knuder kan nå fra. der finde altid (kortete) vej til en knude. Egenkaber for kortete veje Dijktra algoritme Kortete veje på DAG
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. Kortete veje 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. Egenkaber for kortete veje Dijktra algoritme Kortete veje på DAG Dijktra algoritme 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. 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å. 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å. 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 Vi har: u.d > δ(,u) = w(p) ( + def.) w(p til x) + w(x,y) (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 Implementation. Hvordan implementerer vi Dijktra algoritme? Udfordring. Find knude med mindte aftandetimat. 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. Dijktra algoritme Dijktra algoritme 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 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. Tid. n EXTRACT-MIN n INSERT < m DECREASE-KEY Samlet tid med min-hob. O(m log n)
Dijktra algoritme Edger W. Dijktra Prioritetkøer og Dijktra. Komplekitet af Dijktra algoritme afhænger af prioritetkø: n INSERT n EXTRACT-MIN < m DECREASE-KEY Edger Wybe Dijktra (-) 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 Dijktra algoritme. "A note on two problem in connexion with graph". Numeriche Mathematik,. Andre bidrag. Grundlæggende reultater i programmering, ditribueret beregning, algoritmer, verifikation. 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 Udfordring. Er det nemmere at beregne kortete veje på DAG? Kortete veje DAG kortete veje algoritme. Behandl knuder i topologik orden. For hver knude v, afpænd alle kanter fra v. Virker ogå for negative kanter. Egenkaber for kortete veje Dijktra algoritme Kortete veje på DAG
Kortete veje på DAG Lemma. Algoritme beregner v.d = δ(,v) for alle knuder v. Kortete veje på DAG Implementation. Sorter knuder i topologik rækkefølge. Afpænd kanter ud af hver knude. Samlet tid. O(m + n). Theorem. Vi kan beregne kortete veje i DAG i O(m + n) tid. 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 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. Kortete veje Egenkaber for kortete veje Dijktra algoritme Kortete veje på DAG Krede. Ingen krede. Ingen negative krede.