Tilkoblede Komponenter i En Graf

Oversikt

i denne opplæringen vil vi diskutere begrepet tilkoblede komponenter i en ikke-rettet graf.

Vi går gjennom noen enkle eksempler for å få en grunnleggende forståelse, og så lister vi ut egenskapene til tilkoblede komponenter.

Connected Component Definition

en tilkoblet komponent eller bare komponent i en ikke-rettet graf er en subgraph der hvert par noder er forbundet med hverandre via en bane.

La oss prøve å forenkle det videre, skjønt. Et sett med noder danner en tilkoblet komponent i en ikke-rettet graf hvis en node fra settet med noder kan nå en annen node ved å krysse kanter. Hovedpoenget her er nåbarhet.

i tilkoblede komponenter kan alle noder alltid nås fra hverandre.

Få Eksempler

i denne delen diskuterer vi et par enkle eksempler. Vi vil prøve å forholde eksemplene med definisjonen gitt ovenfor.

3.1. En Tilkoblet Komponent

i dette eksemplet har den gitte ikke-styrte grafen en tilkoblet komponent:

la oss nevne denne grafen G1 (V, E). HerV = \{V1, V2, V3, V4, V5, V6\} betegner toppunktet sett ogE = \{E1, e2, E3, E4, E5, E6, E7\} betegner kanten sett avG1. Grafen G1 har en tilkoblet komponent, la oss kalle den C1, som inneholder alle hjørnene av G1. La oss nå sjekke om settet C1 holder til definisjonen eller ikke.

i henhold til definisjonen skal toppene i settet C1 nå hverandre via en bane. Vi velger to tilfeldige hjørner V1 og V6:

  • V6 kan nås til V1 via: e4 \rightarrow e7 \ Eller\ E3 \rightarrow e5 \rightarrow e7 \ eller\ e1 \rightarrow e2 \Rightarrow e6 \rightarrow e7
  • v1kan nås tilv6via: E7 \rightarrow E4 \ eller\ e7 \rightarrow E5 \rightarrow E3 \ eller\ e7 \rightarrow E6\rightarrow E2 \rightarrow E1

hjørnene V1 og v6 tilfredsstilte definisjonen, og vi kunne gjøre Det samme Med Andre vertexpar i c1 også.

3.2. Mer enn En Tilkoblet Komponent

i dette eksemplet har den ikke-styrte grafen tre tilkoblede 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\}.

la Oss nå se om tilkoblede komponenter C1C2 ogC3 tilfredsstiller definisjonen eller ikke. Vi velger tilfeldig et par fra hver C1C2 og C3 sett.

Fra settet C1, la oss velge hjørnene V4 og V6.

  • V6 kan nås til V4 via: E2 \rightarrow E6 \rightarrow E7 \ eller\ e1 \rightarrow E4 \rightarrow E7 \ eller\ e1 \rightarrow E3 \rightarrow E5 \rightarrow E7
  • V4kan nås tilv6Via:e7 \Rightarrow e6 \Rightarrow e2 \ Eller\ E7 \Rightarrow e4 \Rightarrow e1 \ Eller\ e7 \rightarrow e5 \rightarrow e3 \rightarrow e1

la oss nå velge hjørnene v8ogV9fra settetC2.

  • 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
  • V12kan nås tilV11E10 \rightarrow E11

så fra disse enkle demonstrasjonene Er det Klart at c1c2ogc3følger den tilkoblede komponentdefinisjonen.

Egenskaper

Som vi allerede har diskutert definisjonen og vist et par eksempler på de tilkoblede komponentene, er det en god tid å liste ut noen av de viktige egenskapene som tilkoblet komponent alltid holder.

Først av alt er det tilkoblede komponentsettet alltid ikke tomt.

Videre, Hvis det er mer enn en tilkoblet komponent for en gitt graf, vil foreningen av tilkoblede komponenter gi settet av alle hjørner av den oppgitte grafen.

For eksempel G2:

\

til slutt er tilkoblede komponentsett parvis usammenhengende. Det betyr at hvis vi tar krysset mellom to forskjellige tilkoblede komponentsett, vil krysset være lik et tomt sett eller et nullsett.

la oss vurdere de tilkoblede komponentene i grafen G2 igjen. I G2, la oss sjekke denne egenskapen:

\

Finne Tilkoblede Komponenter

gitt en ikke-rettet graf, er det viktig å finne ut antall tilkoblede komponenter for å analysere strukturen i grafen – den har mange virkelige applikasjoner. Vi kan bruke ENTEN DFS eller BFS for denne oppgaven.

i denne delen diskuterer VI EN dfs-basert algoritme som gir oss antall tilkoblede komponenter for en gitt ikke-rettet graf:

Gjengitt Av QuickLaTeX.com

variabelen Component_Count returnerer antall tilkoblede komponenter i den gitte grafen.

Vi starter med å initialisere alle hjørnene til flagget som ikke er besøkt. Vi velger deretter et tilfeldig toppunkt for å starte og sjekke om vi har besøkt toppunktet eller ikke. Hvis vi ikke gjorde det, kaller VI DFS-funksjonen.

