811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku

Samankaltaiset tiedostot
811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

5 Verkkoalgoritmeja. 5.1 Verkkojen esitystapoja

6 Verkkoalgoritmeja. 6.1 Verkkojen esitystapoja

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

Algoritmit 1. Luento 9 Ti Timo Männikkö

13 Lyhimmät painotetut polut

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Johdatus graafiteoriaan

Algoritmit 2. Luento 11 Ti Timo Männikkö

Eräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan.

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

TIE Tietorakenteet ja algoritmit 261

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

Johdatus graafiteoriaan

Lyhin kahden solmun välinen polku

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

10. Painotetut graafit

Pienin virittävä puu (minimum spanning tree)

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Luento 8 Ke Timo Männikkö

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Tietorakenteet ja algoritmit. Verkot. Ari Korhonen

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

10. Painotetut graafit

14. Luennon sisältö. Kuljetustehtävä. Verkkoteoria ja optimointi. esimerkki. verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

v 8 v 9 v 5 C v 3 v 4

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Johdatus verkkoteoriaan 4. luento

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

Alaraja vertailuihin perustuvalle järjestämiselle

Algoritmit 2. Luento 12 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Miten käydä läpi puun alkiot (traversal)?

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

Algoritmit 2. Luento 13 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

isomeerejä yhteensä yhdeksän kappaletta.

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Kysymys: Voidaanko graafi piirtää tasoon niin, että sen viivat eivät risteä muualla kuin pisteiden kohdalla?

PARITUS KAKSIJAKOISESSA

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

9. Graafit Graafin abstrakti tietotyyppi

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

Äärellisten mallien teoria

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Luku 8. Aluekyselyt. 8.1 Summataulukko

Näytetään nyt relaatioon liittyvien ekvivalenssiluokkien olevan verkon G lohkojen särmäjoukkoja. Olkoon siis f verkon G jokin särmä.

Stabiloivat synkronoijat ja nimeäminen

keskenään isomorfiset? (Perustele!) Ratkaisu. Ovat. Tämän näkee indeksoimalla kärjet kuvan osoittamalla tavalla: a 1 b 3 a 5

Silmukkaoptimoinnista

Algoritmit 1. Luento 4 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Graafin 3-värittyvyyden tutkinta T Graafiteoria, projektityö (eksakti algoritmi), kevät 2005

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

Algoritmit 2. Luento 6 To Timo Männikkö

Johdatus verkkoteoriaan luento Netspace

Algoritmit 1. Luento 10 Ke Timo Männikkö

Stabilointi. Marja Hassinen. p.1/48

Tarkennamme geneeristä painamiskorotusalgoritmia

Graafin virittävä puu 1 / 20

811312A Tietorakenteet ja algoritmit I Johdanto

Algoritmit 1. Luento 7 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

Kurssikoe on maanantaina Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla.

Algoritmit 2. Luento 12 To Timo Männikkö

b) Olkoon G vähintään kaksi solmua sisältävä puu. Sallitaan verkon G olevan

Taulun avoimista haaroista saadaan kelvolliset lausejoukot

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

Puiden karakterisointi

S BAB ABA A aas bba B bbs c

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Algoritmit 2. Luento 10 To Timo Männikkö

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

Transkriptio:

811312A Tietorakenteet ja algoritmit 2016-2017 V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku

Sisältö 1. Johdanto 2. Leveyshaku 3. Syvyyshaku 4. Kruskalin algoritmi 5. Dijkstran algoritmi 811312A TRA Verkot / osa 1 2

V.1 Johdanto Verkkoalgoritmit ovat yleisimpiä ja tärkeimpiä algoritmityyppejä tunnetaan suuri määrä erilaisia algoritmeja verkkoalgoritmeja on analysoitu laajasti. Yleisneuvo algoritmiseen ongelmaan: muunna verkkojen ongelmaksi ratkaisu saattaa olla yleisesti tunnettu tai ongelma osoitettu vaikeaksi. 811312A TRA Verkot / osa 1 3

V.1.1 Verkon määritelmä Verkko (graafi, graph) on pari G = (V, E), missä V on solmujen (vertices) epätyhjä joukko E on välien (edges) joukko E V V (relaatio solmujen joukossa) E määrittelee, mitkä solmut on kytketty toisiinsa. Verkko voi olla suunnattu tai suuntaamaton: Suuntaamattomassa verkossa ehdosta i, j E seuraa aina j, i E. Verkko voi olla painotettu: väleihin liitetään luku, ns. painoarvo 811312A TRA Verkot / osa 1 4

