tilsluttede komponenter i en graf

oversigt

i denne vejledning diskuterer vi begrebet tilsluttede komponenter i en ikke-rettet graf.

Vi gennemgår nogle enkle eksempler for at få en grundlæggende forståelse, og så viser vi egenskaberne for tilsluttede komponenter.

definition af tilsluttet komponent

en tilsluttet komponent eller simpelthen komponent i en ikke-rettet graf er en undergraf, hvor hvert par noder er forbundet med hinanden via en sti.

lad os prøve at forenkle det yderligere. Et sæt noder danner en tilsluttet komponent i en ikke-rettet graf, hvis en knude fra sættet af noder kan nå en hvilken som helst anden knude ved at krydse kanter. Hovedpunktet her er tilgængelighed.

i tilsluttede komponenter er alle knudepunkter altid tilgængelige fra hinanden.

få eksempler

i dette afsnit vil vi diskutere et par enkle eksempler. Vi vil forsøge at relatere eksemplerne med definitionen ovenfor.

3.1. En tilsluttet komponent

i dette eksempel har den givne ikke-rettede Graf en tilsluttet komponent:

lad os navngive denne graf G1(V, E). Her V = \{V1, V2, V3, V4, V5, V6\} betegner toppunktssættet og E = \{E1, E2, E3, E4, E5, E6, E7\} betegner kantsættet G1. Grafen G1 har en tilsluttet komponent, lad os navngive den C1, som indeholder alle hjørnerne af G1. Lad os nu kontrollere, om sættet C1 holder fast ved definitionen eller ej.

ifølge definitionen skal hjørnerne i sættet C1 nå hinanden via en sti. Vi vælger to tilfældige hjørner V1 og V6:

  • V6 kan nås til V1 via: E4 \højre pil E7 \ eller\ E3 \højre pil E5 \højre pil E7 \ eller\ E1 \højre pil E2 \højre pil E6 \højre pil E7
  • v1 kan nås til v6 via: E7 \højre pil E4 \ eller\ E7 \højre pil E5 \højre pil E3 \ eller\ E7 \højre pil E6\højre pil E2 \højre pil E1

hjørnerne V1 og V6 opfyldte definitionen, og vi kunne gøre det samme med andre toppunktpar i C1 også.

3.2. Mere end en tilsluttet komponent

i dette eksempel har den ikke-rettede graf tre tilsluttede komponenter:

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

lad os nu se, om tilsluttede komponenterC1C2ogC3 opfylder definitionen eller ej. Vi vælger tilfældigt et par fra hver C1C2og C3 set.

fra sættetC1, lad os vælge hjørnerneV4ogV6.

  • V6 kan nås til V4 via: E2 \højre pil E6 \højre pil E7 \ eller\ E1 \højre pil E4 \højre pil E7 \ eller\ E1 \højre pil E3 \højre pil E5 \højre pil E7
  • V4 kan nås til V6 via: E7 \højre pil E6 \højre pil E2 \ eller\ E7 \højre pil E4 \højre pil E1 \ eller\ E7 \højre pil E5 \højre pil E3 \højre pil e1

lad os nu vælge hjørnerne V8 og V9 fra sættet 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 \højre pil E10
  • V12 kan nås til V11E10 \højre pil E11

så fra disse enkle demonstrationer er det klart, at C1C2 og C3 følg den tilsluttede komponentdefinition.

egenskaber

da vi allerede har diskuteret definitionen og demonstreret et par eksempler på de tilsluttede komponenter, er det et godt tidspunkt at liste nogle af de vigtige egenskaber, som den tilsluttede komponent altid har.

først og fremmest er det tilsluttede komponentsæt altid ikke tomt.

desuden, hvis der er mere end en tilsluttet komponent til en given graf, vil foreningen af tilsluttede komponenter give sættet med alle hjørner i den givne graf.

for eksempel G2:

\

endelig er tilsluttede komponentsæt parvis uensartede. Det betyder, at hvis vi tager krydset mellem to forskellige tilsluttede komponentsæt, vil krydset være lig med et tomt sæt eller et null-sæt.

lad os overveje de tilsluttede komponenter i graf G2 igen. I G2, lad os tjekke denne ejendom:

\

find tilsluttede komponenter

i betragtning af en ikke – rettet graf er det vigtigt at finde ud af antallet af tilsluttede komponenter for at analysere grafens struktur-den har mange virkelige applikationer. Vi kan bruge enten DFS eller BFS til denne opgave.

i dette afsnit diskuterer vi en DFS-baseret algoritme, der giver os antallet af tilsluttede komponenter til en given ikke-rettet graf:

gengivet af.com

variablen Component_Count Returnerer antallet af tilsluttede komponenter i den givne graf.

Vi starter med at initialisere alle hjørner til det flag, der ikke er besøgt. Vi vælger derefter et tilfældigt toppunkt for at starte og kontrollere, om vi har besøgt toppunktet eller ej. Hvis vi ikke gjorde det, kalder vi DFS-funktionen.

