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 . Her betegner toppunktet sett og betegner kanten sett av. Grafen har en tilkoblet komponent, la oss kalle den , som inneholder alle hjørnene av . La oss nå sjekke om settet holder til definisjonen eller ikke.
i henhold til definisjonen skal toppene i settet nå hverandre via en bane. Vi velger to tilfeldige hjørner og :
- kan nås til via:
kan nås tilvia:
hjørnene og tilfredsstilte definisjonen, og vi kunne gjøre Det samme Med Andre vertexpar i 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 , where , and . The graph has 3 connected components: and .
la Oss nå se om tilkoblede komponenter og tilfredsstiller definisjonen eller ikke. Vi velger tilfeldig et par fra hver og sett.
Fra settet , la oss velge hjørnene og .
- kan nås til via:
kan nås tilVia:
la oss nå velge hjørnene ogfra settet.
- is reachable to
- is reachable to
Finally, let’s pick the vertices and from the set .
- is reachable to
kan nås til
så fra disse enkle demonstrasjonene Er det Klart at ogfø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 :
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 igjen. I , 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:
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 , hvor 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 .
algoritmen kontrollerer om den er besøkt eller ikke. I dette tilfellet er ikke besøkt. Så det kaller .
I DFS () merker den først toppunktet som besøkt og søker etter tilstøtende hjørner av . 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 , Blir Component_Count 1, og statusen for hjørner oppdateres:
igjen velger algoritmen et tilfeldig toppunkt. La oss velge denne gangen.
det kontrollerer om allerede er besøkt eller ikke. Som det ikke er besøkt, kaller algoritmen . Igjen markerer algoritmen toppunktet 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 , kontrollerer statusen og kaller . Toppunktet 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 , kaller, og gjør som besøkt. Vertex 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 , avslutter Den og returnerer verdien Av Component_Count som tilsvarer antall tilkoblede komponenter i div>. I dette tilfellet finner algoritmene fire tilkoblede komponenter i :
Vi brukte fire forskjellige farger for å illustrere de tilkoblede komponentene i, nemlig:.
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 tid. Dermed vil vår algoritme ta tid.
hvis grafen er representert av adjacency-matrisen, tar dfs-søket tid som den trenger å krysse hele raden for å evaluere nabohodene. Kontrollen av toppunktstatusen tar igjen tid. Dermed gir vi totalt 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.