V.1.2 Esimerkki 1 1 2 2 5 3 5 3 4 4 Suunnattu verkko Suuntaamaton verkko 811312A TRA Verkot / osa 1 5

V.1.2 Esimerkki (2) Kuvion esittämille verkoille solmujen joukko V = { 1, 2, 3, 4, 5 }. välien joukko suunnatulle verkolle E = {(1,2),(2,4),(2,5),(3,2),(3,5),(4,3),(5,4)} välien joukko suuntaamattomalle verkolle E = {(1,2),(2,1),(2,4),(4,2),(2,5),(5,2),(3,2),(2,3),(3,5), (5,3),(4,3),(3,4),(5,4),(4,5)} Suunnatuille väleille käytetään joskus kulmasulkeita ja silloin kaarisulut varataan suuntaamattomille (kaksisuuntaisille) väleille 811312A TRA Verkot / osa 1 6

V.1.3 Verkkojen esittäminen Verkko: 1 Matriisesitys: 0 1 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 2 Adj 5 3 1 2 2 / 4 5 / 4 3 2 5 / 4 3 / Vieruslistaesitys: 5 4 /

V.2 Leveyshaku (Breadth-first search) Yksinkertaisimpia algoritmeja verkon läpikäymiseen Toimii monien algoritmien pohjaratkaisuna Idea: Valitaan kiinteä solmu s ja käydään välejä systemaattisesti läpi, kunnes kohdataan kaikki solmut, joihin solmusta s voidaan päästä. Ensin löydetään kaikki etäisyydellä 1 olevat solmut, sitten etäisyydellä 2 olevat solmut jne. -> Nimitys leveyshaku 811312A TRA Verkot / osa 1 8

V.2 Leveyshaku (2) Käyttää (FIFO-tyyppistä) jonoa Q Operaatiot ENQUEUE ja DEQUEUE Taulukko color: Solmujen värit kussakin vaiheessa Valkoinen: Solmua ei vielä löydetty Musta: Solmu ja sen kaikki naapurit löydetty Harmaa: Solmu löydetty mutta sillä voi olla valkeita naapureita Taulukko d: Solmujen etäisyydet lähtösolmusta Taulukko p: Solmujen edeltäjät lyhimmässä polussa Lopuksi voidaan lukea lyhin polku mihin tahansa solmuun (lopusta alkuun) 811312A TRA Verkot / osa 1 9

V.2.1 Leveyshaun algoritmi Syöte: Verkko G=(V,E) ja sen solmu s. Verkolle käytetään vieruslistaesitystä. Tulostus: N solmujen lukumäärä. N-paikkaiset taulukot p,d ja color indeksoidaan verkon solmuilla. Taulukkoon d lasketaan solmun etäisyys syötesolmusta s. Arvo INF = ei polkua. Taulukkoon p lasketaan solmun edeltäjäsolmu jossakin lyhimmässä polussa syötesolmusta s. Arvo NIL = ei polkua. BFS(G,s) 1. for each u in V 2. color[u] = WHITE 3. d[u] = INF 4. p[u] = NIL 5. d[s] = 0 6. color[s] = GRAY 7. Q = EMPTY 8. ENQUEUE(Q,s) 9. while Q!= EMPTY 10. u = DEQUEUE(Q) 11. for each v in Adj[u] 12. if color[v] == WHITE 13. color[v] = GRAY 14. d[v] = d[u]+1 15. p[v] = u 16. ENQUEUE(Q,v) 17. color[u] = BLACK 18. return 811312A TRA Verkot / osa 1 10

V.2.2 Esimerkki: Leveyshaun eteneminen 1: 2: a b c d INF 0 INF INF a b c d 1 0 INF INF INF INF INF e f g INF 1 INF Q:b Q:a, f 0 e f g 1 1 3: a b c d 4: 1 0 INF INF a b c d 1 0 2 INF INF 1 INF e f g Q: f 1 2 1 2 e f g Q:e, c, g 2 2 2 811312A TRA Verkot / osa 1 11

V.2.2 Esimerkki: Leveyshaun eteneminen (2) 5: a b c d 6: 1 0 2 INF a b c d 1 0 2 3 2 1 2 e f g Q:c, g 2 2 2 1 2 e f g Q:g, d 2 3 7: 8: a b c d a b c d 1 0 2 3 1 0 2 3 2 1 2 e f g Q:d 3 2 1 2 e f g Q: 811312A TRA Verkot / osa 1 12