når alle de hjørner, der er markeret som besøgt, afslutter algoritmen og udskriver nummeret på de tilsluttede komponenter.

i DFS-funktionen er de argumenter, vi passerer, et toppunktsæt, der indeholder alle hjørnerne i den givne graf og et bestemt toppunkt, der skal tilhøre toppunktssættet.

først markerer vi det bestemte inputpunkt som besøgt. Derefter beregner vi de tilstødende hjørner af det givne bestemte inputpunkt. For hvert tilstødende toppunkt kontrollerer vi, om vi besøgte dem eller ej. Hvis ikke, kalder vi DFS-funktionen rekursivt, indtil vi markerer alle de tilstødende hjørner som besøgt.

nøglepunktet at observere i algoritmen er, at antallet af tilsluttede komponenter er lig med antallet af uafhængige DFS-funktionsopkald. Variablen Component_Count tæller antallet af opkald. Selvfølgelig omfatter dette ikke de opkald, der foretages under DFS () – funktionen rekursivt.

testkørsel

lad os køre algoritmen på en prøvegraf:

givet en ikke-rettet graf G3(V, E), hvor V = \{V1, V2, V3, V4, V5, V6, V7, V8\} og E = \{E1, E2, E3, E4, E5\}.

det første trin i algoritmen er at initialisere alle hjørnerne og markere dem som ikke besøgt.

det røde toppunkt angiver, at det ikke er besøgt. Det grønne toppunkt angiver, at det besøges af algoritmen:

Vi kan vælge ethvert toppunkt fra toppunktlisten for at starte algoritmen. Lad os vælge V1.

algoritmen kontrollerer, om den er besøgt eller ej. I dette tilfældeV1 er ikke besøgt. Så det kalder DFS(V, V1).

inden for DFS () mærker den først toppunktet V1som besøgt og søger efter de tilstødende hjørner af V1. Alle de tilstødende hjørner er også markeret som besøgt. Når DFS er færdig med at besøge alle de tilstødende hjørner af V1, bliver Component_Count 1, og status for hjørner opdateres:

igen vælger algoritmen ethvert tilfældigt toppunkt. Lad os vælge V4 denne gang.

det kontrollerer, omV4 allerede er besøgt eller ej. Da det ikke er besøgt, kalder algoritmen DFS(V, V4). Igen markerer algoritmen toppunktet v4 Marker som besøgt, og DFS søger efter dets tilstødende hjørner og markerer dem som besøgt. Nu bliver Component_Count 2, og status for toppunktlisten opdateres igen:

algoritmen fortsætter og vælgerV6, kontrollerer status og kalderDFS(V, V6). Toppunktet V6 og dets tilstødende hjørner er mærket som besøgt, og Component_Count øges til 3. Algoritmen opdaterer toppunktlistestatus:

endelig vælger algoritmenV8, kalderDFS(V, V8) og gørV8 som besøgt. Toppunktet V8 har ingen tilstødende hjørner, så DFS vender tilbage, og Component_Count stiger til 4. Endelig opdaterer algoritmen status for toppunktlisten:

da algoritmen er færdig med at krydse alle grafens hjørner G3, afslutter den og returnerer værdien af Component_Count, som svarer til antallet af tilsluttede komponenter i G3div>. I dette tilfælde finder algoritmerne fire tilsluttede komponenter i G3:

Vi brugte fire forskellige farver til at illustrere de tilsluttede komponenter i G3, nemlig: C1 = \{V1, V2, V3\}C2 = \{v4, V5\}C3 = \{V6, v7\}C4 = \{V8\}.

Tidskompleksitetsanalyse

algoritmen, vi lige har set til at finde tilsluttede komponenter i en given ikke-rettet graf, bruger DFS-søgningen og tæller antallet af opkald til DFS-funktionen. Hvis grafen er repræsenteret af adjacency-listen, besøger DFS-søgningen alle hjørner en gang og hver kant to gange i tilfælde af en ikke-rettet graf. Kontrollen af toppunktstatus tager O(1) tid. Således i alt vil vores algoritme tage \mathbf{O(V+E)} tid.

hvis grafen er repræsenteret af adjacency-matricen, tager DFS-søgningen O(V^2) tid, da den skal krydse hele rækken for at evaluere naboens hjørner. Kontrollen af toppunktstatus tager igen O(1) tid. Således giver os i alt \mathbf{O(V^2)} tid.

konklusion

i denne artikel diskuterede vi en simpel definition af tilsluttet komponent efterfulgt af et par enkle og letforståelige eksempler. Vi har også nævnt nogle almindelige, men vigtige egenskaber ved tilsluttede komponenter.

derefter diskuterede vi en DFS-søgebaseret algoritme for at finde antallet af tilsluttede komponenter i en given graf. Vi demonstrerede algoritmen ved hjælp af en prøvegraf. Endelig analyserede vi algoritmens tidskompleksitet.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.