IN2220 - lgoritmer og datastrukturer HØSTN 2016 Institutt for informatikk, Universitetet i Oslo orelesning 7: rafer III Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 1 / 28
agens plan: evis for Prim ybde-først søk iconnectivity Strongly connected components Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 2 / 28
ra siste forelesning: Lemma (Løkke-lemma for spenntrær) nta at U er et spenntre for en graf, og at kanten e ikke er med i treet U Hvis vi legger kanten e til treet U, dannes en entydig bestemt enkel løkke. Hvis vi fjerner en vilkårlig kant i denne løkken, vil vi igjen ha et spenntre for grafen Invariant et treet T som dannes av de kantene (og deres endenoder) vi til nå har plukket ut, er slik at det finnes et minimalt spenntre U for grafen som inneholder (alle kantene i) T Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 3 / 28
evis med motsigelse La (u, v) være den kanten med lavest vekt fra U til V-U. Påstå: (u, v) er en del av MST for Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 4 / 28
ybde-først søk
ybde-først søk v o i d dybdeørstsøk ( Node v ) { v. merke = t r u e ; f o r < h v e r nabo w t i l v > { i f (! w. merke ) { dybdeørstsøk (w ) ; } } } Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 6 / 28
S vs S ybde-først søk Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 7 / 28
S vs S ybde-først søk Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 8 / 28
S vs S ybde-først søk Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 9 / 28
ybde-først søk ybde-først-spenntre for urettet sammenhengende grafer huske back-pointers Ulike type kanter gitt en bestemt kjøring av dfs 1 tree edges 2 back edges Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 10 / 28
ybde-først søk S, urettet graf (1) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (2) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (3) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (4) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (5) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (6) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (7) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (8) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (9) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (10) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (11) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (12) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (13) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (14) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S, urettet graf (15) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 11 / 28
ybde-først søk S: adding visiting time (1) 1 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 12 / 28
ybde-først søk S: adding visiting time (2) 2 1 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 12 / 28
ybde-først søk S: adding visiting time (3) 2 1 3 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 12 / 28
ybde-først søk S: adding visiting time (4) 2 1 3 4 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 12 / 28
ybde-først søk S: adding visiting time (5) 2 1 3 4 5 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 12 / 28
ybde-først søk S: adding visiting time (6) 2 1 6 3 4 5 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 12 / 28
ybde-først søk S: adding visiting time (7) 2 1 6 3 4 5 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 12 / 28
ybde-først søk S: adding visiting time (8) 2 1 6 3 4 5 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 12 / 28
ybde-først søk S: adding visiting time (9) 2 1 6 3 4 7 5 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 12 / 28
iconnectivity
iconnectivity iconnectivity efinition n sammenhengende urettet graf er bi-connected hvis det ikke er noen noder som ved fjerning gjør at grafen blir ikke sammenhengende. Slik node heter cut-vertices eller articulation point. genskapen ved biconnectede grafer: et er to disjunkte stier mellom hvilke to noder som helst..eks. Nettverk-feiltoleranse: dersom en ruter går ned, finnes det alltid en alternativ vei å rute datapakkene på. Viktig å identifisere disse nodene. Single point to failure! Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 14 / 28
iconnectivity iconnectivity efinition n sammenhengende urettet graf er bi-connected hvis det ikke er noen noder som ved fjerning gjør at grafen blir ikke sammenhengende. Slik node heter cut-vertices eller articulation point. genskapen ved biconnectede grafer: et er to disjunkte stier mellom hvilke to noder som helst..eks. Nettverk-feiltoleranse: dersom en ruter går ned, finnes det alltid en alternativ vei å rute datapakkene på. Viktig å identifisere disse nodene. Single point to failure! Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 14 / 28
iconnectivity iconnectivity efinition n sammenhengende urettet graf er bi-connected hvis det ikke er noen noder som ved fjerning gjør at grafen blir ikke sammenhengende. Slik node heter cut-vertices eller articulation point. genskapen ved biconnectede grafer: et er to disjunkte stier mellom hvilke to noder som helst..eks. Nettverk-feiltoleranse: dersom en ruter går ned, finnes det alltid en alternativ vei å rute datapakkene på. Viktig å identifisere disse nodene. Single point to failure! Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 14 / 28
iconnectivity r grafen bi-connected? 1. S-spenntre Konstruer et dfs spenntre fra en node v av 2 1 lle kantene (v, w) i er representert i treet som enten en tree edge eller som en back edge 3 4 Nummerer nodene når vi besøker dem 7 5 6 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 15 / 28
iconnectivity r grafen bi-connected? 2. Low-number for hver node i treet: beregn low-nummeret 2 1 1 1 laveste noden som kan nås ved å ta 0 eller flere tree edge etterfulgt av 0 eller 1 back edge ette gjør vi like før vi trekker oss tilbake (idet vi er ferdig med kallet) note: på dette tidspunktet har funnet low for alle barna til noden 7 7 3 1 5 4 4 1 6 4 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 15 / 28
iconnectivity r grafen bi-connected? 3. ut-vertex n node v er en cutvertex i hvis: 1 v er rotnoden av S -treet og har to eller flere tree edges 2 v ikke er rotnoden av S og det finnes en tree edge (v, w) slik at low(w) num(v) 7 7 3 1 2 1 5 4 1 1 4 1 6 4 Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 15 / 28
Rot iconnectivity root Roten av S-treet er en cutvertex hvis den har to eller flere utgående tree edges. tilbaketrekking må gå gjennom rooten for å komme fra den ene til den andre sub-treet. Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 16 / 28
Rot iconnectivity root Roten av S-treet er en cutvertex hvis den har to eller flere utgående tree edges. tilbaketrekking må gå gjennom rooten for å komme fra den ene til den andre sub-treet. Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 16 / 28
Ikke-rot node iconnectivity t ikke-rot node v er en cutvertex hvis den har et barn w slik at ingen back edge som starter i subtreet av w når en predesessornode til v. root Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 17 / 28
Ikke-rot node iconnectivity t ikke-rot node v er en cutvertex hvis den har et barn w slik at ingen back edge som starter i subtreet av w når en predesessornode til v. w v root Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 17 / 28
iconnectivity v o i d d f s ( v ) { v. num = c o u n t e r ++; // v. s t a t u s = v i s i t e d ; // I am v i s i t i n g now f o r each w a d j a c e n t to v i f w. s t a t u s v i s i t e d w. p a r e n t = v ; // remember p a r e n t d f s (w) // r e c u r } Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 18 / 28
iconnectivity v o i d a s s i g n l o w ( Node v ) { v. low = v. num ; // at l e a s t num f o r each w a d j a c e n t to v { // n e i g h b o r s i n! i f (w. num > v. num) // f o r w a r d edge { a s s i g n l o w (w ) ; i f (w. low v. num) system. out. p r i n t l n ( v + an a r t i c u l a t i o n p o i n t! ) ; v. low = min ( v. low, w. low ) ; } } } e l s e // w. num v. num i f ( v. p a r e n t w) // back edge v. low = min ( v. low, w. num ) ; test for root not shown the two traversals (dfs + assignlow) can be combined into 1 pass. Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 19 / 28
Strongly onnected omponents
Strongly onnected omponents rettet graf & S n rettet graf er sterkt sammenhengende hvis og bare hvis vi fra hver eneste node v klarer å besøke alle de andre nodene i grafen ved et dybde-først søk fra v Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 21 / 28
Strongly onnected omponents Strongly onnected omponents (S) partisjonere i såkalt strongly connected components efinition (S) itt en rettet graf = (V, ). n strongly connected component av er en maksimal sett av noder U V s.t.: for alle u 1, u 2 U vi har at u 1 u 2 and u 2 u 1. Ide: og t har den samme S s = bruk dfs 2 ganger, en gang på og en gang på den reverserte grafen 1 t kompleksitet: lineær tid O( + V ) 1 itt = (V, ) da er t = (V, t ) hvor (v, u) t iff (u, v) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 22 / 28
Strongly onnected omponents Strongly onnected omponents (S) partisjonere i såkalt strongly connected components efinition (S) itt en rettet graf = (V, ). n strongly connected component av er en maksimal sett av noder U V s.t.: for alle u 1, u 2 U vi har at u 1 u 2 and u 2 u 1. Ide: og t har den samme S s = bruk dfs 2 ganger, en gang på og en gang på den reverserte grafen 1 t kompleksitet: lineær tid O( + V ) 1 itt = (V, ) da er t = (V, t ) hvor (v, u) t iff (u, v) Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 22 / 28
S Strongly onnected omponents 1. S på 1 gjør S traversering 2 husker post-order (finished time stamp) H J I Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 23 / 28
S Strongly onnected omponents 1. S på 1 gjør S traversering 2 husker post-order (finished time stamp) H J I Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 23 / 28
S Strongly onnected omponents 3 6 5 1. S på 1 gjør S traversering 2 husker post-order (finished time stamp) 2 4 9 H 8 J 1 10 7 I Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 23 / 28
S Strongly onnected omponents 2. Reversere reversere kantene til og får t 3. S på t iterere S på t i avtagende rekkefølger! Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 23 / 28
Strongly onnected omponents ndre fase (1) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (2) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (3) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (4) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (5) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (6) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (7) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (8) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (9) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (10) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (11) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (12) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (13) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (14) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (15) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (16) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (17) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (18) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }, {,,, }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (19) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }, {,,, }} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (20) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }, {,,, }, {}} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (21) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }, {,,, }, {}} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
Strongly onnected omponents ndre fase (22) 3 6 5 2 4 9 H 8 J 1 10 7 I strongly connected components: {{}, {H, J, I }, {,,, }, {}, {}} Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 24 / 28
rgument Strongly onnected omponents Trenger å vise v og w er i den samme S treet av t. a har vi v w v Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 25 / 28
rgument Strongly onnected omponents Trenger å vise La x være roten av en dfs tre av t og 2 noder v og w i det samme treet av t. a har vi at x v x and x w x x er en rot x v in t v x in x har høyere post-order nummer enn v x ble ferdig senere enn v i den første dybde-først traversering av v må være en etterkommer av x ellers vil v bli ferdig etter x. x v Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 25 / 28
Oppsummering
Oppsummering rafer: Oppsummering Implementasjon av grafer Topologisk sortering Korteste vei, uvektet graf ijkstras alg. (korteste vei, vektet graf) Prim, Kruskal (minimale spenntrær) ybde-først søk biconnectivity, S Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 27 / 28
Oppsummering Neste forelesning: 12. oktober Kombinatorisk søk og Kompleksitet Ingrid hieh Yu (Ifi, UiO) IN2220 05.10.2016 28 / 28