når alle hjørnene er merket som besøkt, avslutter algoritmen og skriver ut nummeret til de tilkoblede komponentene.

i dfs-funksjonen er argumentene vi passerer et toppunktsett som inneholder alle toppunktene i den gitte grafen og et bestemt toppunkt som må tilhøre toppunktsettet.

først merker vi det spesielle inngangspunktet som besøkt. Deretter beregner vi tilstøtende hjørner av det gitte bestemte inngangspunktet. For hvert tilstøtende toppunkt sjekker vi om vi besøkte dem eller ikke. Hvis ikke, kaller VI DFS-funksjonen rekursivt til vi markerer alle tilstøtende hjørner som besøkt.

nøkkelpunktet å observere i algoritmen er at antall tilkoblede komponenter er lik antall uavhengige dfs-funksjonssamtaler. Component_Count-variabelen teller antall anrop. Selvfølgelig inkluderer dette ikke kallene som blir gjort under dfs () – funksjonen rekursivt.

Test Run

La oss kjøre algoritmen på en eksempelgraf:

Gitt en ikke-rettet graf G3(V, E), hvor V = \{V1, V2, V3, V4, V5, V6, V7, V8\} e = \{e1, e2, e3, e4, e5\} .

det første trinnet i algoritmen er å initialisere alle hjørner og markere dem som ikke besøkt.

det røde toppunktet angir at det ikke er besøkt. Det grønne toppunktet angir at det besøkes av algoritmen:

Vi kan velge hvilket som helst toppunkt fra toppunktlisten for å starte algoritmen. La oss velge V1.

algoritmen kontrollerer om den er besøkt eller ikke. I dette tilfellet er V1 ikke besøkt. Så det kaller DFS (V, V1).

I DFS () merker den først toppunktetV1 som besøkt og søker etter tilstøtende hjørner av V1. Alle tilstøtende hjørner er også merket som besøkt. Når DFS er ferdig med å besøke alle tilstøtende hjørner av V1, Blir Component_Count 1, og statusen for hjørner oppdateres:

igjen velger algoritmen et tilfeldig toppunkt. La oss velge V4 denne gangen.

det kontrollerer om V4 allerede er besøkt eller ikke. Som det ikke er besøkt, kaller algoritmen DFS (V, V4). Igjen markerer algoritmen toppunktet V4 merk som besøkt, OG DFS søker etter tilstøtende hjørner og markerer dem som besøkt. Nå Blir Component_Count 2, og statusen til toppunktlisten oppdateres igjen:

algoritmen fortsetter og velger V6, kontrollerer statusen og kaller DFS(V, V6). Toppunktet V6 og dets tilstøtende hjørner er merket som besøkt og Component_Count øker til 3. Algoritmen oppdaterer toppunktet listestatus:

til Slutt velger algoritmen V8, kallerDFS(v, V8), og gjørV8 som besøkt. Vertex V8 har ingen tilstøtende hjørner, SLIK AT Dfs returnerer og Component_Count øker til 4. Til slutt oppdaterer algoritmen statusen til toppunktlisten:

når algoritmen er ferdig med å krysse alle hjørner av grafen G3, avslutter Den og returnerer verdien Av Component_Count som tilsvarer antall tilkoblede komponenter i G3div>. I dette tilfellet finner algoritmene fire tilkoblede komponenter i G3:

Vi brukte fire forskjellige farger for å illustrere de tilkoblede komponentene iG3, nemlig:C1 = \{V1, V2, V3\}C2 = \{v4, v5\}c3 = \{v6, v7\}c4 = \{v8\}.

Tidskompleksitetsanalyse

algoritmen vi nettopp så for å finne tilkoblede komponenter i en gitt urettet graf, bruker dfs-søket og teller antall anrop til dfs-funksjonen. Hvis grafen er representert av adjacency-listen, besøker dfs-søket alle kryssene en gang og hver kant to ganger i tilfelle en ikke-rettet graf. Kontrollen av toppunktet status tar O (1) tid. Dermed vil vår algoritme ta \ mathbf{O (V+E)} tid.

hvis grafen er representert av adjacency-matrisen, tar dfs-søket O (v^2) tid som den trenger å krysse hele raden for å evaluere nabohodene. Kontrollen av toppunktstatusen tar igjen O (1) tid. Dermed gir vi totalt \mathbf{O(v^2)} tid.

Konklusjon

i denne artikkelen diskuterte vi en enkel definisjon av tilkoblet komponent etterfulgt av et par enkle og enkle å forstå eksempler. Også, vi listet ut noen vanlige, men viktige egenskaper av tilkoblede komponenter.

deretter diskuterte VI EN dfs-søkebasert algoritme for å finne antall tilkoblede komponenter i en gitt graf. Vi demonstrerte algoritmen ved hjelp av en prøvegraf. Til slutt analyserte vi tidskompleksiteten til algoritmen.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.