öreläsning 3 Grfer och grfsökning T71: LG Utskriftsversion v föreläsning i tstrukturer och lgoritmer 17 november 2015 Tommy ärnqvist, I, Linköpings universitet 3.1 Innehåll Innehåll 1 Grfer 1.1 Introduktion.......................................... 1.2 T grf........................................... 1.3 tstrukturer......................................... 1 1 6 6 2 Sökning i oriktde grfer 2.1 S.............................................. 2.2 S.............................................. 2.3 S vs S.......................................... 8 8 12 15 1 3.2 Grfer 1.1 Introduktion efinition n grf är ett pr (V, ), där V är en mängd noder (eller hörn) är en mängd v pr v noder kllde bågr (eller knter) Noder och bågr är positioner och kn lgr element ng. vertices, edges 3.3 ågtyper Riktd båge ordnt pr v noder (u, v) u är strtnoden, v är slutnoden Oriktd båge oordnt pr v noder {u, v} 1
I en riktd grf är ll bågr riktde I en oriktd grf är ll bågr oriktde OR flight 1206 PV OR 849 miles PV 3.4 Vrför skll mn studer grflgoritmer? Tusentls prktisk tillämpningr Hundrtls känd grflgoritmer Intressnt bstrktion med stor tillämpbrhet Gren v dtlogi och diskret mtemtik med mång utmningr 3.5 Protein till protein-interktionsnätverk Jeong et l, Nture Review Genetics 3.6 Internet krtlgt v Opte-projektet Opte Project 3.7 2
Vetenskplig klickströmmr http://www.plosone.org/rticle/info:doi/10.1371/journl.pone.0004803 3.8 10 miljoner cebook-vänner Visulizing riendship v Pul utler 3.9 n vecks mejl inom nron 3
3.10 Utvecklingen hos lobbyingsmrbeten inom The volution of Lobbying olitions v Pierre de Vries från JoSS Visuliztion Symposium 2010 3.11 Tillämpningr grf kommuniktion krets meknisk finnsiell trnsport internet brädspel socilt nätverk neurlt nätverk proteinnätverk kemisk smmnsättning nod telefon, dtor grind, register, processor led ktie, vlut gtukorsning, flygplts klss -nät pjäserns positioner person, ktör neuron protein molekyl båge fiberoptisk kbel koppling stg, bjälke, fjäder trnsktion väg, flygrutt förbindelse giltigt drg vänskp, reltion synps protein-proteininterktion bindning 3.12 Terminologi n båge hr ändpunkter ( hr ändpunktern U och V ) ågr som slutr i en nod n sägs vr incident (, d och b är incident till V ) Noder kn vr grnnr (U och V är grnnr) Noder hr grd (X hr grd 5) 4
Prllell bågr (h och i är prllell bågr) Öglor ( j är en ögl) U c V d W b e X g h i Z j f Y ng. endpoints, incident, djcent, degree, prllel, loops 3.13 Mer terminologi n cykel är en cirkulär sekvens v lternernde noder och bågr. Vrje båge föregås och efterföljs v sin ändpunkter. n enkel cykel är en cykel sådn tt ll dess noder och bågr är distinkt. 1 = (V,b,X,g,Y, f,w,c,u,,v ) är en enkel cykel. 2 = (U,c,W,e,X,g,Y, f,w,d,v,,u) är inte en enkel cykel. V b U c d 2 W e X 1 g h Z f Y ng. cycle, simple cycle 3.14 genskper genskp 1 v deg(v) = 2m evis: Vrje båge räkns två gånger genskp 2 I en oriktd grf utn öglor och prllell bågr gäller m n(n 1)/2 evis: Vrje nod hr mx grd (n 1) Nottion n ntlet noder m ntlet bågr deg(v) är nod v:s grd xempel n = 4 m = 6 deg(v) = 3 3.15 Någr lgoritmisk grfproblem Stig. inns det en stig melln s och t? Kortste väg. Vilken är den kortste stigen melln s och t? ykel. inns det en cykel i grfen? ulertur. inns det en cykel som nvänder vrje båge exkt en gång? Hmiltoncykel. inns det en cykel som nvänder vrje nod exkt en gång? 5
Konnektivitet. inns det en förbindelse melln ll noder? MST. Vilket är det bäst sättet tt bind smmn ll noder? ikonnektivitet. inns det en nod som gör tt grfen inte hänger smmn om mn tr bort den? Plnritet. Går det tt rit grfen utn tt någr bågr korsr vrndr? Grfisomorfi. Är två grfer identisk bortsett från nmnen på nodern? Utmning. Vilk v problemen ovn är enkl? Svår? Omöjlig tt lös effektivt? 3.16 1.2 T grf e viktigste metodern för oriktde grfer Noder och bågr är positioner lgrr element Åtkomstmetoder endvertices(e): en rry med e:s två ändpunkter opposite(v,e): noden motstt v längs e redjcent(v,w): true omm v och w är grnnr replce(v,x): ersätt elementet i nod v med x replce(e,x): ersätt elementet i båge e med x 3.17 e viktigste metodern för oriktde grfer Uppdteringsmetoder insertvertex(o): sätt in en nod som lgrr elementet o insertdge(v,w,o): sätt in en knt (v,w) som lgrr elementet o removevertex(v): t bort nod v (och dess incident bågr) removedge(e): t bort båge e Itertormetoder incidentdges(v): bågrn incident till v vertices(): ll noder i grfen edges(): ll bågr i grfen 3.18 1.3 tstrukturer åglist n sekvens v noder är en sekvens v positioner för nodobjekt n sekvens v bågr är en sekvens v positioner för bågobjekt Nodobjekt lgrr element och referenser till positioner i nodsekvensen ågobjekt lgrr element, objekt för strtnod, objekt för slutnod och referens till position i bågsekvensen v u b c w d z u v w z b c d 3.19 6
Grnnlist Lägger till extr struktur till båglistn Vrje nod hr en sekvens v dess incident bågr med referenser till de incident bågrns bågobjekt ågobjekt utöks med referenser till ssocierde positioner i incidenssekvensen för dess ändpunkter u v b w u v w b 3.20 Grnnmtris Lägger till extr struktur till båglistn Nodobjekten utöks med heltlsnycklr (index) ssocierde med nodern Tvådimensionell grnnrry Referens till bågobjekt för noder som är grnnr null för noder som inte är grnnr v b u w 0 u 1 v 2 w 0 1 2 0 1 2 b 3.21 symptotisk prestnd 7
n noder, m bågr ing prllell knter ing öglor åglist Grnnlist Grnnmtris minne O(n + m) O(n + m) O(n 2 ) incidentdges(v) O(m) O(deg(v)) O(n) redjcent (v, w) O(m) O(min(deg(v),deg(w)) insertvertex(o) O(n 2 ) insertdge(v, w, o) removevertex(v) O(m) O(deg(v)) O(n 2 ) removedge(e) 3.22 2 Sökning i oriktde grfer 2.1 S elgrfer n delgrf S v en grf G är en grf sådn tt Nodern i S är en delmängd v nodern i G ågrn i S är en delmängd v bågrn i G n spännnde delgrf v G är en delgrf som innehåller ll noder i G elgrf Spännnde delgrf ng. subgrph, spnning subgrph 3.23 Konnektivitet n grf är smmnhängnde om det finns en stig melln vrje pr v noder n smmnhängnde komponent i en grf G är en mximl smmnhängnde delgrf v G 8
Smmnhängnde grf j smmnhängnde grf med två smmnhängnde komponenter ng. connected, connected component 3.24 Träd och skogr tt (fritt) träd är en oriktd grf T sådn tt T är smmnhängnde T inte hr någr cykler en här definitionen v träd skiljer sig från den för rotde träd n skog är en oriktd grf utn cykler e smmnhängnde komponentern i en skog är träd Träd Skog ng. tree, forest 3.25 Spännnde träd och skogr tt spännnde träd till en smmnhängnde grf är en spännnde delgrf som är ett träd tt spännnde träd är inte unikt om inte ursprungsgrfen är ett träd Spännnde träd hr tillämpningr i design v kommuniktionsnätverk n spännnde skog till en grf är en spännnde delgrf som är en skog Grf Spännnde träd 9
ng. spnning tree, spnning forest 3.26 jupetförstsökning jupetförstsökning (S) är en llmän teknik för tt trverser en grf S i en grf G esöker ll noder och bågr i G vgör om G är smmnhängnde eräknr de smmnhängnde komponentern i G eräknr en spännnde skog till G S på en grf med n noder och m bågr tr O(n + m) tid S kn utöks för tt lös ndr grfproblem Hitt och beskriv en stig melln två givn noder i en grf Hitt en cykel i en grf 3.27 lgoritm för S procedure S(G) for ll u G.VRTIS() do STLL(u,UNXPLOR) for ll e G.GS() do STLL(e,UNXPLOR) for ll v G.VRTIS() do if GTLL(v) = UNXPLOR then S(G, v) procedure S(G, v) STLL(v,V ISIT ) for ll e G.ININTGS(v) do if GTLL(e) = UNXPLOR then w OPPOSIT(v, e) if GTLL(w) = UNXPLOR then STLL(e, ISOV RY ) S(G, w) else STLL(e, K) 3.28 xempel outforskd nod besökt nod outforskd båge ''discovery''-båge båge till förfder 3.29 10
xempel 3.30 S och lbyrintutforskning lgoritmen för S liknr en klssisk strtegi för tt utforsk lbyrinter Vi märker vrje korsning, hörn och återvändsgränd (nod) vi besöker Vi märker vrje korridor (båge) vi går genom Vi håller red på vägen tillbk till ingången (strtnoden) m.h.. ett snöre (rekursionsstcken) 3.31 genskper genskp 1 S(G,v) besöker ll noder och bågr i den smmnhängnde delen v G som v ingår i genskp 2 discovery -bågrn S(G,v) märker upp utgör ett spännnde träd till den smmnhängnde komponenten v G som v ingår i 3.32 nlys v S Märk/hämt märkning v nod/båge tr tid Vrje nod märks två ggr en gång som UNXPLOR en gång som VISIT 11
Vrje båge märks två ggr en gång som UNXPLOR en gång som ISOVRY eller K Metoden incidentdges nrops en gång för vrje nod S körs i tid O(n + m) givet tt grfen är representerd med en grnnlist kom ihåg tt v deg(v) = 2m 3.33 Hitt stigr Vi kn speciliser S-lgoritmen till tt hitt en stig melln två givn noder v och z Vi nropr S(G,v) med v som strtnod Vi nvänder en stck S för tt håll red på vägen från strtnoden till ktuell nod Så snrt vi stöter på målnoden z returnerr vi innehållet på stcken som den sökt stigen procedure PTHS(G, v, z) STLL(v,V ISIT ) S.PUSH(v) if v = z then skriv ut elementen i S return for ll e G.ININTGS(v) do if GTLL(e) = UNXPLOR then w OPPOSIT(v, e) if GTLL(w) = UNXPLOR then STLL(e, ISOV RY ) S.PUSH(e) PTHS(G, w, z) S.POP() // e else STLL(e, K) S.POP() // v 3.34 Hitt cykler Vi kn speciliser S-lgoritmen till tt hitt en enkel cykel Vi nvänder en stck S för tt håll red på vägen från strtnoden till ktuell nod Så snrt vi stöter på en knt (v,w) som leder till en förfder returnerr vi cykeln som innehållet på stcken från toppen till noden w procedure YLS(G, v, z) STLL(v,V ISIT ) S.PUSH(v) for ll e G.ININTGS(v) do if GTLL(e) = UNXPLOR then w OPPOSIT(v, e) S.PUSH(e) if GTLL(w) = UNXPLOR then STLL(e, ISOV RY ) YLS(G, w) S.POP() // e else // hittt cykel repet o S.POP() skriv ut o until o = w return S.POP() // v 3.35 2.2 S reddenförstsökning reddenförstsökning (S) är en llmän teknik för tt trverser en grf S i en grf G 12
esöker ll noder och bågr i G vgör om G är smmnhängnde eräknr de smmnhängnde komponentern i G eräknr en spännnde skog till G S på en grf med n noder och m bågr tr O(n + m) tid S kn utöks för tt lös ndr grfproblem Hitt och beskriv en kortste stig melln två givn noder i en grf Hitt en enkel cykel i en grf, om det finns någon 3.36 lgoritm för S procedure S(G) märk ll noder/bågr med UNXPLOR som i S for ll v G.VRTIS() do if GTLL(v) = UNXPLOR then S(G, v) procedure S(G, s) ny tom sekvens;.insrtlst(s); STLL(s,V ISIT ); i 0 while L i.ismpty() do L i+1 ny tom sekvens for ll v L i.lmnts() do for ll e G.ININTGS(v) do if GTLL(e) = UNXPLOR then w OPPOSIT(v, e) if GTLL(w) = UNXPLOR then STLL(e, ISOV RY ) STLL(w,V ISIT ) L i+1.insrtlst(w) else STLL(e,ROSS) i i + 1 3.37 xempel outforskd nod besökt nod outforskd båge ''discovery''-båge korsnde båge 3.38 xempel 13
L 2 L 2 L 2 3.39 genskper Låt G s beteckn den smmn-hängnde delen v G som s ingår i genskp 1 S(G,s) besöker ll noder och bågr i G s genskp 2 discovery -bågrn S(G,s) märker upp utgör ett spännnde träd T s till G s genskp 3 ör vrje nod v i L i gäller Stigen i T s från s till v hr i bågr Vrje stig från s till v i G s hr minst i bågr L 2 3.40 nlys v S Märk/hämt märkning v nod/båge tr tid Vrje nod märks två ggr en gång som UNXPLOR en gång som VISIT Vrje båge märks två ggr en gång som UNXPLOR en gång som ISOVRY eller ROSS Vrje nod sätts in en gång i en sekvens L i Metoden incidentdges nrops en gång för vrje nod S körs i tid O(n + m) givet tt grfen är representerd med en grnnlist kom ihåg tt v deg(v) = 2m 3.41 14
2.3 S vs S Tillämpningr Tillämpningr S S Spännnde träd, smmnhängnde komponenter, stigr, cykler Kortste stigr 2-smmnhängnde komponenter S S L 2 3.42 Knter som leder till redn besökt noder båge till förfder w är en förfder till v i trädet v discovery -bågr S korsnde båge w finns i smm nivå som v eller i näst nivå i trädet v discovery -bågr L 2 S 3.43 15