Overview
tässä opetusohjelmassa käsitellään kytkettyjen komponenttien käsitettä ohjaamattomassa kaaviossa.
käymme läpi muutamia yksinkertaisia esimerkkejä saadaksemme peruskäsityksen, ja sitten listaamme kytkettyjen komponenttien ominaisuudet.
kytketyn komponentin määritelmä
kytketty komponentti tai yksinkertaisesti ohjaamattoman kuvaajan komponentti on aligrafi, jossa jokainen solmupari on liitetty toisiinsa polun kautta.
yritetään kuitenkin yksinkertaistaa sitä entisestään. Joukko solmuja muodostaa kytketyn komponentin suuntaamattomassa kaaviossa, jos mikä tahansa solmujoukosta voi saavuttaa minkä tahansa toisen solmun reunoja kiertämällä. Tärkeintä tässä on saavutettavuus.
yhdistetyissä komponenteissa kaikki solmut ovat aina tavoitettavissa toisistaan.
muutamia esimerkkejä
tässä osiossa käsitellään paria yksinkertaista esimerkkiä. Yritämme suhteuttaa esimerkkejä edellä esitetyllä määritelmällä.
3, 1. Yksi kytketty komponentti
tässä esimerkissä annetulla ohjaamattomalla kuvaajalla on yksi kytketty komponentti:
annetaan tälle kuvaajalle nimi . Tässä merkitsee kärkijoukkoa ja merkitsee reunajoukkoa . Kaaviossa on yksi yhtenäinen komponentti, nimetäänpä se , joka sisältää kaikki . Nyt katsotaan, pitääkö joukko määritelmän vai ei.
määritelmän mukaan joukon kärkipisteiden tulisi saavuttaa toisensa polkua pitkin. Valitsemme kaksi satunnaista vertexiä ja
- on tavoitettavissavia:
on tavoitettavissa via:
the vertices and täytti määritelmän, ja saman voisi tehdä myös muilla kärkipareilla .
3, 2. Useampi kuin yksi kytketty komponentti
tässä esimerkissä ohjaamattomassa kaaviossa on kolme kytkettyä komponenttia:
Let’s name this graph as , where , and . The graph has 3 connected components: and .
nyt katsotaan, täyttävätkö yhdistetyt komponentit ja määritelmän vai eivät. Poimimme satunnaisesti jokaisesta , ja set.
joukosta poimitaan kärkipisteet ja .
- on tavoitettavissa via:
on tavoitettavissa via:
nyt poimitaan verteksit ja joukosta .
- is reachable to
- is reachable to
Finally, let’s pick the vertices and from the set .
- is reachable to
on tavoitettavissa
näistä yksinkertaisista demonstraatioista on siis selvää, että janoudattavat yhdistetyn komponentin määritelmää.
ominaisuudet
koska olemme jo keskustelleet määritelmästä ja osoittaneet pari esimerkkiä kytketyistä komponenteista, on hyvä aika luetella joitakin tärkeitä ominaisuuksia, joita liitetyllä komponentilla on aina.
ensinnäkin kytketty komponenttijoukko on aina ei-tyhjä.
Lisäksi, jos on olemassa useampi kuin yksi kytketty komponentti tietylle kuvaajalle, niin kytkettyjen komponenttien unioni antaa joukon kaikkien vertices annetun kuvaajan.
esimerkiksi :
lopuksi liitetyt komponenttijoukot ovat pareittain hajanaisia. Tämä tarkoittaa, jos otamme risteysalueiden kahden eri kytketty komponentti asetetaan sitten risteysalueiden on yhtä kuin tyhjä joukko tai nolla joukko.
tarkastellaan kaavion yhdistettyjä komponentteja uudelleen. In , tarkistetaan tämä ominaisuus:
liitettyjen komponenttien löytäminen
kun otetaan huomioon suuntaamaton kuvaaja, on tärkeää selvittää liitettyjen komponenttien määrä graafin rakenteen analysoimiseksi – sillä on monia tosielämän sovelluksia. Voimme käyttää joko DFS tai BFS tähän tehtävään.
tässä osiossa käsitellään DFS-pohjaista algoritmia, joka antaa meille liitettyjen komponenttien määrän tietylle ohjaamattomalle kuvaajalle:
muuttuja Component_Count palauttaa liitettyjen komponenttien määrän annetussa kaaviossa.
aloitetaan alustamalla kaikki sen lipun kärkipisteet, jossa ei ole käyty. Sitten valitsemme satunnaisen huippupiste aloittaa ja tarkistaa, jos olemme käyneet huippupiste vai ei. Jos emme, kutsumme DFS-funktiota.
kun kaikki vierailluiksi merkityt kärkipisteet, algoritmi päättää ja tulostaa liitettyjen komponenttien lukumäärän.
DFS-funktiossa väittämät, jotka läpäisemme, ovat huippupiste-joukko, joka sisältää kaikki annetun kaavion kärkipisteet ja tietyn huippupisteen, jonka on kuuluttava huippupistejoukkoon.
ensin merkitään tietty syöttöpiste vierailluksi. Sitten voimme laskea viereisen vertices tietyn tietyn tulon huippupiste. Kunkin vierekkäisen huippupiste, me tarkistaa, kävimmekö niitä vai ei. Jos ei, niin me kutsumme DFS funktio rekursiivisesti, kunnes me merkitä kaikki vierekkäiset vertices kuin vieraili.
algoritmin keskeinen havainto on, että liitettyjen komponenttien määrä on yhtä suuri kuin riippumattomien DFS-funktiokutsujen määrä. Component_Count-muuttuja laskee puhelujen määrän. Tähän eivät tietenkään sisälly DFS () – funktion alla rekursiivisesti soitetut puhelut.
koeajo
ajetaan algoritmi näytekuvaajalle:
annettu ohjaamaton kaavio , jossa , ja .
algoritmin ensimmäinen vaihe on alustaa kaikki kärkipisteet ja merkitä ne vierailemattomiksi.
punainen huippupiste merkitsee, että siinä ei käydä. Vihreä huippupiste merkitsee sitä, että algoritmi käy sen luona:
voimme valita minkä tahansa huippupisteen kärkiluettelosta aloittaaksemme algoritmin. Poimitaan .
algoritmi tarkistaa, onko sillä käyty vai ei. Tällöin ei käy. Niinpä se kutsuu .
DFS: n () sisällä merkitään ensin verteksi vierailluksi ja etsitään viereiset vertexit . Kaikki viereiset vertices ovat myös merkitty vieraili. Kun DFS päättää käydä kaikki viereiset vertices , Component_Count tulee 1, ja tila vertices päivitetään:
taas algoritmi valitsee minkä tahansa satunnaisen kärkipisteen. Poimitaan tällä kertaa.
se tarkistaa, onko jo käyty vai ei. Koska sitä ei käydä, algoritmi kutsuu . Jälleen algoritmi merkitsee verteksin merkitse viereiseksi, ja DFS etsii viereiset verticesinsä ja merkitsee ne viereisiksi. Nyt Component_Count tulee 2, ja tila vertex luettelo päivitetään uudelleen:
algoritmi jatkaa ja valitsee , tarkistaa tilanteen ja kutsuu . Vertex ja sen viereiset vertices merkitään vierailluiksi ja Component_Count kasvaa arvoon 3. Algoritmi päivittää vertex-listan tilan:
lopuksi algoritmi valitsee , kutsuu ja tekee käydyksi. Verteksissä ei ole vierekkäisiä kärkipisteitä, joten DFS palauttaa ja Component_Count kasvaa arvoon 4. Lopuksi algoritmi päivittää verteksiluettelon tilan:
koska algoritmi on valmis kulkemaan kaikki graafin kärkipisteet , se päättää ja palauttaa Component_countin arvon, joka on yhtä suuri kuin liitettyjen komponenttien lukumäärä . Tällöin algoritmit löytävät neljä yhdistettyä komponenttia :
yhdistettyjen komponenttien kuvaamiseen käytettiin neljää eri väriä , nimittäin: .
Time Complexity Analysis
juuri näkemämme algoritmi yhdistettyjen komponenttien löytämiseen tietystä ohjaamattomasta kuvaajasta käyttää DFS-hakua ja laskee DFS-funktiolle soitettujen puhelujen määrän. Jos kuvaaja esitetään adjacency-luettelolla, DFS-haku käy kaikki pisteet kerran ja jokainen reuna kahdesti, jos kyseessä on ohjaamaton kuvaaja. Verteksin tilan tarkistaminen vie aikaa. Täten yhteensä algoritmimme vie aikaa.
Jos kuvaajaa esittää adjacency-matriisi, DFS-haku vie aikaa, koska se tarvitsee kulkea koko rivin naapuripisteiden arvioimiseksi. Verteksin tilan tarkistaminen taas vie aikaa. Näin saadaan yhteensä aika.
johtopäätös
tässä artikkelissa käsittelimme yhdistetyn komponentin yksinkertaista määritelmää, jota seurasi pari yksinkertaista ja helppotajuista esimerkkiä. Myös, listasimme joitakin yhteisiä mutta tärkeitä ominaisuuksia liitettyjen komponenttien.
sitten keskustelimme DFS-hakuun perustuvasta algoritmista, jolla löydettäisiin liitettyjen komponenttien määrä tietyssä kaaviossa. Esittelimme algoritmin näytekuvaajan avulla. Lopuksi analysoimme algoritmin ajallista monimutkaisuutta.