V.2.3 Leveyshaun algoritmin analyysi: kompleksisuus Oletetaan, että verkossa N solmua ja M väliä Tarkka askelten määrä riippuu verkon rakenteesta Yläraja suoritettavien rivien määrälle 6 (N+M) Siis algoritmin kompleksisuusluokka O(N+M) HUOM! Jos verkossa lähes kaikkien solmujen välillä on kytkentä, on M luokkaa N 2. Tällöin siis algoritmin kompleksisuus on luokkaa O(N 2 ). 811312A TRA Verkot / osa 1 13

V.2.3 Leveyshaun algoritmin analyysi: oikeellisuus Olkoon algoritmin syötesolmu s Merkintä: (s,v) on solmun v etäisyys solmusta s Algoritmi todettu oikeaksi, kun osoitetaan: 1. Algoritmin suorituksen jälkeen kaikki solmusta s saavutettavat solmut löydetään 2. Taulukon d arvo d[v] = (s,v) 3. Jos v s, ja v voidaan saavuttaa solmusta s, niin jokin lyhimmistä poluista solmusta s solmuun v on polku solmusta s solmuun p[v] ja väli (p[v],v) 811312A TRA Verkot / osa 1 14

V.2.4 Leveyshaun sovelluksia Lyhimmän polun hakeminen kahden solmun väliltä Verkon yhtenäisyyden selvittäminen Yhdistettyjen komponenttien hakeminen 811312A TRA Verkot / osa 1 15

V.2.4.1 Lyhimmän polun tulostaminen Syöte: Verkko G=(V,E) ja sen solmut s ja v. Algoritmissa oletetaan ensin ajettavan BFS(G,s), jonka tuottamaa taulukkoa p käytetään. Tulostus: Lyhin polku solmusta s solmuun v tai ilmoitus siitä, että polkua ei ole. BFS_POLKU(G,s,v) 1. if v==s 2. tulosta s 3. else 4. if p[v] == NIL 5. tulosta Ei polkua 6. else 7. BFS_POLKU(G,s,p[v]) 8. tulosta v 9. return 811312A TRA Verkot / osa 1 16

V.3 Syvyyshaku Monipuolisempi kuin leveyshaku Laajempi sovellettavuus Hieman haastavampi käyttää Idea: Mennään verkossa aina aluksi niin syvälle kuin päästään, ts. tarkistetaan, onko tutkittavalla solmulla s vielä tutkimattomia siitä lähteviä välejä Kun kaikki välit on tutkittu, algoritmi perääntyy solmuun, josta solmu s löydettiin ja tutkii siitä lähtevät välit Jatketaan, kunnes lähtösolmusta saavutettavat solmut on kaikki tutkittu Jos vielä tutkimattomia solmuja, valitaan uusi lähtösolmu 811312A TRA Verkot / osa 1 17

V.3 Syvyyshaku (2) Toteutuksesta: Käytetään samankaltaista solmujen värittämistä ja edeltäjätaulukkoa kuin leveyshaussa Lisäksi globaali askelmuuttuja, joka ilmaisee kunkin solmun löytämis- ja tarkastelun lopettamisajan Tallennetaan aikaleimoina kahteen taulukkoon Aikaleimojen avulla saadaan verkon rakenteesta tarkempaa tietoa kuin leveyshaulla 811312A TRA Verkot / osa 1 18

V.3.1 Syvyyshaun algoritmi Syöte: Verkko G=(V,E) ja sen solmu s. Verkolle käytetään vieruslistaesitystä. Tulostus: Olkoon N solmujen lukumäärä. N-paikkaiset taulukot p,d,f ja color indeksoidaan verkon solmuilla. Taulukkoon p lasketaan solmun edeltäjäsolmu syvyyshakupuussa. Taulukkoon d lasketaan solmun havaitsemisaika ja taulukkoon f solmun käsittelyn lopetusaika. DFS(G) 1.for each u in V 2. color[u] = WHITE 3. p[u] = NIL 4. time = 0 5.for each u in V 6. if color[u]==white 7. DFS_VISIT(u) 8.return DFS_VISIT(u) 1. color[u] = GRAY 2. time = time+1 3. d[u] = time 4. for each v in Adj[u] 5. if color[v]==white 6. p[v] = u 7. DFS_VISIT(v) 8. color[u] = BLACK 9. time = time+1 10.f[u] = time 11.return 811312A TRA Verkot / osa 1 19

V.3.2 Syvyyshaun eteneminen 1: a b c 2: 1/ a b c 1/ 2/ d e f d e f 3: a b c 4: a b c 1/ 2/ 1/ 2/ 3/ d e f B 4/ 3/ d e f 811312A TRA Verkot / osa 1 20

