1 Korteste veje. 2 Vægtede grafer I en vægtet graf har enhver kant tilknyttet en numerisk værdi, kaldet kantens vægt Vægte kan repræsentere afstande,

Slides:



Advertisements
Lignende præsentationer
Den danske befolknings syn på handicappedes rettigheder
Advertisements

VMS data Geografisk og tidsmæssig udvikling af indsatsen i tobisfiskeriet v/ dataspecialist Josefine Egekvist Sekretariat for myndighedsbetjening.
Atomer Et programmeret forløb. En måde at lære på.
Produktionsøkonomi Planteavl 2013
NemID og Fællesskema 2014 v/Signe Hansen Blegmand
Prospekt. Ideen •Casa della filosofia er navnet på en forening, der giver almin- delige mennesker mulighed for at have brugsret til et hus i Italien på.
1 Problemkompleksitet 2 Problemers kompleksitet En ineffektiv algoritme: køretiden vokser eksponentielt med input- størrelsen Et problem, der ikke kan.
v/ Professor Lars Ehlers, Aalborg Universitet
Velkommen hos Juvel A/S
Bolig selskabernes Landsforening– Almene lejeboliger - Maj/Juni Almene lejeboliger - Danmarkspanelet - Maj/Juni 2010.
SQL 1 DDL og DML.
Algoritmer og Datastrukturer 1 Merge-Sort [CLRS, kapitel 2.3] Heaps [CLRS, kapitel 6] Gerth Stølting Brodal.
1 Går fra at vil maksimere dækning til at minimere omkostning Det kender vi fra den anden bog Omkostningen er afstanden gange antal enheder der skal transporteres.
Planfejning.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Minimum Udspændende Træer (MST) [CLRS, kapitel 23]

Representations for Path Finding in Planar Environments.
HUSKESPIL – den lille tabel
Titel: Arial, fed, skriftstr. 20, mørkegrå. Tekst: Arial, normal, fed eller kursiv, skriftstr. 10, 12 og 14 til print – 16 og 18 til projektor – mørkegrå.
 2 3  3 =  83  43  53  63  73  93  10 4.
