Connected Components in a Graph

áttekintés

ebben az oktatóanyagban megvitatjuk a csatlakoztatott komponensek fogalmát egy irányítatlan grafikonon.

néhány egyszerű példát fogunk áttekinteni az alapvető megértés érdekében, majd felsoroljuk a csatlakoztatott összetevők tulajdonságait.

összekapcsolt összetevő definíció

egy összekapcsolt összetevő vagy egyszerűen egy irányítatlan gráf összetevője egy olyan részgráf, amelyben minden csomópontpár egy útvonalon keresztül kapcsolódik egymáshoz.

próbáljuk tovább egyszerűsíteni. A csomópontok halmaza összekapcsolt komponenst képez egy irányítatlan gráfban, ha a csomópontok halmazából bármelyik csomópont bármely más csomópontot elérhet az élek áthaladásával. A lényeg itt az elérhetőség.

a csatlakoztatott komponensekben az összes csomópont mindig elérhető egymástól.

néhány példa

ebben a szakaszban néhány egyszerű példát fogunk megvitatni. Megpróbáljuk összekapcsolni a példákat a fenti definícióval.

3.1. Egy összekapcsolt komponens

ebben a példában az adott irányítatlan gráfnak van egy összekapcsolt komponense:

nevezzük el ezt a grafikont G1(V, E). Itt V = \{V1, V2, V3, V4, V5, V6\} a csúcskészletet jelöli, és E = \{E1, E2, E3, E4, E5, E6, e7\} a G1. A G1 grafikonnak van egy összekapcsolt összetevője, nevezzük el C1, amely a G1összes csúcsát tartalmazza. Most ellenőrizzük, hogy a C1 készlet megfelel-e a definíciónak vagy sem.

a definíció szerint a C1 halmaz csúcsainak egy útvonalon kell elérniük egymást. Két véletlenszerű csúcsot választunk V1 és V6:

  • V6 elérhető a V1 via: E4 \rightarrow E7 \ vagy\ E3 \rightarrow E5 \rightarrow e7 \ vagy\ E1 \rightarrow E2 \rightarrow E6 \rightarrow E7
  • v1 elérhető a v6 keresztül: E7 \rightarrow E4 \ vagy\ e7 \rightarrow E5 \rightarrow E3 \ vagy\ e7 \rightarrow E6\rightarrow E2 \rightarrow E1

a csúcsok V1 és v6 megfelelt a definíciónak, és ugyanezt megtehetjük a C1 többi csúcspárral is.

3.2. Egynél több összekapcsolt összetevő

ebben a példában az irányítatlan gráfnak három összekapcsolt komponense van:

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\}.

most nézzük meg ,hogy a csatlakoztatott összetevőkC1C2, ésC3 megfelelnek-e a definíciónak vagy sem. Véletlenszerűen kiválasztunk egy párat minden C1C2 és C3 készletből.

a C1 készletből válasszuk ki a V4 és V6csúcsokat.

  • a V6 elérhető a V4 keresztül: E2 \rightarrow E6 \rightarrow E7 \ vagy\ E1 \rightarrow E4 \rightarrow E7 \ vagy\ E1 \rightarrow E3 \rightarrow E5 \rightarrow E7
  • a V4 elérhető a v6 Via: E7 \rightarrow E6 \rightarrow E2 \ vagy\ e7 \rightarrow E4 \rightarrow E1 \ vagy\ E7 \rightarrow E5 \rightarrow E3 \rightarrow e1

most válasszuk ki a csúcsokat V8 és V9 a készletből 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
  • V12 elérhető a V11E10 \rightarrow E11

tehát ezekből az egyszerű bemutatókból egyértelmű, hogy C1C2, és C3 kövesse a csatlakoztatott összetevő meghatározását.

tulajdonságok

mivel már megbeszéltük a definíciót, és bemutattunk néhány példát a csatlakoztatott komponensekre, itt az ideje, hogy felsoroljuk azokat a fontos tulajdonságokat, amelyeket a csatlakoztatott komponens mindig tart.

először is, a csatlakoztatott komponenskészlet mindig nem üres.

Továbbá, ha egy adott gráfhoz egynél több összekapcsolt komponens van, akkor az összekapcsolt komponensek egyesülése megadja az adott gráf összes csúcsának halmazát.

például G2:

\

végül a csatlakoztatott komponenskészletek páronként diszjunkt. Ez azt jelenti, hogy ha két különböző összekapcsolt komponenshalmaz metszéspontját vesszük, akkor a metszéspont egyenlő lesz egy üres halmazzal vagy egy nullhalmazzal.

vizsgáljuk meg újra a G2 grafikon összekapcsolt összetevőit. A G2 részben ellenőrizzük ezt a tulajdonságot:

\

összekapcsolt összetevők keresése

egy irányítatlan grafikon alapján fontos megtudni a csatlakoztatott összetevők számát A grafikon szerkezetének elemzéséhez – számos valós alkalmazással rendelkezik. Ehhez a feladathoz DFS vagy BFS is használható.

ebben a részben egy DFS-alapú algoritmust fogunk megvitatni, amely megadja nekünk az adott irányítatlan gráf összekapcsolt összetevőinek számát:

a QuickLaTeX Renderelte.com

a Component_Count változó visszaadja az adott gráf csatlakoztatott komponenseinek számát.

kezdjük azzal, hogy inicializáljuk az összes csúcsot a nem látogatott zászlóra. Ezután kiválasztunk egy véletlenszerű csúcsot az indításhoz, és ellenőrizzük, hogy meglátogattuk-e a csúcsot vagy sem. Ha nem, akkor hívjuk a DFS függvényt.