V.3.2 Syvyyshaun eteneminen (2) 5: a b c 6: a b c 1/ 2/ 1/ 2/ B 4/5 3/ d e f B 4/5 3/6 d e f 7: a b c 8: a b c 1/ 2/7 1/8 2/7 B F B 4/5 3/6 d e f 4/5 3/6 d e f 811312A TRA Verkot / osa 1 21

V.3.2 Syvyyshaun eteneminen (3) 9: a b c 10: a b c 1/8 2/7 9/ 1/8 2/7 9/ F B F B C 4/5 3/6 d e f 4/5 3/6 10/ d e f 11: a b c 1/8 2/7 9/ F B C 4/5 3/6 10/11 d e f 12: a b c 1/8 2/7 9/12 F B C 4/5 3/6 10/11 d e f 811312A TRA Verkot / osa 1 22

V.3.3 Syvyyshaun kompleksisuus Oletetaan, että verkossa N solmua ja M väliä Algoritmi DFS_VISIT suoritetaan täsmälleen kerran jokaiselle solmulle Jokainen solmusta lähtevä väli tutkitaan DFS_VISITissä vakioaikaisella operaatiolla sekä mahdollisella DFS_VISIT-kutsulla Siis kompleksisuus Θ(N+M) 811312A TRA Verkot / osa 1 23

V.3.4 Syvyyshaun ominaisuuksia Edeltäjätaulukossa p[u] = v, jos ja vain jos (u,v) on verkon väli ja v havaitaan siinä vaiheessa, kun u on väriltään harmaa Muodostetaan verkko, jonka välit ovat (p[u],u) solmuille u joilla on edeltäjä Saadaan puiden muodostama verkko = syvyyssuuntainen virittävä metsä (depth-first forest) Jos solmu v samassa puussa solmun u kanssa ja solmusta u lähtevässä alipuussa, sanotaan, että u on solmun v edeltäjä ja v solmun u jälkeläinen Solmu u solmun v edeltäjä tarkalleen silloin, kun u on väriltään harmaa havaittaessa solmu v 811312A TRA Verkot / osa 1 24

V.3.4 Syvyyshaun ominaisuuksia (2) Esimerkkiverkon syvyysuuntainen virittävä metsä a c b f e d 811312A TRA Verkot / osa 1 25

V.3.4 Syvyyshaun ominaisuuksia (3) Olkoot u ja v verkon G solmuja ja suoritetaan verkolle syvyyshaku. Silloin jokin seuraavasta kolmesta ehdosta on voimassa: 1. Välit [d[u],f[u]] ja [d[v],f[v]] ovat erilliset eikä u ole solmun v jälkeläinen eikä v solmun u jälkeläinen 2. Väli [d[u],f[u]] sisältyy kokonaisuudessaan väliin [d[v],f[v]] ja u on solmun v jälkeläinen 3. Väli [d[v],f[v]] sisältyy kokonaisuudessaan väliin [d[u],f[u]] ja v on solmun u jälkeläinen Seuraus: Solmu v on solmun u jälkeläinen jos ja vain jos d[u] < d[v] < f[v] < f[u] 811312A TRA Verkot / osa 1 26

V.3.4 Syvyyshaun ominaisuuksia (4) Solmujen käsittelyajat esimerkkiverkossa a c b f e d 1 2 3 4 5 6 7 8 9 10 11 12 811312A TRA Verkot / osa 1 27

V.3.4 Syvyyshaun ominaisuuksia (5) Verkon välit jaetaan seuraaviin luokkiin: 1. Puuvälit (tree edges) ovat välejä syvyysmetsän puissa Siten (u,v) on puuväli, jos solmu v havaittiin väliä (u,v) tutkimalla 2. Takautuvat välit (back edges) välejä (u,v), joissa u on solmun v jälkeläinen jossakin syvyysmetsän puussa 3. Etenevät välit (forward edges) välejä (u,v), joissa u on solmun v edeltäjä jossakin syvyysmetsän puussa, ja (u,v) ei ole puuväli 4. Sivuttaisvälit (cross edges) ovat välejä, jotka eivät kuulu mihinkään luokista 1-3 811312A TRA Verkot / osa 1 28

V.3.4 Syvyyshaun ominaisuuksia (6) Välien luokittelu esimerkkiverkossa a b c 1/8 2/7 9/12 Puuväli F B C F Etenevä väli 4/5 3/6 d e f 10/11 B C Takautuva väli Sivuttaisväli 811312A TRA Verkot / osa 1 29

