© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 8-9 Relationer, prioritetsköer, grafer och grafalgoritmer.

Slides:



Advertisements
Liknande presentationer
Talföljder formler och summor
Advertisements

© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
2D1311 Programmeringsteknik med PBL
Algoritmer och data strukturer -Länkade listor
PowerPoint av Bendik S. Søvegjarto Koncept, text och regler av Skage Hansen.
Logikprogrammering Ons, 25/9
Föreläsning 7 Analys av algoritmer T(n) och ordo
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Predicting protein folding pathways.  Mohammed J. Zaki, Vinay Nadimpally, Deb Bardhan and Chris Bystroff  Artikel i Bioinformatics 2004.
Tar fram v ur kön v = R(true,0,Null) och q = (). d = 0 Leta sedan fram grannarna = {A, B} För granne A: newDist = 0+4 = 4. Ej besökt. q = (A(true,4,R))
DoA VT -07 © Anders Broberg, Lena Kallin Westin, P = ((C,F,3), (B,D,3), (C,G,4),(A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8)) A.
ABC EFG IJK Markera noden som besökt och lägg in den i kön. q = (A) Ta fram första elementet (A), q = ( ) Ta sedan fram grannmängden till A S = {B, F,
ABC EFG IJK Markera noden som besökt. Grannar = {E, F, B} E ej besökt, rekursivt anrop. depthFirst(A) * Djupet först i en oriktad graf.
Växjö 21 april -04Språk & logik: Kontextfria grammatiker1 DAB760: Språk och logik 21/4: Kontextfria 10-12grammatiker Leif Grönqvist
Grundläggande programmering
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 6 Asymtotisk analys.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 7 Träd.
En PowerPoint om PowerPoint
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Pathfinding. –Vad är det? –Sökning från A till B.
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Vektorer (klassen Vector) Sortering
Algoritmer och datastrukturer
Exder EPC. Exder EPC Välkommen! I det här bildspelet går vi igenom hur man lägger upp nya artiklar samt skickar artikelinformation. Du bläddrar framåt.
1.Välj en nod vilken som helst och markera den som öppen. Låt den bli rot. A R B F C D E G
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Grundläggande programmering
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Bredden-först exempel ABCD EFGH IJKL MNOP = Obesökt.
En mycket vanlig frågeställning gäller om två storheter har ett samband eller inte, många gånger är det helt klart: y x För en mätserie som denna är det.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 11 Trie, Sökning och Sökträd.
Logikprogrammering 21/10 Binära träd
Datastrukturer och algoritmer
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Initiera nätverket med nollflöde. Kapaciteterna i svart ovan bågarna och flödet i grönt nedan bågarna. Skicka igenom ett enhetsflöde genom nätverket. Flödesvägen.
Datastrukturer och algoritmer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 13.
Graph och graph-algoritmer. Några enkla graph teorier Hur IP trafik hittar destinationen i Internät ? GPS-system ? Sociala nätverk. Vanligaste frågeställningar:
Föreläsning 9 Logik med tillämpningar Innehåll u Semantiska tablåer i predikatlogiken u Klausulform u Herbrandmodeller u Kapitel 3.5,
Datastrukturer och algoritmer VT08 P = ((C,F,3), (B,D,3), (C,G,4),(A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8)) A R B F C D E G
Logikprogrammering 23/10 Binära träd In- och uthantering David Hjelm.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 9 Grafalgoritmer.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 10.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Datastrukturer och algoritmer
NÄTVERKSPROTOKOLL Föreläsning INNEHÅLL - Routingprotokoll - Interior gateway protocols - Exterior gateway protocols - Link state routing.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 8 Relationer, prioritetsköer och grafer.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
Växjö 14 april -04Språk & logik: Finita automater1 DAB760: Språk och logik 14/4:Finita automater Leif Grönqvist Växjö Universitet.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Hash Tabeller och Graf.
A R B F C D E G Välj en nod vilken som helst och markera den som öppen. Låt den bli rot.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Relationer, prioritetsköer, grafer och grafalgoritmer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 8-9 Relationer, prioritetsköer, grafer och grafalgoritmer

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Innehåll  Relationer  Snabb genomgång, resten läses på egen hand.  Prioritetsköer  Modell, organisation, konstruktioner, implementationer  Grafer  Modell, organisation, konstruktioner, implementationer  Grafalgoritmer  Kapitel 16, och 17 i kursboken

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Relationer  En instans av datatypen Relationer består av alla de relationer (relationsobjekt) som kan bildas ur en domänbas för instansen.  ”Kurstillfällen” är en relation över domänmängden (Kurskoder, År, Termin, Del av termin) med element som (TDBA36, 03, VT, 1) och (TDBA47, 03, VT, 2)  ”Läsperioder” är en annan relation över samma mängd med element som (03, VT, 1), (98, HT, 3) etc.  En relationsdatatyp kan alltså ha relationsobjekt med olika aritet.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Modell av Relation  Ofta beskriver man en relation med hjälp av en tabell över de element som ingår i relationen.  Relationen Kursansvar: Anders BrobergTDBA36 Johan EliassonTDBA63 Lena Kallin WestinTDBA47 Helena LindgrenTDBD06 ……

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Tillämpningar av Relation  Relationsdatabaser  Vilka lärare undervisar på våren? LärareKurskod Anders BrobergTDBA36 Johan EliassonTDBA63 Lena Kallin WestinTDBA47 Helena LindgrenTDBD06 …… KurskodÅrTerminPeriod TDBA3603VT1 TDBA6303VT1 TDBA4703VT2 TDBD0602HT3 …………

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Prioritetskö  Modell: Patienterna på en akutmottagning, man kommer in i en viss tidsordning men behandlas utifrån en annan ordning.  Organisation: En mängd vars grundmängd är linjärt ordnad av en prioritetsordning.  Avläsningar och borttagningar görs endast på de element som har högst prioritet.  Andra mängdoperationer är inte aktuella

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Specifikation av prioritetskö  Gränsytan Pqueue(val, R): Empty()  Pqueue(val, R) Insert(v:val, p:Pqueue(val, R))  Pqueue(val, R) Isempty(p:Pqueue(val, R))  Bool Inspect-first (p:Pqueue(val, R))  val Delete-first (p:Pqueue(val, R))  Pqueue(val, R)  R är relationen för prioritetsordningen.  Ibland slås de två sista metoderna ihop.  Ytan ovan förutsätter statisk prioritet. Vill man ha dynamisk prioritet måste en update- metod finnas.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Specifikation av prioritetskö  Man kan också tänka sig att prioritetskön tar element (val) som består av ett värde och en prioritet.  Förra fallet antog man att värde = prioritet  Gränsytan kan varieras på flera sätt  update har vi redan nämnt  Vi kan också vilja finna det högsta/minsta prioritetsvärdet i kön

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Stack och kö är specialfall av prioritetskön!  Om R är den totala relationen, dvs gäller för alla par av värden blir prioritetskön en stack.  Om R är den tomma relationen, dvs inte gäller för några par av värden, blir det en kö.  Dessutom:  Om R är en strikt partiell ordning, som ”>”, kommer lika element behandlas som en kö.  Om R är icke-strikt, som ”≥” behandlas lika element som en stack. Se axiomen på s 294!

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Konstruktioner av Prioritetskö  Man utgår ofta från konstruktioner av Mängd eller Lexikon  Men de har vi inte stött på än…  Lista, ej sorterad  Insert O(1), Delete-first O(n)  Lista, sorterad  Insert O(n), Delete-first O(1)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Konstruktioner av Prioritetskö  Heap/Hög – ett partiellt sorterat binärt träd  Etiketterna är sorterade efter en relation R så att a är förälder till b endast om a är före b i ordningen som ges av R.  Insättningar och borttagningar görs så att trädet hålls komplett.  Insert O(log n), Delete-first O(log n) Se figur och s 296!

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Tillämpningar  Operativsystem som fördelar jobb mellan olika processer  Enkelt sätt att sortera något.  Stoppa in allt i en prioritetskö och plocka ut det igen.  Hjälpmedel vid traversering av graf  Jmfr att stack och kö används vid traversering av träd.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Graf  Modell:  Vägkarta med enkelriktade gator utritade.  Tillämpningar  Signaturdiagrammen  Elektroniska kretsar  Nätverk (gator, flygrutter, kommunikation)  Neurala nätverk  … Se figur 17.1 s 337 och 17.3 s 340!

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Mängorienterad specifikation (vanlig inom matematiken)  En graf G = (V, E) består av  V : en mängd av noder (vertices)  E : en mängd av bågar (edges) som binder samman noderna i V. oEn båge e = (u, v) är ett par av noder. ab c de V = {a, b, c, d, e} E = {(a,b), (a,c), a,d), (b,e), (c,d), (c,e), (d,e)}

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Navigeringsorienterad specifikation  En graf är en mängd med noder där man till varje nod associerar en grannskapsmängd av noder som kallas grannar.  Alla noder tillhör samma typ  Alla ordnade par av en godtycklig nod och en av noderna i dess grannskapsmängd utgör en båge.  Denna specifikation passar ofta bättre i algoritmer eftersom de förutsätter effektiva navigeringsoperationer.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Riktade/oriktade grafer  Oriktade grafer  Bågen är en mängd av två noder. Noderna är grannar till varandra.  Gradtalet = Antalet bågar till grannar (eller sig själv)  Riktade grafer  Bågen är ordnade par av noder.  Gradtalet indelas i oIngradtalet = antalet bågar som går till noden oUtgradtalet = antalet bågar som startar i noden och går till en annan nod. ab c de ab c de

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Bokens informella specifikation: Empty – konstruerar en tom graf utan noder och bågar Insert-node(v, g) – sätter in noden v i grafen g Insert-edge(e, g) – sätter in en båge e i grafen g. Det förutsätts att noderna finns i grafen Isempty(g) – testar om grafen g är tom, dvs utan noder Has-no-edges(g) – testar om grafen g saknar bågar Choose-node(g) – väljer ut en nod ur grafen g Neighbours(v, g) – mängden av alla grannar till v i grafen g Delete-node(v, g) – tar bort noden v ur grafen g, förutsatt att v inte ingår i någon båge Delete-edge(e, g) – tar bort bågen e ur grafen g

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Terminologi  Väg/stig (path): En sekvens av noder v 1, v 2, …, v n så att v i och v i+1 är grannar.  I figuren ovan, a, b, e, c  Enkel väg (simple path): Inga noder förekommer två gånger i vägen.  Cykel (cycle): En enkel väg där den sista noden i sekvensen är densamma som den första. ab c de

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Terminologi  Sammanhängande (connected) graf  Varje nod har en väg till varje annan nod.  Delgraf (subgraf) en delmängd av noderna och kanterna som formar en graf.  Sammanhängande komponenter  En sammanhängande subgraf  Grafen uppe till höger har två sammanhängande komponenter. ab c de ab c de

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Connectivity (nåbarhet)  Låt n = antalet noder och m = antalet bågar.  En komplett graf (complete graph) får man när alla noder är grannar till alla andra.  I en komplett oriktad graf är m = n(n-1)/2  För ett träd gäller m = n-1  Om m ≥ n-1 så är grafen sammanhängande ab dc m=5, n =6 m=6, n =4 ab c de m=3, n =5

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Digraph och DAGs  DiGraph = Directed graph  dvs riktad graf  kan vara sammanhängande (dvs vägar finns från alla till alla noder)  kan ha sammanhängande komponenter  DAG = Directed Acyclic Graf  dvs, en riktad graf utan cykler ab c de ab c de

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Mer grafer…  Viktad graf  En graf där bågarna har vikter  Multigraf  Tillåtet med flera bågar mellan två noder. Dessa bågar har då olika egenskaper som måste lagras.  Ordnad graf har inbördes ordning mellan grannarna till en nod.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Konstruktion av grafer  Förbindelsematris  Bågarna representeras av ettor i en matris.  Rad 1 visar vilka bågar man kan nå från a.  Kolumn 3 visar från vilka noder det kommer bågar till c. + Enkel att implementera och passar när man har siffror på noder och bågar. -Matrisen kan bli stor och gles och kräva specialtrick ab c de

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Konstruktion av grafer  Graf som fält av lista.  Listan är grannskapslistan.  Man utgår att det finns minst en båge från varje nod (Fält) men inte att går en båge från varje nod till varje annan nod (därför Lista). + Inte lika utrymmeskrävande som en gles matris. Utrymmet = O(n+m) - Fixt antal noder ab c de a b c d e c c c b de e

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Grafalgoritmer  Traversering  Bredden-först och djupet-först  Konstruera ett (minsta) uppspännande träd  Finna vägarna från en nod till alla andra noder  Kortaste vägen mellan två noder  Finna maximala flödet  Finna det maximala flödet mellan två noder

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Djupet-först-traversering  Man besöker utgångsnoden och sedan dess grannar djupet-först rekursivt.  Undersöka en labyrint genom att markera de vägar man gått med färg.  Om grafen innehåller cykler finns det risk för oändlig traversering  Löses genom att hålla reda på om noden är besökt eller ej. Om noden redan besökt görs ingen rekursivt anrop.  Endast de noder man kan nå från utgångsnoden kommer att besökas.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Djupet-först-algoritm: Algoritm depthFirst(Node n, Graph g) input: A node n in a graph g to be traversed visited(n, g) // Marks the node as visited neighbourSet  neighbours(n, g); for each neighbour in neighbourSet do if not isVisited(neighbour) depthFirst(neighbour, g)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Markera noden som besökt. Grannar = {E, F, B} E ej besökt, rekursivt anrop. depthFirst(A) *

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Markera noden som besökt. Grannar = {I, F, A} I ej besökt, rekursivt anrop. * depthFirst(E) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Markera noden som besökt. Grannar = {J, F, E} J ej besökt, rekursivt anrop. * depthFirst(E) depthFirst(I) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Markera noden som besökt. Grannar = {G, I} G ej besökt, rekursivt anrop. * depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Markera noden som besökt. Grannar = {C, K} C ej besökt, rekursivt anrop. * depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(A) depthFirst(G)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Markera noden som besökt. Grannar = {B, G} B ej besökt, rekursivt anrop. * depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(G) depthFirst(C) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Markera noden som besökt. Grannar = {A, F, C} A redan besökt F ej besökt, rekursivt anrop. * depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(G) depthFirst(C) depthFirst(B) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Markera noden som besökt. Grannar = {B, A, E, I} Alla redan besökta. ABC EFG IJK * depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(G) depthFirst(C) depthFirst(B) depthFirst(F) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Nod B: Grannar = {A, F, C} Alla redan besökta ABC EFG IJK * depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(G) depthFirst(C) depthFirst(B) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK * Nod C: Grannar = {B, G} Alla redan besökta depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(G) depthFirst(C) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Nod G: Grannar = {C, K} K ej besökt, rekursivt anrop. * depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(G) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 depthFirst(K) ABC EFG IJK Markera noden som besökt. Grannar = {G} G redan besökt. * depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(G) depthFirst(A)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(G) depthFirst(A) *

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK depthFirst(E) depthFirst(I) depthFirst(J) depthFirst(A) *

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK depthFirst(E) depthFirst(I) depthFirst(A) *

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK depthFirst(E) depthFirst(A) *

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK depthFirst(A) *

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 F A B C E G I J K Klart! Notera att vi fick ett uppspännande träd på samma gång. ABC EFG IJK

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ab c de 1.Markera noden som besökt. Grannarna = {c, e, d} Rekursivt anrop c. ab c de ab c de ab c de ab c de 2.Markera noden som besökt. Inga grannar. Återgå till 1, nytt anrop e. 3.Markera noden som besökt. Grannarna = {b, c} Rekursivt anrop b. 4.Markera noden som besökt. Grannarna = {c} c redan besökt, åter till 3 c redan besökt. Åter till 1 nytt anrop d 5.Markera noden som besökt. Grannarna ={e}. Redan besökt. Åter 1.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Bredden-först-algoritm  Man undersöker först noden, sedan dess grannar, grannarnas grannar osv.  Finns risk för oändlig körning här med om man inte använder en markör för att noden besökts.  Endast noder till vilka det finns en väg från utgångsnoden kommer att besökas.  En kö hjälper oss hålla reda på grannarna.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Bredden-först-algoritm: Algoritm breadthFirst(Node n, Graph g) input: A node n in a graph g to be traversed Queue q  empty(); visited(n, g) // Marks the node as visited q  enqueue(n, q); while not isempty(q) do newNode  front(q) q  dequeue(q); neighbourSet  neighbours(newNode, g); for each neighbour in neighbourSet do if not isVisited(neighbour) visited(neighbour, g); q  enqueue(neighbour, q);

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Markera noden som besökt och lägg in den i kön. q = (A) Ta fram första elementet (A), q = ( ) Ta sedan fram grannmängden till A S = {B, F, E}

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 För var och en av grannarna: B är inte besökt, besök B och lägg in B i kön q = (B) ABC EFG IJK

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK F är inte besökt, besök F och lägg in F i kön q = (B, F)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 IJK ABC EFG E är inte besökt, besök E och lägg in E i kön q = (B, F, E)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 q = (B, F, E), ta fram första elementet (B) q = (F, E) Ta sedan fram grannmängden till B S = {A, F, C} För var och en av grannarna: A och F är besökta C är inte besökt, besök C och lägg in C i kön q = (F, E, C) ABC EFG IJK

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK q = (F, E, C), ta fram första elementet (F) q = (E, C) Ta sedan fram grannmängden till F S = {B, A, E, I} B, A, och E är besökta I är inte besökt, besök I och lägg in I i kön q = (E, C, I)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK q = (E, C, I), ta fram första elementet (E) q = (C, I) Ta sedan fram grannmängden till E S = {A, F, I} För var och en av grannarna: Alla är besökta

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK q = (C, I), ta fram första elementet (C) q = (I) Ta sedan fram grannmängden till C S = {B, G} För var och en av grannarna: B är besökt G är är inte besökt, besök G och lägg in G i kön q = (I, G)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK q = (I, G), ta fram första elementet (I) q = (G) Ta sedan fram grannmängden till I S = {E, F, J} E och F är besökta J är inte besökt, besök J och lägg in J i kön q = (G, J)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK q = (G, J), ta fram första elementet (G) q = (J) Ta sedan fram grannmängden till G S = {C, J, K} C och J är besökta K är inte besökt, besök K och lägg in K i kön q = (J, K)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK q =(J, K), ta fram första elementet (J) q = (K) Ta sedan fram grannmängden till J S = {I, G} Båda är besökta q = (K), ta fram första elementet (K) q = () Ta sedan fram grannmängden till K S = {G} Den är besökt. Nu är kön tom och algoritmen klar.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ab c de 1.Markera noden som besökt. q = (a), ta fram första elem ur q. Leta reda på grannarna = {c, e, d} 2.Markera c som besökt. Stoppa in i kön q = (c) 3.Markera e som besökt. Stoppa in i kön q = (c, e) 4.Markera d som besökt. Stoppa in i kön q = (c, e, d) 5.Ta första ur kön (= c) q = (e, d), c har inga grannar. Ta första ur kön (=e) q = (d). e har grannarna = {b} Markera b som besökt. Stoppa in i kön q = (d, b) 6.Ta första ur kön (=d) q = (b). Grannarna redan besökta. Ta första ur kön (=b) q = (). Grannarna redan besökta. Kön tom. Klart! ab c de ab c de ab c de ab c de

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Kortaste-vägen-algoritm vid lika vikt  Om vi har en graf med lika vikter på alla bågar kan man använda en variant av bredden-först traversering för att beräkna kortaste vägen från en nod till de andra. Algoritm breadthFirst(Node n, Graph g) input: A node n in a graph g to be traversed Queue q  empty(); visited(n, g) // Marks the node as visited setDist(n, 0) q  enqueue(n, q); while not isempty(q) do newNode  front(q) q  dequeue(q); neighbourSet  neighbours(newNode, g); for each neighbour in neighbourSet do if not isVisited(neighbour) visited(neighbour, g); setDist(neighbour, getDist(newNode)+1) q  enqueue(neighbour, q);

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABC EFG IJK Om alla bågar har vikt A B C E F G I J K

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Tidskomplexitet  För både bredden-först och djupet-först gäller:  Varje nod besöks exakt en gång O(n)  För varje nod följer man bågarna ut från noden för att hitta grannarna. Detta bör vara effektivt O(grad(v)), värsta fallet är O(n). oI bokens navigeringsorienterade spec. har vi O(grad(v)) oMängdorienterad spec. ger O(m) där m=antalet bågar i noden oEftersom grannmängden behöver evalueras en gång för varje nod blir komplexiteten O(  grad(v)) =O(m)  Totalt O(n) + O(m)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Uppspännande träd  Både bredden-först och djupet-först- traverseringarna gav oss uppspännande träd.  Om vi sparat undan informationen vill säga…  Måste utöka grafspecifikationen med operationer som stöder detta.  Är det minimalt?  Den totala längden i trädet ska vara minimalt.  Om varje kant har samma vikt är trädet minimalt uppspännande för bredden-först traversering.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Uppspännande träd ABC EFG IJK ABC EFG IJK Skapat med djupet-först Ej minimalt Skapat med bredden-först Minimalt

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Uppspännande träd  Hur hanterar man grafer med vikter?  Man söker ett uppspännande träd med minsta möjliga totala längd. oDet är alltså inte en kortaste-vägen algoritm  För mängdorienterad specifikation finns Kruskals algoritm  För navigeringsorienterad specifikation finns Prims algoritm A R B F C D E G

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Prims algoritm  Går ut på att bygga upp ett allt större träd som till slut spänner upp grafen eller en sammanhängande komponent av den.  Man väljer i varje steg en båge med minimal vikt.  Lika vikter måste behandlas konsekvent. Regeln styr hur det färdiga trädet ser ut.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, Välj en nod vilken som helst och markera den som öppen. Låt den bli rot. 2.Markera den som stängd. 3.För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) 4.Ta fram ett element ur prioritetskön och bilda ett nytt delträd genom att lägga in den båge som finns i elementet i trädet. OBS! Lägg endast in bågen om slutnoden inte är stängd! Låt ändnoden bli den nya aktuella noden, stäng den och gå till 3. Prims algoritm:

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, Välj en nod vilken som helst och markera den som öppen. Låt den bli rot. A R B F C D E G

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G Markera den som stängd.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) P = ( (C, A, 8) )

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) P = ( (C, F, 3), (C, A, 8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) P = ( (C, F, 3), (C, G, 4), (C, A, 8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) P = ( (C, F, 3), (C, G, 4), (C, D, 5), (C, A, 8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ((C, G, 4), (C, D, 5), (C, A, 8)) 4.Ta fram ett element ur prioritetskön och bilda ett nytt delträd genom att lägga in den båge som finns i elementet i trädet. OBS! Lägg endast in bågen om slutnoden inte är stängd! Låt ändnoden bli den nya aktuella noden, stäng den och gå till 3.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) P = ((F, A, 4), (C, G, 4), (C, D, 5), (C, A, 8)) P = ((C, G, 4), (C, D, 5), (C, A, 8)) 4.Ta fram ett element ur prioritetskön och bilda ett nytt delträd genom att lägga in den båge som finns i elementet i trädet. OBS! Lägg endast in bågen om slutnoden inte är stängd! Låt ändnoden bli den nya aktuella noden, stäng den och gå till 3.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) P = ((A, R, 4), (C, G, 4), (C, D, 5), (C, A, 8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) P = ((A, R, 4), (C, G, 4), (C, D, 5), (A, E, 6), (C, A, 8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G Ta fram ett element ur prioritetskön och bilda ett nytt delträd genom att lägga in den båge som finns i elementet i trädet. OBS! Lägg endast in bågen om slutnoden inte är stängd! Låt ändnoden bli den nya aktuella noden, stäng den och gå till 3. P = ((C, G, 4), (C, D, 5),(A, E, 6), (C, A, 8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) P = ((C, G, 4), (C, D, 5), (R, B, 6), (A, E, 6), (C, A, 8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G Ta fram ett element ur prioritetskön och bilda ett nytt delträd genom att lägga in den båge som finns i elementet i trädet. OBS! Lägg endast in bågen om slutnoden inte är stängd! Låt ändnoden bli den nya aktuella noden, stäng den och gå till 3. P = ((C, D, 5), (R, B, 6), (A, E, 6), (C, A, 8)) P = ((C, D, 5), (G, E, 6), (R, B, 6), (A, E, 6), (C, A, 8)) 3.För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  )

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ( (G, E, 6), (R, B, 6), (A, E, 6), (C, A, 8)) 4.Ta fram ett element ur prioritetskön och bilda ett nytt delträd genom att lägga in den båge som finns i elementet i trädet. OBS! Lägg endast in bågen om slutnoden inte är stängd! Låt ändnoden bli den nya aktuella noden, stäng den och gå till 3. 3.För var och en av (de icke-stängda) grannarna: 1.Markera den som öppen (om den inte är det). 2.Stoppa in den aktuella noden, grannen och vikten i en prioritetskö. Är vikterna lika ska det nya elementet läggas in först i kön. (Dvs relationen är  ) P = ((D, B, 3), (G, E, 6), (R, B, 6), (A, E, 6), (C, A, 8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G Ta fram ett element ur prioritetskön och bilda ett nytt delträd genom att lägga in den båge som finns i elementet i trädet. OBS! Lägg endast in bågen om slutnoden inte är stängd! Låt ändnoden bli den nya aktuella noden, stäng den och gå till 3. P = ( (G, E, 6), (R, B, 6), (A, E, 6), (C, A, 8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ((C, A, 8)) P = ( (R, B, 6), (A, E, 6), (C, A, 8)) 4.Ta fram ett element ur prioritetskön och bilda ett nytt delträd genom att lägga in den båge som finns i elementet i trädet. OBS! Lägg endast in bågen om slutnoden inte är stängd! Låt ändnoden bli den nya aktuella noden, stäng den och gå till 3. P = ((A, E, 6), (C, A, 8)) P = () Klart!

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Resultat av Prims algoritm: A R B F C D E G A R B F C D E G Start Slut med  A R B F C D E G Slut med <

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Prims algoritm - komplexitet  Man gör en traversering av grafen, dvs O(m) + O(n).  Sen tillkommer köoperationer  För varje båge sätter man in ett element i kön, inspekterar det och tar ut det. Detta blir O(m)  Om man använder Heap (partiellt sorterat binärt träd) får vi O(log m).  Totalt: O(n) + O(m 2 ) eller O(n) + O(m log m) beroende på implementation av prioritetskön.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Kruskals algoritm  Här väljer man också bågar allt eftersom men man bryr sig inte om att forma delträd under konstruktionen.  Man gör ingen traversering utan arbetar på ett annat sätt med bågarna.  Man färglägger bågarna för att hålla reda på vilken delgraf de tillhör.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Kruskals algoritm 1.Skapa en prioritetskö av alla bågarna utifrån vikterna på dessa. 2.Den första bågen plockas fram och bildar den första delgrafen. Noderna färgläggs. 3.Upprepa tills kön är tom: 1.Ta fram en ny båge. 2.Om ingen av noderna är färgade 1.Färglägg med ny färg och bilda ny delgraf. 3.Om endast en nod är färgad 1.Ingen risk för cykel utöka grafen och färglägg. 4.Om båda noderna är färgade med olika färg 1.Välj en av färgerna och färga om den nya gemensamma grafen. 5.Om båda noderna har samma färg 1.Ignorera bågen, den skapar en cykel

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 P = ((C,F,3), (B,D,3), (C,G,4),(A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8) A R B F C D E G

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ((B,D,3), (C,G,4),(A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ((C,G,4),(A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ((A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ((A,R,4), (C,D,5),(E,G,6), (B,R,6), (A,E,6), (A,C,8)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ((C,D,5),(E,G,6), (B,R,6),(A,E,6), (A,C,8)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ((E,G,6),(B,R,6),(A,E,6), (A,C,8))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G P = ((B,R,6),(A,E,6), (A,C,8)) P = ((A,E,6), (A,C,8)) P = ((A,C,8)) P = ()

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Kruskals algoritm - komplexitet  Första steget i algoritmen bygger en prioritetskö utifrån en bågmängd.  Komplexitet beror på implementationen av bågmängden och prioritetskön…  Varje båge traverseras en gång.  Resten kan delas in i fyra fall:  Tre fall med komplexitet O(1) där bågen kan läggas till utan problem.  Ett fall där en delgraf måste färgas om. Komplexitet O(n).

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Finna vägen till en nod  Bredden-först traversering ger oss vägarna från en nod till alla andra.  Om vi sparar undan vägen…  Är det den kortaste?  Ja, om alla vikter lika!  Annars då? Vi kommer titta på två algoritmer: oFloyds shortest path O(N 3 ) oDijkstras shortest path

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Floyds shortest path  Bygger på att man representerar grafen med hjälp av en matris. (Eller skapar en matrisrepresentation) A R B F C D E G ABCDEFGR A0  8  64  4 B  0  3  6 C8  05  34  D  350  E6  0  6  F4  3  0  G  4  6  0  R46  0

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Floyds shortest path Algoritm floyd(Graph g) input: A graph g to find shortest path in // Get matrix representation A(:,:,0)  getMatrix(g) N  getNoOfNodes(g) for k=0 to N-1 for i=0 to N-1 for j=0 to N-1 A(i,j,k+1) = min(A(i,j,k), A(i,k,k)+ A(k,j,k)) A(:,:,N) innehåller kortaste avstånden men hur få tag på vägen? Spara på samma gång en föregångar- matris. Det kommer också kosta O(N 3 ) så den ökar inte komplexiteten.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Uppdaterad Floyd Algoritm floyd(Graph g) input: A graph g to find shortest path in // Get matrix representation A(:,:,0)  getMatrix(g) N  getNoOfNodes(g) for i = 0 to N-1 for j = 0 to N-1 if (i==j or A(i,j,0)==inf) Path(i,j,0) = -1 else Path(i,j,0) = i for k=0 to N-1 for i=0 to N-1 for j=0 to N-1 A(i,j,k+1) = min(A(i,j,k), A(i,k,k)+A(k,j,k)) if (A(i,j,k)  A(i,k,k)+A(k,j,k)) Path(i,j,k+1) = Path(i,j,k) else Path(i,j,k+1) = Path(k,j,k)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 k0 ABCDEFGR A0  8  64  4 B  0  3  6 C8  05  34  D  350  E6  0  6  F4  3  0  G  4  6  0  R46  0 k7 ABCDEFGR A B C D E F G R A R B F C D E G Vi har hittat en kortare väg mellan A och C. Vilken är den? Vilken är vägen mellan R och G?

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 ABCDEFGR A-RFCAACA BR-DBACCB CFD-CGCCA DFDD-GCCB EERGC-AEA FFDFCA-CA GFDGCGC-A RRRFBAAC- Låt oss leta i vår föregångarmatris. (För enkelhetens skull har jag kodat om siffrorna till motsvarande noder på OH- bilden.) A R B F C D E G Man måste leta ”baklänges”. Om vi vill hitta vägen mellan A och C gör man så här: Titta på raden för A. Leta reda på kolumnen för C. Där ser vi F. Sedan tittar vi i kolumnen för F där ser vi A. Vägen är alltså A-F-C. På samma sätt ser vi att kortaste vägen mellan R och G är R-A-F-C-G (med kostnad 15).

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Dijkstras algoritm  Söker kortaste vägen från en nod n till alla andra noder.  Fungerar enbart på grafer med positiva vikter.  Låt varje nod ha följande attribut  Visited – som blir sann när vi hittat en väg till den  Distance – värdet på den kortaste vägen fram till noden  Parent – Referens till föregångaren på vägen

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Dijkstras algoritm Algoritm dijkstra(Node n, Graph g) input: A graph g to find shortest path starting from node n n.visited  true; n.distance  0; n.parent  null; Pqueue q  empty(); q  insert(n,q); while not isempty(q) v  inspect-first(q); q  delete-first(q); d  v.distance; neighbourSet  neighbours(v, g); for each w in neighbourSet do newDist  d + getWeight(v,w); if not isVisited(w) w.visited  true; w.distance  newDist; w.parent  v; q  insert(w,q); else if newDist < w.distance w.distance  newDist; w.parent  v; q  update(w,q)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Tar fram v ur kön v = R(true,0,Null) och q = (). d = 0 Leta sedan fram grannarna = {A, B} För granne A: newDist = 0+4 = 4. Ej besökt. q = (A(true,4,R)) Vi startar i R. Sätter värden i noden. Skapar Kö och stoppar in R q = (R(true,0,Null)). A R B F C D E G true, 0, null

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G true, 0, null true, 4, R För granne B: newDist = 0+6 = 6. Ej besökt. q = (A(true,4,R), B(true,6,R))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G true, 0, null true, 4, R true, 6, R Tar fram v ur kön v = A(true,4,R) och q = (B(true,6,R)). d = 4 Leta sedan fram grannarna = {E,F,C,R} För granne E: newDist = 4+6 = 10. Ej besökt. q = (B(true,6,R), E(true,10,A))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G true, 0, null true, 4, R true, 10, A true, 6, R För granne F: newDist = 4+4 = 8. Ej besökt. q = (B(true,6,R), F(true,8,A), E(true,10,A))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G true, 0, null true, 4, R true, 6, R true, 10, A true, 8, A För granne C: newDist = 4+8 = 12. Ej besökt. q = (B(true,6,R), F(true,8,A), E(true,10,A) C(true,12,A))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G true, 0, null true, 4, R true, 6, R true, 10, A true, 8, A true, 12, A För granne R: newDist = 4+4 = 8. Besökt. 8>0 gör inget. Tar fram v ur kön v = B(true,6,R) och q = (F(true,8,A), E(true,10,A), C(true,12,A)) d = 6 Leta sedan fram grannarna = {R, D} För granne R: newDist = 6+6 = 12. Besökt. 12>0 gör inget. För granne D: newDist = 6+3 = 9. Ej besökt. q = (F(true,8,A), D(true,9,B), E(true,10,A), C(true,12,A))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G true, 0, null true, 4, R true, 6, R true, 10, A true, 8, A true, 12, A true, 9, B Tar fram v ur kön v = F(true,8,A) och q = (D(true,9,B), E(true,10,A),C(true,12,A)) d = 8 Leta sedan fram grannarna = {A, C} För granne A: newDist = 8+4 = 12. Besökt. 12>4 gör inget. För granne C: newDist = 8+3 = 11. Besökt. 11<12 !! C.distance=11 C.parent = F q = (D(true,9,B), E(true,10,A),C(true,11,F))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G true, 0, null true, 4, R true, 6, R true, 10, A true, 8, A true, 11, F true, 9, B Tar fram v ur kön v = D(true,9,B) och q = (E(true,10,A),C(true,11,F)) d = 9 Leta sedan fram grannarna = {B, C} För granne B: newDist = 9+3 = 12. Besökt. 12>6 gör inget. För granne C: newDist = 9+5 = 14. Besökt. 14>11 gör inget Tar fram v ur kön v = E(true,10,A) och q = (C(true,11,F)) d = 10 Leta sedan fram grannarna = {A, G} För granne A: newDist = 10+6 = 16. Besökt. 16>4 gör inget. För granne G: newDist = 10+6 = 16. Ej besökt. q = (C(true,11,F), G(true, 16,E))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G true, 0, null true, 4, R true, 6, R true, 10, A true, 8, A true, 11, F true, 9, B true, 16, E Tar fram v ur kön v = C(true,11,F) och q = (G(true, 16,E)) d = 11 Leta sedan fram grannarna = {A, F, G, D} För granne A: newDist = 11+8 = 19. Besökt. 19>4 gör inget. För granne F: newDist = 11+3 = 14. Besökt. 14>8 gör inget För granne G: newDist = 11+4 = 15. Besökt. 15<16!! G.distance=15 G.parent = C q = (G(true, 15,C))

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 A R B F C D E G true, 0, null true, 4, R true, 6, R true, 10, A true, 8, A true, 11, F true, 9, B true, 15, C För granne D: newDist = 11+5 = 16. Besökt. 16>9 gör inget. Tar fram v ur kön v = G(true, 15,C) och q = () d = 15 Leta sedan fram grannarna = {E, C} För granne E: newDist = 15+6 = 21. Besökt. 21>10 gör inget. För granne C: newDist = 15+4 = 19. Besökt. 19>11 gör inget Stanna algoritmen klar.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Dijkstras algoritm - komplexitet  Vi sätter in varje nod i kön en gång.  Totalt n*O(insert)  Vi tar ut varje nod ur kön en gång.  Totalt n*O(delete-first)  Vi kan behöva uppdatera element i kön.  Maximalt m gånger, m*O(update)  Osorterad lista  n*O(1)+n*O(n) + m*O(1) = O(n 2 ) +O(m)  Heap  n*O(log n)+n*O(log n) + m*O(log n) = O((n+m)log n) Om smart implementation…

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Floyd vs. Dijkstra  Floyd O(n 3 ) hittar den kortaste vägen mellan alla noder.  Dijkstra O((n+m) log n) med heap, hittar kortaste vägen mellan en nod och alla andra.  Måste köras N gånger för att få samma resultat som Floyd. Dvs O(n(n+m) log n).  Är bättre på stora glesa grafer.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Flödet i en graf  Riktad graf med vikter c v,w, som anger flödeskapacitet över bågen (v,w).  Kapaciteten kan t.ex. vara mängden vätska som kan flöda genom ett rör, maximala mängden trafik på en väg eller kommunikationskapaciteten i ett datornät.  Grafen har två noder s (source) och t (sink) och uppgiften är att beräkna det maximala flödet mellan s och t.  Genom varje båge (u,v) kan vi maximalt ha ett flöde på cu,v enheter.  För varje node v gäller att det totala inkommande flödet måste vara lika med det utgående flödet.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Kapacitet och flöde  Flödet är en funktion på kanterna:  0 ≤ flöde ≤ c(u, v)  Flödet in till noden = flödet ut ur noden  Värde/value: Det kombinerade flödet in till avloppet. s t s t

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Maximumflödes problem  Givet ett nätverk N, hitta ett flöde med maximalt värde  Ett exempel på maximalt flöde Värde = 5 s t

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Förbättrande (augmenting) flöde s t s t s t Nätverk med flödes- värde 3 Förbättrande väg (Augmenting path) Nu har flödesvärdet ökat till 4!!

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Ökande väg  Framåtriktade bågar  flödet(u, v) < c(u, v)  Flödet kan ökas!  Bakåtriktade bågar  flödet(u,v) > 0  Flödet kan minskas! u v u v

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Maximala flödesteoremet + algoritm  Ett flöde har maximum värde om och endast om nätverket inte har någon förbättrande väg.  Ford & Fulkerson algoritmen: Initialisera nätverket med noll flöde Anropa metoden findFlow() som definieras Om det finns förbättrande vägar: Hitta en av dem Öka flödet Anropa (rekursivt) findFlow()

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Initiera nätverket med nollflöde. Kapaciteterna i svart ovan bågarna och flödet i grönt nedan bågarna. Skicka igenom ett enhetsflöde genom nätverket. Flödesvägen markerat med rött och de förbättrade flödesvärdena i blått.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Skicka ytterligare ett enhetsflöde genom nätverket. Skicka igenom ytterligare ett enhets- flöde genom nätverket. Notera att det finns ytterligare en förbättrande väg som går genom kanten i mitten.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Skicka ett enhetsflöde genom den förbättrande vägen. Nu finns det inga fler förbättrande vägar. Alltså… Vi har hittat detta nätverks maximala flöde!

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Hur gör man mer specifikt?  Hur vet man att det finns en förbättrande väg?  Hur vet man vilken av de förbättrade vägarna man ska ta först?  Algoritmen på sidorna mer specifik.  Noderna numreras och numren används som en fast prioritetsordning i en kö.

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 s t a Första vägen från s till t: s märks som stängd och (-,  ) (dvs inte öppnats från någon nod flödet kan förändras oändligt) Bågarna från s traverseras, noderna i andra änden markeras öppna och märks med deras maximala kapacitet och sätts in i prio-kön. q = (a, b) b (-,  ) s t a b (s, 2)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Första noden tas från kön (a) och markeras stängd. Dess bågar undersöks i tur och ordning. Bågen (a,s) leder till stängd nod och (a, b) leder till öppen nod - inget händer. Bågen (a,t) leder till en ny nod t som markeras (a, 2) Nu har vi nått fram till t, traverseringen avbryts. Man följer stegen bakåt till s och markerar bågarna samtidigt som noderna avmarkeras. s t a b (-,  ) (s, 2) (a, 2) s t a b

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Andra vägen från s till t: s märks som stängd och (-,  ) Bågarna från s traverseras. Eftersom vägen till a inte kan ökas mer struntar vi i den. q=(b) Första noden tas från kön (b) och markeras stängd. Dess bågar undersöks i tur och ordning. Bågen (b,s) leder till stängd nod - inget händer. Bågen (b,a) leder till en ny nod a (baklänges) som kan markeras med maximalt det nuvarande flödet, dvs (b, 0). Bågen (b,t) leder till en ny nod t som markeras (b, 2). q=(a,t) s t a b s t a b (-,  ) (s, 2) (-,  ) (s, 2) (b, 0) (b, 2)

Datastrukturer och algoritmer VT © Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Första noden tas från kön (a) och markeras stängd. Dess bågar undersöks i tur och ordning. Bågen (a,s) och (a, b) leder till stängda noder och (a, t) till en öppen nod - inget händer. Första noden tas från kön (t). Vi har nått t. Traversering avbryts och vi går bakåt och avmakerar allt. Om vi nu försöker börja om igen så hittar vi inget nytt eftersom både (s,a) och (s,b) utnyttjas maximalt. s t a b (-,  ) (s, 2) (b, 0) (b, 2) s t a b