Miután az összes csúcsot meglátogatottként jelölték meg, az algoritmus leállítja és kiírja a csatlakoztatott komponensek számát.

a DFS függvényben az általunk átadott argumentumok egy csúcshalmaz, amely tartalmazza az adott gráf összes csúcsát és egy adott csúcsot, amelynek a csúcshalmazhoz kell tartoznia.

először az adott bemeneti csúcsot látogatottként jelöljük meg. Ezután kiszámítjuk az adott bemeneti csúcs szomszédos csúcsait. Minden szomszédos csúcsnál ellenőrizzük, hogy meglátogattuk-e őket vagy sem. Ha nem, akkor a DFS függvényt rekurzív módon hívjuk fel, amíg az összes szomszédos csúcsot meglátogatottként nem jelöljük meg.

az algoritmus legfontosabb megfigyelési pontja, hogy a csatlakoztatott komponensek száma megegyezik a független DFS függvényhívások számával. A Component_Count változó megszámolja a hívások számát. Természetesen ez nem tartalmazza a DFS() függvény alatt rekurzív módon kezdeményezett hívásokat.

teszt futtatása

futtassuk az algoritmust egy minta grafikonon:

adott egy irányítatlan gráf G3(V, E), ahol V = \{V1, V2, V3, V4, V5, V6, V7, V8\} és e = \{E1, E2, E3, E4, E5\}.

az algoritmus első lépése, hogy inicializálja az összes csúcsot, és megjelöli azokat nem látogatottként.

a piros csúcs azt jelzi, hogy nem látogatják meg. A zöld csúcs azt jelzi, hogy az algoritmus meglátogatja:

bármelyik csúcsot kiválaszthatjuk a csúcslistából az algoritmus elindításához. Válasszuk a V1 lehetőséget.

az algoritmus ellenőrzi, hogy meglátogatták-e vagy sem. Ebben az esetben a V1 nem látogatható meg. Így hívja DFS (V, V1).

a DFS () – en belül először a v1 csúcsot jelöli látogatottnak, és a v1szomszédos csúcsait keresi. Az összes szomszédos csúcsot meglátogatottként is megjelölik. Amikor a DFS befejezi a V1 összes szomszédos csúcsának meglátogatását, a Component_Count 1 lesz, és a csúcsok állapota frissül:

ismét az algoritmus bármilyen véletlenszerű csúcsot választ. Ezúttal válasszuk a V4 lehetőséget.

ellenőrzi, hogy aV4 már meglátogatott-e vagy sem. Mivel nem látogatják meg, az algoritmus a DFS(V, V4) – et hívja. Az algoritmus ismét a V4 csúcsot látogatottként jelöli meg, a DFS pedig megkeresi a szomszédos csúcsokat, és meglátogatottként jelöli meg őket. Most a Component_Count 2 lesz, és a csúcslista állapota ismét frissül:

az algoritmus folytatja és kiválasztja a V6lehetőséget, ellenőrzi az állapotot, és felhívja a DFS(V, V6) parancsot. A v6 csúcs és a szomszédos csúcsok meglátogatottként vannak címkézve, és a Component_Count 3-ra emelkedik. Az algoritmus frissíti a csúcslista állapotát:

végül az algoritmus a V8 lehetőséget választja, meghívja a DFS(V, V8) – t, és a V8 – et látogatottá teszi. A V8 csúcsnak nincsenek szomszédos csúcsai, így a DFS visszatér, a Component_Count pedig 4-re nő. Végül az algoritmus frissíti a csúcslista állapotát:

amint az algoritmus befejezte a gráf összes csúcsát G3, befejezi és visszaadja a Component_Count értékét, amely megegyezik a G3. Ebben az esetben az algoritmusok négy összekapcsolt összetevőt találnak G3:

négy különböző színt használtunk a G3, nevezetesen: C1 = \{V1, V2, V3\}C2 = \{V4, V5\}C3 = \{v6, V7\}C4 = \{V8\}.

idő komplexitás analízis

az algoritmus, amit most láttunk a csatlakoztatott komponensek kereséséhez egy adott irányítatlan gráfban, a DFS keresést használja, és megszámolja a DFS függvény hívásainak számát. Ha a gráfot a szomszédsági lista képviseli, akkor a DFS-keresés az összes csúcsot egyszer, az éleket pedig kétszer látogatja meg irányítatlan gráf esetén. A csúcs állapotának ellenőrzése O(1) időt vesz igénybe. Így összességében algoritmusunk \mathbf{O(V+E)} időt vesz igénybe.

abban az esetben, ha a gráfot a szomszédsági mátrix képviseli, a DFS keresés O(V^2) időt vesz igénybe, mivel a szomszédos csúcsok értékeléséhez az egész sort át kell haladnia. A csúcs állapotának ellenőrzése ismét O(1) időt vesz igénybe. Így összesen \mathbf{O(V^2)} időt kapunk.

következtetés

ebben a cikkben a csatlakoztatott komponens egyszerű meghatározását tárgyaltuk, amelyet néhány egyszerű és könnyen érthető példa követett. Emellett felsoroltuk a csatlakoztatott alkatrészek néhány gyakori, de fontos tulajdonságát.

ezután megbeszéltünk egy DFS keresésalapú algoritmust, hogy megtaláljuk a csatlakoztatott összetevők számát egy adott grafikonon. Az algoritmust egy minta grafikon segítségével mutattuk be. Végül elemeztük az algoritmus időbeli összetettségét.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.