V.3.5 Syklin havaiseminen syvyyshaulla Verkossa sykli tarkalleen silloin, kun syvyyshaku tuottaa vähintään yhden takautuvan välin Väli (u,v) on takautuva, jos u on solmun v jälkeläinen Tällöin väliä ensimmäistä kertaa tutkittaessa solmun v on oltava harmaa, jolloin v on solmun u edeltäjä Takautuva väli voidaan havaita algoritmin suoritusvaiheessa -> Saadaan versio, joka havaitsee syklin 811312A TRA Verkot / osa 1 30

V.3.5 Syklin havaiseminen syvyyshaulla (2) Syöte: Verkko G=(V,E) ja sen solmu s. Verkolle käytetään vieruslistaesitystä. Tulostus: Kuten syvyyshaku, mutta palauttaa arvon TRUE, jos verkossa sykli ja arvon FALSE muuten DFS(G) 1.for each u in V 2. color[u] = WHITE 3. p[u] = NIL 4. time = 0 5. cycle = FALSE 6.for each u in V 7. if color[u]==white 8. DFS_VISIT(u) 9.return cycle DFS_VISIT(u) 1. color[u] = GRAY 2. time = time+1 3. d[u] = time 4. for each v in Adj[u] 5. if color[v]==gray 6. cycle=true 8. if color[v]==white 9. p[v] = u 10. DFS_VISIT(v) 13. color[u] = BLACK 14. time = time+1 15. f[u] = time 16. return 811312A TRA Verkot / osa 1 31

V.3.6 Vahvasti yhtenäiset komponentit Vahvasti yhtenäinen komponentti suunnatussa verkossa on sellainen maksimaalinen solmujen joukko, että aina kun u ja v ovat joukon solmuja, on olemassa polku sekä solmusta u solmuun v että solmusta v solmuun u Esimerkkiverkossa vahvasti yhtenäiset komponentit ovat {a}, {b,d,e}, {c} ja {f} Voidaan löytää syvyyshaulla Merkintä: kun G on verkko, niin G T on verkko joka saadaan G:stä kääntämällä välien suunnat Voidaan tehdä ajassa O(N+M), jos G:ssä M väliä 811312A TRA Verkot / osa 1 32

V.3.6 Vahvasti yhtenäiset komponentit (2) Syöte: Suunnattu verkko G=(V,E). Verkolle oletetaan käytettävän vieruslistaesitystä. Tulostus: Syöteverkon vahvasti yhtenäiset komponentit. SCC(G) 1. Suorita DFS(G), käytetään solmujen käsittelyajan päättymistaulukkoa f. 2. Muodosta G T 3. Suorita DFS(G T ), mutta pääsilmukassa (rivi 6) käsitellään solmut askelessa 1 saatujen f[u]:n arvojen suhteen vähenevässä järjestyksessä. 4. Askelessa 3 syntyvän virittävän metsän jokainen puu on verkon G vahvasti yhtenäinen komponentti. 811312A TRA Verkot / osa 1 33

V.3.6 Vahvasti yhtenäiset komponentit (3) Analyysi. Verkko G, jossa N solmua ja M väliä Kompleksisuus: Kahdesti syvyyshaku (Θ(N+M)) G T :n muodostaminen (Θ(N+M)) Koko algoritmin kompleksisuus Θ(N+M) 811312A TRA Verkot / osa 1 34

V.3.6 Vahvasti yhtenäiset komponentit (4) Oikeellisuus: 1. Jos solmut u ja v samassa komponentissa, G:ssä polku u:sta v:hen ja päinvastoin. Samoin G T :ssä. u ja v päätyvät samaan puuhun 2. Olkoot u ja v samassa puussa, jonka juuri on x Siis G T :ssä polut x->u ja x->v, joten G:ssä on polut u->x ja v->x Syvyyshakujärjestys G T :lle takaa myös G:ssä polut x->u ja x->v Siten u ja v samassa komponentissa Kohdat 1 ja 2 osoittavat algoritmin oikeaksi 811312A TRA Verkot / osa 1 35

V.3.7 Syvyyshaku suuntaamattomassa verkossa Toimii samaan tapaan kuin suunnatuissa verkoissa Välien luokittelua tulkittava Suuntaamattomassa verkossa väli (u,v) ja (v,u) samaistetaan Välin luokaksi annetaan se, joka tehdään, kun väliä tarkastellaan ensimmäistä kertaa, olipa kyseessä vali (u,v) tai (v,u) Suuntaamattoman verkon välit kaikki joko puuvälejä tai takautuvia välejä Syvyyssuuntaisen virittävän metsän puut antavat verkon yhtenäiset komponentit 811312A TRA Verkot / osa 1 36