á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 . Itt a csúcskészletet jelöli, és a . A grafikonnak van egy összekapcsolt összetevője, nevezzük el , amely a összes csúcsát tartalmazza. Most ellenőrizzük, hogy a készlet megfelel-e a definíciónak vagy sem.
a definíció szerint a halmaz csúcsainak egy útvonalon kell elérniük egymást. Két véletlenszerű csúcsot választunk és :
- elérhető a via:
- elérhető a keresztül:
a csúcsok és megfelelt a definíciónak, és ugyanezt megtehetjük a 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 , where , and . The graph has 3 connected components: and .
most nézzük meg ,hogy a csatlakoztatott összetevők, és megfelelnek-e a definíciónak vagy sem. Véletlenszerűen kiválasztunk egy párat minden és készletből.
a készletből válasszuk ki a és csúcsokat.
- elérhető a keresztül:
- elérhető a Via:
most válasszuk ki a csúcsokat és a készletből .
- is reachable to
- is reachable to
Finally, let’s pick the vertices and from the set .
- is reachable to
- elérhető a
tehát ezekből az egyszerű bemutatókból egyértelmű, hogy , és 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 :
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 grafikon összekapcsolt összetevőit. A 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 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 , ahol és .
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 lehetőséget.
az algoritmus ellenőrzi, hogy meglátogatták-e vagy sem. Ebben az esetben a nem látogatható meg. Így hívja .
a DFS () – en belül először a csúcsot jelöli látogatottnak, és a szomszédos csúcsait keresi. Az összes szomszédos csúcsot meglátogatottként is megjelölik. Amikor a DFS befejezi a ö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 lehetőséget.
ellenőrzi, hogy a már meglátogatott-e vagy sem. Mivel nem látogatják meg, az algoritmus a – et hívja. Az algoritmus ismét a 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 lehetőséget, ellenőrzi az állapotot, és felhívja a parancsot. A 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 lehetőséget választja, meghívja a – t, és a – et látogatottá teszi. A 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 , befejezi és visszaadja a Component_Count értékét, amely megegyezik a . Ebben az esetben az algoritmusok négy összekapcsolt összetevőt találnak :
négy különböző színt használtunk a , nevezetesen: .
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 időt vesz igénybe. Így összességében algoritmusunk időt vesz igénybe.
abban az esetben, ha a gráfot a szomszédsági mátrix képviseli, a DFS keresés 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 időt vesz igénybe. Így összesen 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.