Connected Components in a Graph

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 G1(V, E). Tässä v = \{V1, V2, V3, V4, V5, V6\} merkitsee kärkijoukkoa ja e = \{E1, E2, E3, E4, E5, E6, E7\} merkitsee reunajoukkoa G1. Kaaviossa G1 on yksi yhtenäinen komponentti, nimetäänpä se C1, joka sisältää kaikki G1. Nyt katsotaan, pitääkö joukko C1 määritelmän vai ei.

määritelmän mukaan joukon kärkipisteiden C1 tulisi saavuttaa toisensa polkua pitkin. Valitsemme kaksi satunnaista vertexiä v1 ja v6

  • v6on tavoitettavissav1via:E4 \rightarrow E7 \ tai\ E3 \rightarrow E5 \rightarrow e7 \ tai\ E1 \rightarrow E2 \rightarrow E6 \rightarrow E7
  • v1 on tavoitettavissa v6 via: E7 \rightarrow E4 \ tai\ e7 \rightarrow E5 \rightarrow E3 \ tai\ E7 \rightarrow E6\rightarrow E2 \rightarrow E1

the vertices v1 and V6 täytti määritelmän, ja saman voisi tehdä myös muilla kärkipareilla C1.

3, 2. Useampi kuin yksi kytketty komponentti

tässä esimerkissä ohjaamattomassa kaaviossa on kolme kytkettyä komponenttia:

Let’s name this graph as G2(V, E), where V = \{V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12\}, and E = \{E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11\}. The graph G2 has 3 connected components: C1 = \{V1, V2, V3, V4, V5, V6\}C2 = \{V7, V8, V9\} and C3 = \{V10, V11, V12\}.

nyt katsotaan, täyttävätkö yhdistetyt komponentit C1C2 ja C3 määritelmän vai eivät. Poimimme satunnaisesti jokaisesta C1C2, ja C3 set.

joukosta C1 poimitaan kärkipisteet v4 ja v6.

  • V6 on tavoitettavissa v4 via: E2 \rightarrow E6 \rightarrow E7 \ tai\ E1 \rightarrow E4 \rightarrow E7 \ tai\ E1 \rightarrow E3 \rightarrow E5 \rightarrow E7
  • v4on tavoitettavissa V6via: e7 \rightarrow E6 \rightarrow E2 \ tai\ E7 \rightarrow E4 \rightarrow E1 \ tai\ e7 \rightarrow E5 \rightarrow E3 \rightarrow E1

nyt poimitaan verteksit V8ja V9joukosta C2.

  • V9 is reachable to V8E9 \rightarrow E8
  • V8 is reachable to V9E8 \rightarrow E9

Finally, let’s pick the vertices V11 and V12 from the set C3.

  • V11 is reachable to V12E11 \rightarrow E10
  • V12on tavoitettavissaV11E10 \rightarrow E11

näistä yksinkertaisista demonstraatioista on siis selvää, että C1C2jaC3noudattavat 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 G2:

\

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 G2 uudelleen. In G2, 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:

Quicklatexin Renderöimänä.com

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 G3(V, E), jossa V = \{V1, V2, V3, V4, V5, V6, V7, V8\}, ja e = \{E1, E2, E3, E4, E5\}.

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 V1.

algoritmi tarkistaa, onko sillä käyty vai ei. Tällöin V1 ei käy. Niinpä se kutsuu DFS (V, V1).

DFS: n () sisällä merkitään ensin verteksi V1 vierailluksi ja etsitään viereiset vertexit V1. Kaikki viereiset vertices ovat myös merkitty vieraili. Kun DFS päättää käydä kaikki viereiset vertices v1, Component_Count tulee 1, ja tila vertices päivitetään:

taas algoritmi valitsee minkä tahansa satunnaisen kärkipisteen. Poimitaan v4 tällä kertaa.

se tarkistaa, onko v4 jo käyty vai ei. Koska sitä ei käydä, algoritmi kutsuu DFS(V, V4). Jälleen algoritmi merkitsee verteksin v4 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 V6, tarkistaa tilanteen ja kutsuu DFS(V, V6). Vertex V6 ja sen viereiset vertices merkitään vierailluiksi ja Component_Count kasvaa arvoon 3. Algoritmi päivittää vertex-listan tilan:

lopuksi algoritmi valitsee V8, kutsuu DFS(V, V8) ja tekee v8 käydyksi. Verteksissä V8 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 G3, se päättää ja palauttaa Component_countin arvon, joka on yhtä suuri kuin liitettyjen komponenttien lukumäärä G3. Tällöin algoritmit löytävät neljä yhdistettyä komponenttia G3:

yhdistettyjen komponenttien kuvaamiseen käytettiin neljää eri väriä G3, nimittäin: C1 = \{V1, V2, V3\}C2 = \{V4, V5\}C3 = \{V6, V7\}C4 = \{V8\}.

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 O(1) aikaa. Täten yhteensä algoritmimme vie \mathbf{O(V+E)} aikaa.

Jos kuvaajaa esittää adjacency-matriisi, DFS-haku vie o(v^2) aikaa, koska se tarvitsee kulkea koko rivin naapuripisteiden arvioimiseksi. Verteksin tilan tarkistaminen taas vie O(1) aikaa. Näin saadaan yhteensä \mathbf{O (V^2)} 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.

Vastaa

Sähköpostiosoitettasi ei julkaista.