1 Bevisteknikker. 2 Bevisteknikker (relevant både ved design og verifikation) Teorem: Der findes uendeligt mange primtal Bevis: Antag at der findes et.
Pleje og Sundhed Gennemførte719 Inviterede895 Svarprocent80% FREDERICIA KOMMUNE MTU og Psykisk APV 2012 Rapportspecifikationer.
1 UNION-FIND. 2 inddata: en følge af heltalspar (p, q); betydning: p er “forbundet med” q uddata: intet, hvis p og q er forbundet, ellers (p, q) Eksempel.
1 Powerpointserie om In-line færdiggørelse ved Heatsettrykning Avisrotation Magasindybtryk Den Grafiske Højskole.
Induktion og rekursion
GP12, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 12 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi.
Niels Pein Regelopdatering Niels Pein Udpluk af nyhederne Definitioner Regler Decisions.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
1 Algoritme til at løse knude P-center problemet Algoritmen brugte set covering problemet Virker derfor kun til knude problemer Vi vil alligevel bruge.
Datastrukturer og Collections Rasmus D. Lehrmann DM
ETU 2008 | Elevtilfredshedsundersøgelse Erhvervsskolen Nordsjælland HTX (Teknisk Gymnasium) - Hillerød Baseret på 313 besvarelser.
1 Borgerpanelet i Silkeborg Kommune.
Algoritmer og Datastrukturer 1 Merge-Sort [CLRS, kapitel 2.3] Heaps [CLRS, kapitel 6] Gerth Stølting Brodal.
1 Maksimal strømning. 2 Strømningsnetværk Et strømningsnetværk (eller blot et netværk) N består af En vægtet, orienteret graf G med ikke-negative heltallige.
Grafer og Algoritmer Rasmus D. Lehrmann DM
1 Sortering I elementære metoder. 2 Plan Terminologi Elementære metoder til sortering -sortering ved udvælgelse -sortering ved indsættelse -Shellsort.
Matematik B 1.
Claus Brabrand, ITU, Denmark Mar 10, 2009EFFECTIVE JAVA Effective Java Presentation Workshop Claus Brabrand [ ] ( “FÅP”: First-year Project.
Fall 2008NOEA - Computer Science1 Lektion 8: Læringsmål Redegøre for begreber og terminologi i forbindelse med grafer. Redegøre for forskellige anvendelser.
1 Vi ser nu på en general graf Men antager at alle afstande er heltallige (Det er ikke så restriktivt) Algoritmen leder efter den mindst mulige dækningsdistance.
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
Grunde til at jeg elsker dig
Januar 2009 MandagTirsdagOnsdagTorsdagFredagLørdagSøndag Uge 2. Anette Ø. Kl Tina H. Lone M. 6 Kl Britt H. 7 Kl Vinnie G. Gerda.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
1 Design, analyse og verifikation. 2 Design Bevisteknikker Design ved hjælp at matematisk induktion Analyse O-notation Logaritmer Binær søgning Verifikation.
1 Grafalgoritmer I. 2 Plan Grafer - definition - anvendelser - terminologi - eksempler på grafproblemer Grafgennemgang - dybde-først-gennemgang - bredde-først-gennemgang.
Grafer.
1 Anvendelser III Grafer. 2 Terminologi Repræsentation Traversering Korteste vej Topologisk sortering Problemkompleksitet og afgørlighed Plan.
Grafalgoritmer II.
Slide Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 15 Algorithms for Query Processing and Optimization.
1 Sortering. 2 Sortering ved fletning (merge-sort) 7 2 | 9 4  | 2  2 79 | 4   72  29  94  4.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Algoritmer og Datastrukturer 1 Dynamisk Rang & Interval Træer [CLRS, kapitel 14] Gerth Stølting Brodal.
Algoritmer og Datastrukturer 2 Korteste Veje [CLRS, kapitel 24, ] Gerth Stølting Brodal Aarhus Universitet.
1 Kap. 4, Jordens Tyngdefelt = Torge, 2001, Kap. 3. Tyngdekraftens retning og størrelse g (m/s 2 ) Acceleration Tyngdepotentialet (W): evene til at udføre.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Minimum Udspændende Træer (MST) [CLRS, kapitel 23]
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Minimum Udspændende Træer (MST) [CLRS, kapitel 23]
1 Center problems Placer et givet antal nye faciliteter Alt efterspørgsel skal dækkes Dækningsdistancen skal minimeres.
1 Anvendelser III Grafer. 2 Terminologi Repræsentation Traversering af grafer Korteste vej Topologisk sortering Problemkompleksitet og afgørlighed Plan.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Korteste Veje [CLRS, kapitel 24]
Grundlæggende programmering Forår 2002
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Minimum Udspændende Træer (MST) [CLRS, kapitel 23]
Single-Source Shortest Path i ekstern hukommelse Jonas Thomsen Ph.d. studerende Kvalifikationseksamen 27. september 2004.
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Korteste Veje [CLRS, kapitel 24, ]
Algoritmer og Datastrukturer 2 Gerth Stølting Brodal Minimum Udspændende Træer (MST) [CLRS, kapitel 23]
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Præsentationens transcript:

1 Korteste veje

2 Vægtede grafer I en vægtet graf har enhver kant tilknyttet en numerisk værdi, kaldet kantens vægt Vægte kan repræsentere afstande, omkostninger, o.s.v. Eksempel: I en flyrutegraf repræsenterer vægten af en kant afstanden imellem to lufthavne ORD PVD MIA DFW SFO LAX LGA HNL

3 Korteste vej Givet en vægtet graf og to knuder u og v ønsker vi at finde en vej imellem u og v, der har minimal samlet vægt Længden af en vej er summen af dens kantvægte Anvendelser Routing af internetpakker Ruteplanlægning (bil/fly) Eksempel: Find den korteste vej imellem Honolulu og Providence ORD PVD MIA DFW SFO LAX LGA HNL

4 Egenskaber ved korteste vej Egenskab 1: En delvej af den korteste vej er selv en korteste vej Egenskab 2: Der findes et træ af korteste veje fra en startknude til alle andre knuder Eksempel: Træ af korteste veje fra Honolulu ORD PVD MIA DFW SFO LAX LGA HNL

5 Dijkstra’s algoritme Afstanden for en knude v fra en knude s er længden af en korteste vej imellem s og v Dijkstra’s algoritme beregner afstandene for alle knuder fra en given startknude s Forudsætninger: grafen er sammenhængende kanterne er ikke-orienterede kantvægtene er ikke-negative Vi lader en “sky” af knuder vokse, begyndende med s og slutteligt dækkende alle knuder Vi gemmer for hver knude v en etikette d(v), der repræsenterer afstanden for v fra s i den delgraf, der består af skyen og dens tilstødende knuder Vi udvider skyen med den knude, u, uden for skyen, som har mindst afstand, d(u) Vi opdaterer etiketterne for de knuder uden for skyen, der er naboer til u

6 Kant-relaxation Betragt en kant e = (u,z), hvor u er den knude, der senest er blevet tilføjet skyen z ikke er i skyen En relaxation med kanten e opdaterer afstanden d(z), som følger: d(z)  min{d(z), d(u) + weight(e)} d(z) = 75 d(u) = z s u e d(z) = 60 d(u) = z s u e

7 Eksempel CB A E D F  C B A E D F C B A E D F C B A E D F

8 Eksempel (fortsat) CB A E D F CB A E D F

9 Dijkstra’s algoritme En prioritetskø indeholder de knuder, der er uden for skyen Nøgle: afstand Element: knude Locator-baserede metoder: insert(k,e) returnerer en locator replaceKey(l,k) ændrer nøglen for et emne For hver knude v gemmes to etiketter: afstand, d(v) locator i prioritetskøen Algorithm DijkstraDistances(G, s) Q  new heap-based priority queue for all v  G.vertices() if v  s setDistance(v, 0) else setDistance(v,  ) l  Q.insert(getDistance(v), v) setLocator(v,l) while  Q.isEmpty() u  Q.removeMin() for all e  G.incidentEdges(u) { relax edge e } z  G.opposite(u,e) r  getDistance(u)  weight(e) if r  getDistance(z) setDistance(z,r) Q.replaceKey(getLocator(z),r)

10 Analyse Grafoperationer: Metoden incidentEdges kaldes en gang for hver knude Etiketteoperationer: Vi sætter eller henter afstands- og locator-etiketterne for en knude z O(deg(z)) gange. Hver sådan operation tager O(1) tid Prioritetskøoperationer: Hver knude indsættes en gang i og fjernes en gang fra prioritetskøen Hver indsættelse og fjernelse tager O(log n) tid Nøglen for en knude w i prioritetetskøen ændres højst deg(w) gange, hvor hver ændring tager O(log n) tid Dijkstra’s algoritme kører i O((n  m) log n) tid, hvis grafen er repræsenteret ved en nabolistestruktur (husk, at  v deg(v)  2m) Køretiden kan også udtrykkes som O(m log n), da grafen er sammenhængende

11 Klassedeling af knuder I algoritmen skelnes imellem 3 typer af knuder: (1) Træknuder (knuder i skyen) (2) Randknuder (knuder, der støder op til træknuder) (3) Usete knuder (alle andre knuder) Træknuder Rand Usete

12 Bedste-først-søgning (priority-first search) Anvend en prioritetskø, pq (i stedet for en stak eller en kø) Sæt alle knuders status til UNSEEN Læg en knude i pq og sæt dens status til FRINGE Så længe pq ikke er tom: Fjern den “bedste” knude, u, fra pq Sæt u’s status til TREE For enhver af u’s naboknuder: hvis UNSEEN, så læg den i pq og sæt dens status til FRINGE, hvis FRINGE, så opdater dens prioritet

13 Udvidelse Vi kan udvide Dijkstra’s algoritme til at returnere et træ af korteste veje imellem startknuden og alle andre knuder For hver knude gemmer vi en tredje etikette, der indeholder forældrekanten i det aktuelt korteste-vej-træ Algorithm DijkstraShortestPathsTree(G, s) … for all v  G.vertices() … setParent(v,  ) … for all e  G.incidentEdges(u) { relax edge e } z  G.opposite(u,e) r  getDistance(u)  weight(e) if r  getDistance(z) setDistance(z,r) setParent(z,e) Q.replaceKey(getLocator(z),r)

14 Hvorfor Dijkstra’s algoritme virker Dijkstra’s algoritme er baseret på den grådige metode Den tilføjer knuder efter voksende afstand (mindste-først) Antag at algoritmen ikke fandt alle korteste afstande. Lad F være den første forkerte knude, algoritmen behandlede Dengang den foregående knude, D, på den rigtige korteste vej blev betragtet, var dens afstand korrekt Men en relaxation med kanten (D,F) blev foretaget på dette tidspunkt! Derfor kan F’s afstand ikke være forkert, så længe d(F) ≥ d(D) Der kan altså ikke være nogen forkert knude CB A E D F

15 Hvorfor algoritmen ikke virker for negative kantvægte C’s korrekte afstand er 1, men C er allerede i skyen med d(C)=5 Hvis en knude med en nabokant med negativ vægte skulle tilføjes sent til skyen, ville det spolere afstandene for de knuder, der allerede er i skyen C B A E D F

16 Bellman-Ford’s algoritme Virker selv for negative vægte Vi må forudsætte, at kanterne er orienterede (ellers kunne vi få en cykel med negativ vægt) Iteration i finder alle korteste veje fra s, der bruger i kanter Køretid: O(nm) Kan udvides til at afsløre en cykel med negativ vægt, hvis en sådan findes Hvordan? Algorithm BellmanFord(G, s) for all v  G.vertices() if v = s setDistance(v, 0) else setDistance(v,  ) for i  1 to n-1 do for each e  G.edges() { relax edge e } u  G.origin(e) z  G.opposite(u,e) r  getDistance(u) + weight(e) if r < getDistance(z) setDistance(z,r)

17 Bellman-Ford eksempel  0    Knuder er mærket med deres afstand, d(v)  -2  0     

18 DAG-baseret algoritme Virker selv for negative vægte Bruger topologisk sortering Bruger ingen specielle datastrukturer Er meget hurtigere end Dijkstra’s algoritme Køretid: O(n+m) Algorithm DagDistances(G, s) for all v  G.vertices() if v  s setDistance(v, 0) else setDistance(v,  ) Perform a topological sort of the vertices for u  1 to n do {in topological order} for each e  G.outEdges(u) { relax edge e } z  G.opposite(u,e) r  getDistance(u)  weight(e) if r  getDistance(z) setDistance(z,r)

19  0      0      (2 iterationer) DAG eksempel Knuder er mærket med deres afstand, d(v)

20 Alle korteste veje Bestem den korteste vej imellem ethvert par af knuder i en vægtet orienteret graf G Vi kan udføre n kald af Dijkstra’s algoritme (hvis der ikke er negative kanter), hvilket tager O(nm log n) tid Tilsvarende ville n kald af Bellman-Ford’s algoritme tage O(n 2 m) tid Vi kan opnå O(n 3 ) tid ved brug af dynamisk programmering (i lighed med Floyd-Warshall’s algoritme) Algorithm AllPair(G) {assumes vertices 1,…,n} for all vertex pairs (i,j) if i = j D 0 [i,i]  0 else if (i,j) is an edge in G D 0 [i,j]  weight of edge (i,j) else D 0 [i,j]  +  for k  1 to n do for i  1 to n do for j  1 to n do D k [i,j]  min{D k-1 [i,j], D k-1 [i,k]+D k-1 [k,j]} return D n k j i Bruger kun knuder, der er nummeret 1, …, k-1 Bruger kun knuder, der er nummeret 1, …, k (beregn vægten af denne kant) Bruger kun knuder, der er nummeret 1, …, k-1

21 Mindste udspændende træer

22 Mindste udspændende træ Udspændende delgraf Delgraf af en graf G, der indeholder all G’s knuder Udspændende træ Udspændende delgraf, der et et (frit) træ Mindste udspændende træ Udspændende træ i en vægtet graf med mindst mulig samlet vægt Anvendelser: Kommunikationsnetværk Transportnetværk ORD PIT ATL STL DEN DFW DCA

23 Cykelegenskab Cykelegenskab: Lad T være et mindste udspændende træ for en vægtet graf G Lad e være en kant i G, som ikke er i T, og lad C være den cykel, der fås ved at tilføje e til T For enhver kant f i C gælder da, at weight(f)  weight(e) e C f C e f Erstatning af f med e giver et bedre udspændende træ Bevis (ved modstrid): Hvis weight(f) > weight(e), kan vi opnå et udspændende med mindre vægt ved at erstatte e med f

24 Opdelingsegenskab Opdelingsegenskab: Betragt en opdeling af G’s knuder i to delmængder U og V Lad e være en kant med mindst mulig vægt, der forbinder U og V Der eksister da et mindste udspændende træ, der indeholder e e f UV UV e f Erstatning af f med e giver et andet mindste udspændende træ Bevis: Lad T være et mindste udspændende træ for G. Hvis T ikke indeholder e, betragt da den cykel C, der opnås ved at tilføje e til T, og lad f være en kant, der forbinder U og V. På grund af cykelegenskaben gælder, at weight(f)  weight(e). Men så må weight(f) = weight(e). Vi kan opnå et andet mindste udspændende træ ved at erstatte f med e

25 Prim-Jarnik’s algoritme (1957) Ligner Dijkstra’s algoritme (for en sammenhængende graf) Vi vælger en vilkårlig knude s og lader det mindste udspændende træ vokse som en sky af knuder, startende fra s For hver knude v lagrer vi en etikette d(v) = den mindste vægt for de kanter, der forbinder v med en knude i skyen I hvert trin tilføjer vi til skyen den knude u uden for skyen, der har den mindste afstandsetikette, d(u), og opdaterer etiketterne for de knuder, der er naboer til u d(z) = 20 z s u e d(z) = z s u e

26 Prim-Jarnik’s algoritme (forsat) En prioritetskø indeholder de knuder, der er uden for skyen Nøgle: afstand Element: knude Locator-baserede metoder: insert(k,e) returnerer en locator replaceKey(l,k) ændrer nøglen for et emne For hver knude v gemmes tre etiketter: afstand, d(v) locator i prioritetskøen forældrekanten Algorithm PrimJarnikMST(G) Q  new heap-based priority queue s  a vertex of G for all v  G.vertices() if v  s setDistance(v, 0) else setDistance(v,  ) setParent(v,  ) l  Q.insert(getDistance(v), v) setLocator(v,l) while  Q.isEmpty() u  Q.removeMin() for all e  G.incidentEdges(u) z  G.opposite(u,e) r  weight(e) if r  getDistance(z) setDistance(z,r) setParent(z,e) Q.replaceKey(getLocator(z),r)

27 Eksempel  B D C A F E  B D C A F E B D C A F E  7 B D C A F E  7

28 Eksempel (fortsat) B D C A F E B D C A F E

29 Analyse Grafoperationer: Metoden incidentEdges kaldes en gang for hver knude Etiketteoperationer: Vi sætter eller henter afstands- og locator-etiketterne for en knude z O(deg(z)) gange. Hver sådan operation tager O(1) tid Prioritetskøoperationer: Hver knude indsættes en gang i og fjernes en gang fra prioritetskøen Hver indsættelse og fjernelse tager O(log n) tid Nøglen for en knude w i prioritetetskøen ændres højst deg(w) gange, hvor hver ændring tager O(log n) tid Prim-Jarnik’s algoritme kører i O((n  m) log n) tid, hvis grafen er repræsenteret ved en nabolistestruktur (husk, at  v deg(v)  2m) Køretiden kan også udtrykkes som O(m log n), da grafen er sammenhængende

30 Kruskal’s algoritme (1956) En prioritetskø indeholder kanterne Nøgle: vægt Element: kant Ved afslutningen af algoritmen står vi tilbage med (1) en sky, der omfatter et mindste udspændende træ (2)et træ, T, der er det søgte mindste udspændende træ Algorithm KruskalMST(G) for each vertex V in G do define a Cloud(v) of {v} let Q be a priority queue. Insert all edges into Q using their weights as the key T   while T has fewer than n-1 edges do edge e = Q.removeMin() Let u, v be the endpoints of e if Cloud(v)  Cloud(u) then Add edge e to T Merge Cloud(v) and Cloud(u) return T

31 Datastruktur til Kruskal’s algoritme Algoritmen vedligeholder en skov af træer. En kant accepteres, hvis den forbinder to forskellige træer Vi har brug for en datastruktur, der vedligeholder en opdeling, d.v.s. en samling af disjunkte mængder med følgende to operationer: find(u): returner den mængde, der indeholder u union(u,v): erstat mængderne, som u og v tilhører med deres foreningsmængde u v

32 Repræsentation af en opdeling Hver mængde repræsenteres ved en sekvens Hvert element har en reference til den mængde, elementet tilhører Operationen find(u) tager O(1) tid og returnerer den mængde, som u er medlem af I operationen union(u,v), flytter vi elementer fra den mindste mængde til sekvensen for den største mængde og opdaterer deres referencer Tiden for operationen union(u,v), er min(n u,n v ), hvor n u og n v er størrelserne af mængderne, der indeholder u og v Hver gang et element flyttes, placeres det i en mængde af mindst den dobbelte størrelse Derfor vil et element højst blive flyttet log n gange

33 Opdelingsbaseret implementation En opdelingsbaseret implementation af Kruskal’s algoritme udfører sammenføjning af skyer ved kald af union og afgørelse af mængdetilhørsforhold ved kald af find Algorithm Kruskal(G): Input: A weighted graph G. Output: An MST T for G. Let P be a partition of the vertices of G, where each vertex forms a separate set Let Q be a priority queue storing the edges of G, sorted by their weights Let T be an initially-empty tree while Q is not empty do (u,v)  Q.removeMinElement() if P.find(u) != P.find(v) then Add (u,v) to T P.union(u,v) return T Køretid: O((n+m)log n)

34

35 Eksempel

36 Eksempel

37 Eksempel

38 Eksempel

39 Eksempel

40 Eksempel

41 Eksempel

42 Eksempel

43 Eksempel

44 Eksempel

45 Eksempel

46 Eksempel

47

48 Baruvka’s algoritme (1926) Ligner Kruskal’s algoritme. Baruvka’s algoritme udvider mange “skyer” på en gang Hver iteration af while-løkken halverer antallet af sammenhængende komponenter Køretiden er O(m log n) Algorithm BaruvkaMST(G) T  V {just the vertices of G} while T has fewer than n-1 edges do for each connected component C in T do Let edge e be the smallest-weight edge from C to another component in T if e is not already in T then Add edge e to T return T

49

50 Eksempel

51