översikt
i denna handledning diskuterar vi begreppet anslutna komponenter i en oriktad graf.
Vi går igenom några enkla exempel för att få en grundläggande förståelse, och sedan listar vi egenskaperna hos anslutna komponenter.
ansluten Komponentdefinition
en ansluten komponent eller helt enkelt komponent i en oriktad graf är en undergraf där varje par noder är anslutna till varandra via en bana.
låt oss försöka förenkla det ytterligare. En uppsättning noder bildar en ansluten komponent i en oriktad graf om någon nod från uppsättningen noder kan nå någon annan nod genom att korsa kanter. Huvudpunkten här är nåbarhet.
I anslutna komponenter kan alla noder alltid nås från varandra.
några exempel
i det här avsnittet diskuterar vi några enkla exempel. Vi ska försöka relatera exemplen med definitionen ovan.
3.1. En ansluten komponent
i det här exemplet har den givna oriktade grafen en ansluten komponent:
låt oss namnge denna graf . Här betecknar vertexuppsättningen och betecknar kantuppsättningen av . Grafen har en ansluten komponent, låt oss namnge den , som innehåller alla hörn av . Låt oss nu kontrollera om uppsättningen håller till definitionen eller inte.
enligt definitionen ska topparna i uppsättningen nå varandra via en sökväg. Vi väljer två slumpmässiga hörn och :
- kan nås till via:
- kan nås till via:
topparna och uppfyllde definitionen, och vi kunde göra detsamma med andra vertexpar i också.
3.2. Mer än en ansluten komponent
i det här exemplet har den oriktade grafen tre anslutna komponenter:
Let’s name this graph as , where , and . The graph has 3 connected components: and .
låt oss nu se om anslutna komponenter och uppfyller definitionen eller inte. Vi väljer slumpmässigt ett par från varje och set.
från uppsättningen , låt oss välja topparna och .
- kan nås till via:
- kan nås till via:
låt oss nu välja topparna och från uppsättningen .
- is reachable to
- is reachable to
Finally, let’s pick the vertices and from the set .
- is reachable to
- kan nås till
så från dessa enkla demonstrationer är det uppenbart att och följer den anslutna komponentdefinitionen.
egenskaper
som vi redan har diskuterat definitionen och visat ett par exempel på de anslutna komponenterna är det en bra tid att lista ut några av de viktiga egenskaperna som ansluten komponent alltid har.
först och främst är den anslutna komponentuppsättningen alltid tom.
dessutom, om det finns mer än en ansluten komponent för en given graf, kommer föreningen av anslutna komponenter att ge uppsättningen av alla hörn av den givna grafen.
till exempel :
slutligen är anslutna komponentuppsättningar parvis åtskilda. Det betyder att om vi tar korsningen mellan två olika anslutna komponentuppsättningar kommer korsningen att vara lika med en tom uppsättning eller en nolluppsättning.
låt oss överväga de anslutna komponenterna i grafen igen. I , låt oss kolla den här egenskapen:
hitta anslutna komponenter
med en oriktad graf är det viktigt att ta reda på antalet anslutna komponenter för att analysera grafens struktur – det har många verkliga applikationer. Vi kan använda antingen DFS eller BFS för denna uppgift.
i det här avsnittet diskuterar vi en DFS-baserad algoritm som ger oss antalet anslutna komponenter för en given oriktad graf:
variabeln Component_Count returnerar antalet anslutna komponenter i den givna grafen.
vi börjar med att initiera alla hörn till flaggan som inte besökts. Vi väljer sedan ett slumpmässigt toppunkt för att starta och kontrollera om vi har besökt toppunktet eller inte. Om vi inte gjorde det kallar vi DFS-funktionen.
När alla hörn markerade som besökta, avslutar algoritmen och skriver ut numret på de anslutna komponenterna.
i DFS-funktionen är argumenten som vi skickar en vertexuppsättning som innehåller alla hörn i den givna grafen och ett visst vertex som måste tillhöra vertexuppsättningen.
först markerar vi det specifika ingångsvertexet som besökt. Sedan beräknar vi de intilliggande hörnen av det givna specifika ingångsvertexet. För varje intilliggande toppunkt kontrollerar vi om vi besökte dem eller inte. Om inte, kallar vi DFS-funktionen rekursivt tills vi markerar alla intilliggande hörn som besökta.
nyckelpunkten att observera i algoritmen är att antalet anslutna komponenter är lika med antalet oberoende DFS-funktionsanrop. Variabeln Component_Count räknar antalet samtal. Naturligtvis inkluderar detta inte de samtal som görs under DFS () – funktionen rekursivt.
testkörning
Låt oss köra algoritmen på ett exempeldiagram:
ges en oriktad graf , där och .
det första steget i algoritmen är att initiera alla hörn och markera dem som inte besökta.
det röda vertexet anger att det inte besöks. Den gröna vertex betecknar det besöks av algoritmen:
Vi kan välja någon vertex från vertex listan för att starta algoritmen. Låt oss välja .
algoritmen kontrollerar om den besöks eller inte. I detta fall besöks inte . Så det kallar .
inom DFS () märker den först vertexen som besökt och söker efter intilliggande hörn av . Alla intilliggande hörn är också markerade som besökta. När DFS är klar med att besöka alla intilliggande hörn av blir Component_Count 1 och statusen för hörn uppdateras:
återigen väljer algoritmen något slumpmässigt toppunkt. Låt oss välja den här gången.
den kontrollerar om redan är besökt eller inte. Eftersom det inte besöks så anropar algoritmen . Återigen markerar algoritmen vertexen markera som besökt, och DFS söker efter dess intilliggande hörn och markerar dem som besökta. Nu blir Component_Count 2, och statusen för vertexlistan uppdateras igen:
algoritmen fortsätter och väljer, kontrollerar statusen och anropar. Vertexen och dess intilliggande hörn är märkta som besökta och Component_Count ökar till 3. Algoritmen uppdaterar topplistan status:
slutligen väljer algoritmen , kallar och gör som besökt. Vertexen har inga intilliggande hörn så DFS returnerar och Component_Count ökar till 4. Slutligen uppdaterar algoritmen statusen för vertexlistan:
När algoritmen är klar genom att korsa alla hörn i grafen avslutas den och returnerar värdet på Component_Count vilket motsvarar antalet anslutna komponenter i div>. I det här fallet hittar algoritmerna fyra anslutna komponenter i :
Vi använde fyra olika färger för att illustrera de anslutna komponenterna i , nämligen: .
Tidskomplexitetsanalys
algoritmen vi just såg för att hitta anslutna komponenter i en given oriktad graf använder DFS-sökningen och räknar antalet samtal till DFS-funktionen. Om grafen representeras av adjacency-listan besöker DFS-sökningen alla hörn en gång och varje kant två gånger i händelse av en oriktad graf. Kontrollen av vertexstatusen tar tid. Således totalt kommer vår algoritm att ta tid.
om grafen representeras av adjacency-matrisen tar DFS-sökningen tid eftersom den behöver korsa hela raden för att utvärdera grannens hörn. Kontrollen av vertexstatusen tar igen tid. Således ger oss totalt tid.
slutsats
i den här artikeln diskuterade vi en enkel definition av ansluten komponent följt av ett par enkla och lättförståeliga exempel. Vi listade också ut några vanliga men viktiga egenskaper hos anslutna komponenter.
sedan diskuterade vi en DFS-sökbaserad algoritm för att hitta antalet anslutna komponenter i en given graf. Vi demonstrerade algoritmen med hjälp av ett provdiagram. Slutligen analyserade vi algoritmens tidskomplexitet.