Föreläsning 2: Grafer. Exempel på graf

Relevanta dokument
Föreläsning 2: Grafer. Exempel på graf

Föreläsning 2. Kortaste vägar i grafer.

Föreläsning 2. Kortaste vägar i grafer.

Lathund, procent med bråk, åk 8

Föreläsning 8: Räkning. Duvhålsprincipen. Kombinatorik

Lösningsförslag till övningsuppgifter, del III

a n = A2 n + B4 n. { 2 = A + B 6 = 2A + 4B, S(5, 2) = S(4, 1) + 2S(4, 2) = 1 + 2(S(3, 1) + 2S(3, 2)) = 3 + 4(S(2, 1) + 2S(2, 2)) = = 15.

Träning i bevisföring

konstanterna a och b så att ekvationssystemet x 2y = 1 2x + ay = b 2 a b

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Ha det kul med att förmedla och utveckla ett knepigt område!

729G04 - Hemuppgift, Diskret matematik

Anna Kinberg Batra Inledningsanförande 15 oktober 2015

Modul 6: Integraler och tillämpningar

Skriva B gammalt nationellt prov

4-6 Trianglar Namn:..

Mätningar på op-förstärkare. Del 3, växelspänningsförstärkning med balanserad ingång.

Sammanfattning av kursdag 2, i Stra ngna s och Eskilstuna

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

Administratör Rollbeskrivning och stödjande instruktion. e-tjänst för ansökan om statsbidrag Senast uppdaterad:

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Algebra, polynom & andragradsekvationer en pampig rubrik på ett annars relativt obetydligt dokument

Tränarguide del 1. Mattelek.

Individuellt Mjukvaruutvecklingsprojekt

Kapitel 6. f(x) = sin x. Figur 6.1: Funktionen sin x. 1 Oinas-Kukkonen m.fl. Kurs 6 kapitel 1

Lathund till Annonsportalen

En lönerevision görs i flera steg; Initiering - Lönerevision Attestering - Skapa förmån - Uppdatera lön.

När jag har arbetat klart med det här området ska jag:

Detta dokument beskriver vilka regler som gäller för lagspecifika hemsidor använda av Ackers lag.

Hävarmen. Peter Kock

ELEV- HANDLEDNING (Ansökan via webben)

Manual för BPSD registret. Version 6 /

TIMREDOVISNINGSSYSTEM

Föräldrar i Skola24. Schema

Laganmälan & Laghantering

Avsikt På ett lekfullt sätt färdighetsträna, utveckla elevers känsla för hur vårt talsystem är uppbyggt samt hitta mönster som uppkommer.

Utveckla arbetsmiljö och verksamhet genom samverkan

Efter att du har installerat ExyPlus Office med tillhörande kartpaket börjar du med att göra följande inställningar:

Nämnarens adventskalendern 2007

D A B A D B B D. Trepoängsproblem. Kängurutävlingen 2012 Benjamin

ANVÄND NAVIGATIONEN I CAPITEX SÄLJSTÖD

Vi skall skriva uppsats

Pesach Laksman är lärarutbildare i matematik och matematikdidaktik vid Malmö högskola.

Skapa en rapport med snygg formatering, rubriker, sidnummer och innehållsförteckning

FRÅN A TILL Ö LäraMera Ab / och Allemansdata Ab / FRÅN A TILL Ö

För dig som är valutaväxlare. Så här följer du reglerna om penningtvätt i din dagliga verksamhet INFORMATION FRÅN FINANSINSPEKTIONEN

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

Partnerskapsförord. giftorättsgods görs till enskild egendom 1, 2. Parter 3. Partnerskapsförordets innehåll: 4

Webb-bidrag. Sök bidrag på webben Gäller från

ANVÄNDARHANDLEDNING FÖR

NATIONELLA MATEMATIKTÄVLING

Idag. Hur vet vi att vår databas är tillräckligt bra?

Frågor och svar för föreningar om nya ansökningsregler för aktivitetsbidrag från och med 1 januari 2017

Scoot Boot - frågor & svar

Tillståndsmaskiner. 1 Konvertering mellan Mealy och Moore. Ola Dahl och Mattias Krysander Linköpings tekniska högskola, ISY, Datorteknik

Idéer till rörelsepark på Svandammsskolan augusti 2013

Utbildningsplan för arrangörer

Handbok Ämnesprov 2016 Lärarinmatning I Dexter Åk 3. Uppdaterad: /HL Version: IST AB

Menys webbaserade kurser manual för kursdeltagare. Utbildningsplattform: Fronter

Formation (3-1:4:1-1)

Energi & Miljötema Inrikting So - Kravmärkt

Vad är WordPress? Medlemmar

Kängurun Matematikens hopp Benjamin 2006 A: B: C: D: E:

Projekt benböj på olika belastningar med olika lång vila

Praktisk programmering

Sveriges Trafikskolors Riksförbund Film om körkort för nysvenskar Speakertext - Svensk

vägtrafiken? Hur mycket bullrar

ÖSS jolles Seglarsaga

Intervjumall. Datum: Intervjuare: Kandidatens namn: Kandidatens uppgifter: Växel: (5)

Så kan du arbeta med medarbetarenkäten. Guide för chefer i Göteborgs Stad

VÄRDERINGSÖVNINGAR. Vad är Svenskt?

Laborativ matematik som bedömningsform. Per Berggren och Maria Lindroth

Föreläsning 5: Grafer Del 1

Flöde i nätverk. Flöde i nätverk. Specialfall av minkostnadsflödesproblemet. Specialfall av minkostnadsflödesproblemet. Slutsats.

Något om permutationer

Virkade tofflor. Storlek & By: Pratamedrut. pratamedrut.se/blog/virkade tofflor 1

Föreningen Nordens lokala hemsidor

Vanliga frågor. LEGOeducation.com. Konceptet. Processen

Får nyanlända samma chans i den svenska skolan?

Handledning för digitala verktyg Talsyntes och rättstavningsprogram. Vital, StavaRex och SpellRight

1,2C 4,6C 1A. X-kuber. strävorna

Hur skapar man formula r

L(9/G)MA10 Kombinatorik och geometri Gruppövning 1

Presentation vid dialogmöte i Råneå av Arbetsgruppen för Vitåskolan. Presentationen hölls av Ingela Lindqvist

Sektionen för Beteendemedicinsk smärtbehandling

Datorövning 3: Icke-parametriska test

Friskoleurval med segregation som resultat

Klassen kom tillsammans fram till vilka punkter som vi skulle ta hänsyn till. Dessa var:

Erfarenheter från ett pilotprojekt med barn i åldrarna 1 5 år och deras lärare

Fullför installation av ELIQ

Hemsida Arbetsrum. Skapa arbetsrumslista

Elektronen och laddning

Hel tjänstledighet för att prova annan anställning inom Göteborgs universitet.

Boken om Teknik. Boken om Teknik är en grundbok i Teknik för åk 4 6.

Frågor och svar angående de nya nationella övergångsbestämmelserna. Fråga 1: Får en amatör byta förening fler gånger på en säsong?

Institutionen för matematik Envariabelanalys 1. Jan Gelfgren Datum: Fredag 9/12, 2011 Tid: 9-15 Hjälpmedel: Inga (ej miniräknare)

Kapitel 10 Rumsdefinition... 3

Handbok Blinken. Danny Allen Översättare: Stefan Asserhäll

Föreläsning 5: Rekursion

Transkript:

Föreläsning 2: Grafer Vad är en graf? Terminologi Representationer Genomgång av hörnen i en graf Kortaste väg-problemet Exempel på graf Falun Uppsala Karlstad Västerås Stockholm Eskilstuna Örebro En graf G består av en mängd hörn, V,ochenmängdkanter, E. Notation: G =(V,E) Ienriktadgraf,skrivsoftaG = V,E, är alla kanter riktade. Exempel på grafproblem Vilken är den kortaste vägen mellan Stockholm och Karlstad? Jag vill åka på en rundtur som börjar och slutar i Stockholm och passerar alla städerna. Vilken är den kortaste turen? Man vill bygga nya motorvägar längs en del av sträckorna så att varje par av städer har motorvägsförbindelse. Vilka vägsträckor ska väljas ut så att så lite motorväg som möjligt behöver byggas? Alla dessa frågor rör viktade grafer, där varje kant har en (vanligen positiv) vikt. Här svarar vikterna mot avstånden mellan städerna.

Terminologi En stig är en följd av hörn där konsekutiva hörn är förbundna av en kant. Inget hörn förekommer mer än en gång. Iensammanhängande graf finns det en stig mellan varje par av hörn. En cykel är en stig som börjar och slutar i samma hörn. Ett träd är en sammanhängande graf utan cykler. I en multigraf tillåts flera kanter mellan samma par av hörn. Olika representationer av grafer 1 2 5 3 4 Grannmatris: Grannlista: 1 2 3 4 5 1 2 1 1 0 0 0 2 1 3 4 5 2 1 1 1 3 2 4 3 1 0 4 2 3 5 4 1 5 2 4 5 Representationen kantmatris förekommer också: Det är en V E -matris där element (i, j) är 1 om v i e j, 0 annars. Täta och glesa grafer En tät graf har Θ( V 2 ) kanter och representeras med fördel med en grannmatris. En gles graf har Θ( V ) kanter och representeras lämpligen med någon form av grannlistor. Glesa grafer är vanliga i tillämpningar och prestanda för en algoritm på sådana kan i praktiken vara lika viktigt som tidskomplexiteten i värsta fallet. Graden hos ett hörn är antalet kanter som innehåller hörnet medan gradtalet hos en graf är det högsta gradtalet för något hörn i grafen. Delgrafer En delgraf till grafen G =(V,E) består av en delmängd E 1 av kanterna och en delmängd V 1 av hörnen (som måste innehålla alla hörn som ingår i någon av kanterna i E 1 ). En inducerad delgraf till G består av en delmängd av hörnen samt de kanter som förbinder två hörn i denna mängd. Ex.

G H 1 H 2 H 1 är en delgraf och H 2 en inducerad delgraf till G. Breddenförstsökning BFS tar en graf och går igenom hörnen ett i taget. Algoritmen börjar i starthörnet s och tar sedan grannarna till s, grannarna till grannarna till s etc. En kö används för att hålla reda på ordningen i vilken hörnen besöks. Det oviktade avståndet från s beräknas samtidigt. BFS(V,E,s) (1) d[u] för alla u V (2) d[s] 0 (3) Q {s} (4) while Q (5) u Dequeue(Q) (6) foreach granne v till u (7) if d[v] = (8) d[v] d[u] +1 (9) p[v] =u (10) Enqueue(Q, v) (11) Bearbeta u här Tidskomplexitet: O( V + E ) Djupetförstsökning DFS går igenom de hörn som kan nås från starthörnet s. Detta görs genom att gå så långt det går i grafen utan att återkomma till något hörn och sedan stega tillbaka tills något nytt hörn går att besöka. DFS(V,E,s) (1) foreach u V (2) vis(u) 0 (3) p[u] NULL (4) DFS Visit(s)

DFS-Visit(u) (1) vis(u) 1 (2) Bearbeta u här (3) foreach granne v till u (4) if vis(v) =0 (5) p[v] =u (6) DFS-Visit(v) Tidskomplexitet: O( V + E ) Tillämpning av DFS DFS kan användas för att avgöra om en graf är en DAG (Directed Acyclic Graph). Idén är att markera de halvfärdiga hörn för vilka anropet till DFS- Visit ännu inte är avslutat. DFS-DAG(V,E) (1) foreach u V (2) vis(u) 0 (3) foreach u V (4) if vis(u) =0 (5) DFS-Visit(u) (6) return Grafen är en DAG DFS-Visit(u) (1) vis(u) 0.5 (2) foreach granne v till u (3) if vis(v) =0.5 (4) return Grafen innehåller en cykel (5) if vis(v) =0 (6) DFS-Visit(v) (7) vis(u) 1 Topologisk numrering En topologisk numrering av en DAG är en numrering topnum[u] av noderna så att om (u, v) är en riktad kant så är topnum[u] <topnum[v]. En sådan numrering kan genomföras med en modifierad variant av DFS: DFS-TOPNUM(V,E) (1) foreach u V (2) vis(u) 0 (3) t V (4) foreach u V (5) if vis(u) =0 (6) DFS-Visit(u) (7) return Grafen är en DAG

DFS-Visit(u) (1) vis(u) 0.5 (2) foreach granne v till u (3) if vis(v) =0.5 (4) return Grafen innehåller en cykel (5) if vis(v) =0 (6) DFS-Visit(v) (7) vis(u) 1 (8) topnum[u] t (9) t t 1 Ytterligare tillämpning: Bipartita grafer För att kontrollera om en graf G är bipartit kör vi BFS. Sätt sedan alla noder u med d[u] jämn till Blå och de med d[u] udda till Röda. Kontrollera alla kanter. Om någon går mellan en Blå och en Röd nod är grafen inte bipartit. Annars är den bipartit. Ytterligare en tillämpning: Stark sammanhängande grafer För att avgöra om en riktad graf G är starkt sammanhängande väljer vi en startnod s och gör en DFS-sökning från s. OmT = V fortsätter vi på följande sätt: Låt G rev vara G med kantriktningarna omkastade. Gör DFS-sökning på G rev med s som startnod. Om vi också nu får T = V så är grafen starkt sammanhängande. Kortaste väg-problemet Givet två hörn s och t ienriktadgrafg =(V,E), hur hittar man den kortaste vägen mellan s och t? Kanten e har vikten l(e) som svarar mot längden hos vägsträckan. Vi söker alltså den stig i G från s till t som minimerar summan av de ingående kanternas vikter. Vi tillåter negativa kantvikter. Men det kan uppstå svårigheter. En cykel i grafen vars kantsumma är negativ kallas för en negativ cykel. Negativa cykler ställer till problem eftersom det inte är klart vad man skall mena med kortaste vägar då negativa cykler finns. En väg mellan två noder får innehålla en nod flera gånger. En stig mellan två noder får inte innehålla någon nod mer än en gång. Vad är skillnaden mellan kortaste vägar och kortaste stigar? Varje kortaste väg i en graf G är en stig Det finns ingen negativ cykel i G. Om negativa cykler finns så finns det inte kortaste vägar mellan alla noder (eftersom man kan hitta vägar med vikt mindre än N för varje positivt N). Däremot finns det alltid kortaste stigar.

De effektiva algoritmer som finns för att hitta kortaste vägar klarar inte av att hitta kortaste stigar i allmänhet. Men om grafen saknar negativa cykler är varje kortaste väg en stig och problemet uppstår inte. Det enklaste är att anta att alla kantvikter är positiva. Då kan Dijkstras algoritm användas. Dijkstras algoritm Dijkstra(G = V,E,s, t V, l : E R) (1) foreach u V (2) Märk u med d[u] = (3) foreach u så att (s, u) E (4) Märk u med d[u] =w(s, u) (5) Märk s med d[s] =0 (6) S {s} (7) while t S (8) Välj u/ S med d[u] minimal. (9) S S {u} (10) foreach v/ S så att (u, v) E (11) if d[v] >d[u] +w(u, v) (12) d[v] d[u] +w(u, v) (13) p[v] u (14) return Märkningen hos t G antas representerad i form av grannlistor. När algoritmen är klar markerar d[v] kortaste avståndet från s till v. Kortaste vägen fås baklänges som p[v],p[p[v]],... Dijkstra forts.: Exempel och analys

F 20 21 15 U 8 20 7 K V 10 12 12 11 S 9 E Ö Tidskomplexitet: Den inledande märkningen tar O( V ) tid. Att hitta hörnet som S ska utvidgas med tar O( V ) tid, och detta utförs högst V gånger. För varje kant i grafen kommer högst en uppdatering ske. Totalt: O( V + V 2 + E ) =O( V 2 ) (eftersom E O( V 2 )) Korrekthetsbevis Vi antar för enkelhets skull att alla noder kan nås från s. Låtδ[s, v] betyda kortaste vägen från s till v och δ S [s, v] betyda kortaste vägen som går genom noder i S, förutom v. Vi använder följande invariant för den yttersta slingan: Alla noder u i S är märkta med d[u] =δ[s, u]. Dessutom är alla v / S med d[v] < märkta med d[v] =δ S [s, v]. Noderna märkta med d[v] = går inte att nå med en S-stig. Invarianten är sann innan slingan börjar köras. Antag att den är sann i ett steg i algoritmen. I nästa steg läggs u till. Vi måste visa att d[u] =δ[s, u]. Antag att d[u] δ[s, u]. I den korstaste vägen från s till u finns en första nod x som ligger utanför S. Då gäller δ[s, u] =δ[s, x]+δ[x, u]. Menδ[s, x] =δ S [s, x] =d[x] enligt antagandet. Då gäller δ[s, u] =d[x]+δ[x, u] d[x] d[u] eftersom negativa vägar inte finns. Eftersom d[u] < måste det finnas y S så att d[u] =d[y]+w(y, u). Eftersom d[y] =δ S [s, y] så är d[y]+w(y, u) längden på en möjlig väg från s till u. Därför är δ[s, u] d[u]. Detgerd[u] =δ[s, u].

Vi lägger nu till u till S. Kalla den nya mängden S.Vimärkeromnoderna utanför S. Vi måste visa att d[v] =δ S [s, v] för de ommärkta noderna. Vi antar att v / S är granne till u och att v har märkningen d[v] före en eventuell ommärkning. Om d[v] =δ S [s, v] =δ S [s, v] så är δ S [s, v] δ[s, u]+w(u, v) = d[u] +w(u, v). Noden kommer inte att märkas om utan behåller märkningen d[v] =δ S [s, v] =δ S [s, v]. Om δ S [s, v] <δ S [s, v] så måste kortaste S -vägen gå över u. Låtz vara noden som kommer efter u på en sådan väg. Om z v måste z S och δ S [s, v] = δ S [s, u]+w(u, z)+δ S [z,v] δ S [s, z]+δ S [z,y] δ S [s, v]. Men detta är omöjligt. Alltså måste z = v och δ S [s, v] =δ S [s, u]+w(u, v) =d[u]+w(u, v). Nodenv kommer då att märkas om så att den får d[v] =d[u]+w(u, v) =δ S [s, v]. När man går ur slingan har man beräknat korrekt kortaste avstånd d[t] från s till t. Negativa kantvikter tillåtna Om en graf har negativa kantvikter men inga negativa cykler så finns kortaste vägar. Men de kan inte hittas med Dijkstras algoritm. Mer avancerad algoritm krävs. Om en graf har negativa cykler finns följande val. 1. Acceptera att kortaste avstånd inte kan beräknas och förkasta grafen. 2. Leta efter kortaste stigar istället för vägar. Ingen effektiv algoritm som gör detta är känd. 3. Leta efter kortaste vägar med begränsning att de får innehålla högst k kanter. Detta går att göra relativt enkelt. (Men är det det man är ute efter?) Bellman-Fords algoritm Följande algoritm löser problemet enligt fall 1 ovan. Vi antar att varje nod kan nås från s. Målet är då att hitta kortaste vägar från s till varje annan nod. Bellman-Ford(G = V,E,s V, w : E R) (1) foreach u V (2) d[u] (3) d[s] 0 (4) for i =1to V 1 (5) foreach (u, v) E (6) if d[v] >d[u] +w(u, v) (7) d[v] d[u] +w(u, v) (8) p[v] u (9) foreach (u, v) E (10) if d[v] >d[u] +w(u, v) (11) return Negativ cykel! (12) return d, p

Om en negativ cykel finns talar algoritmen om det. Annars svarar den med d och p. Komplexitet Inledande märkningen tar O( V ) steg. Yttre slingan tar O( V ) steg. Inre slingan tar O( E ) steg. Det ger tillsammans O( V E ) steg. Den sista kontrollen tar O( E ) steg. Totalt får vi O( V E ) =O( V 3 ). Det är sämre än Dijkstras algoritm. Korrekthetsanalys Vi antar först att grafen inte har negativa cykler. Då existerar kortaste vägar. Vi använder följande invariant för yttre slingan: Efter iteration k gäller för alla noder u med d[u] < att d[u] δ k [u] där δ k [u] =längden på den kortaste väg som har högst k kanter. Pekarna p[u] som har tilldelats ett värde genererar ett träd som är rotat i s och om p[v] =u så gäller d[v] d[u] +w(u, v). Påståendet är sant för k =0. Vi antar att det är sant för k och visar att det då är sant för k +1 också. Om u kan nås med en väg som innehåller högst k kanter finns det en kortaste sådan väg. Kalla längden på den för δ k [u]. Antag att noden före u på en sådan väg är x. Dåmåsteδ k [u] =δ k 1 [x]+w(x, u) och enligt antagandet är då δ k [u] d[x]+w(x, u). Omd[u] >d[x]+w(x, u) kommer d[u] att märkas om till d[x]+w(x, u). I senare steg i samma iteration kan värdet på d[u] minska. I vilket falls som helst kommer d[u] δ k [u] när iterationen är klar. För en kant (u, v) med p[v] =u gäller d[v] =d[u]+w(u, v) precis efter märkningen. Om inte v märks om (och p[v] ändras) kan ändå d[u] sänkas. Men d[v] d[u] +w(u, v) kommer att fortsätta gälla. Antag att algoritmen i något steg skulle införa en pekare p[y] =x som genererar en pekarcykel. Då skulle det före införandet av pekaren finnas en cykel (x, y), (y, z 1 ),..., (z r,x) där d[y] >d[x] +w(x, y) (annars ingen ny pekare) och med d[z 1 ] d[y] +w(y, z 1 ) o.s.v. för de övriga kanterna. Beräkna summan (d[y] d[x]) + (d[z 1 ] d[y]) +... +(d[x] d[z r ]). Summan är 0 och samtidigt >w(x, y) +w(y, z 1 )+... + w(z r,x). Cykeln är då negativ vilket är omöjligt. Pekarna genererar inga cykler. Man kan då lätt se att de bildar ett träd som är rotat i s. Antag nu att yttersta slingan i första delen av algoritmen är klar. Då är d[u] δ n 1 [u] för alla u. Men eftersom det finns en väg u, p[u],p[p[u]],... med d[u] = d[p[u]] + w(p[u],u) o.s.v. som leder till s så ser vi att det finns en väg med värde d[u] från s till u. Dåmåsted[u] =δ n 1 [u]. Eftersom varje kortaste väg innehåller som mest n 1 kanter får vi d[u] =längden på kortaste vägen från s till u. Återstår att se om sista steget i algoritmen godkänner grafen. Men d[v] >d[u]+ w(u, v) är omöjligt eftersom d värdena nu anger korrekta avstånd. Så grafen måste bli godkänd.

Antag nu att grafen innehåller en negativ cykel med noderna u 1,u 2,..., u r.första steget i algoritmen kommer att generera d- värden (som inte kommer att vara korrekta avstånd). Om d[u i+1 ] d[u i ]+w(u i,u i+1 ) för alla i skulle summan (d[u 2 ] d[u 1 ]) + (d[u 3 ] d[u 2 ]) +... +(d[u 1 ] d[u r ]) vara både 0 och w(u 1,u 2 )+... + w(u r,u 1 ). Eftersom cykeln är negativ är det omöjligt och det måste finnas i med d[u i+1 ] >d[u i ]+w(u i,u i+1 ) Den olikheten kommer sista delen av algoritmen att upptäcka.