Připojený Komponent v Grafu,

Přehled

V tomto tutoriálu, budeme diskutovat o konceptu connected components v neorientovaný graf.

projdeme několik jednoduchých příkladů, abychom získali základní porozumění, a pak vypíšeme vlastnosti připojených komponent.

definice připojené komponenty

připojená komponenta nebo jednoduše součást neorientovaného grafu je podgraf, ve kterém je každá dvojice uzlů vzájemně propojena cestou.

zkusme to ale ještě zjednodušit. Sada uzlů tvoří připojenou komponentu v neorientovaném grafu, pokud jakýkoli uzel ze sady uzlů může dosáhnout jakéhokoli jiného uzlu procházením okrajů. Hlavním bodem je dosažitelnost.

v připojených komponentách jsou všechny uzly vždy dosažitelné od sebe.

několik příkladů

v této části budeme diskutovat o několika jednoduchých příkladech. Pokusíme se spojit příklady s definicí uvedenou výše.

3.1. Jedna připojená komponenta

v tomto příkladu má daný neorientovaný graf jednu připojenou komponentu:

pojmenujme tento graf G1 (V, E)V = \{V1, V2, V3, V4, V5, V6\} označuje vrchol setu a E = \{E1, E2, E3, E4, E5, E6, E7\} označuje okraj nastavena G1. Graf G1 má jeden připojený komponent, ať je to jméno C1, který obsahuje všechny vrcholy G1. Nyní zkontrolujeme, zda sada C1 drží definici nebo ne.

podle definice by se vrcholy v sadě C1 měly navzájem dosáhnout cestou. Vybrali jsme si dva náhodné vrcholy V1V6:

  • V6 je dostupný na V1 prostřednictvím: E4 \rightarrow E7 \ nebo\ E3 \rightarrow E5 \rightarrow E7 \ nebo\ E1 \rightarrow E2 \rightarrow E6 \rightarrow E7
  • V1 je dostupný na V6 přes: E7 \rightarrow E4 \ nebo\ E7 \rightarrow E5 \rightarrow E3 \ nebo\ E7 \rightarrow E6\rightarrow E2 \rightarrow E1

body V1V6 spokojen definice, a mohli bychom udělat to samé s další vrchol párů v C1 stejně.

3.2. Více než jedna připojená komponenta

v tomto příkladu má neřízený graf tři připojené komponenty:

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

Nyní, pojďme se podívat, zda připojené komponenty C1C2C3 splňují definici nebo ne. Budeme náhodně vybrat pár z každé C1C2C3 nastavit.

Z množiny C1, vybereme vrcholy V4V6.

  • V6 je dosažitelný na v4 přes: E2 \rightarrow E6 \rightarrow E7 \ nebo\ E1 \rightarrow E4 \rightarrow E7 \ nebo\ E1 \rightarrow E3 \rightarrow E5 \rightarrow E7
  • V4 je dostupný na V6 prostřednictvím: E7 \rightarrow E6 \rightarrow E2 \ nebo\ E7 \rightarrow E4 \rightarrow E1 \ nebo\ E7 \rightarrow E5 \rightarrow E3 \rightarrow E1

Teď pojďme vybrat vrcholy V8V9 set 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 \rightarrow E10
  • V12 je dostupný na V11E10 \rightarrow E11

Takže z těchto jednoduchých demonstrací, je jasné, že C1C2C3 postupujte podle připojených součástí definice.

Vlastnosti

Jak jsme již diskutovali definice a demonstroval několik příkladů z připojených komponent, to je dobrý čas na seznam některé z důležitých vlastností, které připojené komponenty vždy drží.

nejprve je připojená sada komponent vždy prázdná.

navíc, pokud existuje více než jedna připojená komponenta pro daný graf, pak spojení připojených komponent dá sadu všech vrcholů daného grafu.

například G2:

\

nakonec jsou připojené sady komponent párově disjunktní. To znamená, že pokud vezmeme průsečík mezi dvěma různými připojenými sadami komponent, bude průsečík roven prázdné sadě nebo nulové sadě.

podívejme se znovu na připojené komponenty grafu G2. V G2 zkontrolujte tuto vlastnost:

\

Zjištění Připojených Komponent

Vzhledem k tomu neorientovaný graf, je důležité zjistit počet připojených komponent analyzovat strukturu grafu – to má mnoho reálných aplikací. Pro tento úkol můžeme použít buď DFS nebo BFS.

V této části budeme diskutovat o systému souborů DFS založené na algoritmu, který nám dává počet připojených komponent pro daný neorientovaný graf:

Poskytnuté QuickLaTeX.com

proměnná Component_Count vrací počet připojených komponent v daném grafu.

začneme inicializací všech vrcholů na nenavštívenou vlajku. Poté vybereme libovolný náhodný vrchol a zkontrolujeme, zda jsme vrchol navštívili nebo ne. Pokud ne, zavoláme funkci DFS.

jakmile jsou všechny vrcholy označeny jako navštívené, algoritmus ukončí a vytiskne počet připojených komponent.

ve funkci DFS jsou argumenty, které předáváme, sada vrcholů obsahující všechny vrcholy daného grafu a konkrétní vrchol, který musí patřit do sady vrcholů.

nejprve označíme konkrétní vstupní vrchol jako navštívený. Pak vypočítáme sousední vrcholy daného konkrétního vstupního vrcholu. U každého sousedního vrcholu zkontrolujeme, zda jsme je navštívili nebo ne. Pokud ne, voláme funkci DFS rekurzivně, dokud neoznačíme všechny sousední vrcholy jako navštívené.

klíčovým bodem pozorovat v algoritmu je, že počet připojených komponent je roven počtu nezávislých DFS volání funkce. Proměnná Component_Count počítá počet hovorů. Samozřejmě to nezahrnuje volání, která jsou prováděna v rámci funkce DFS() rekurzivně.

testovací běh

spustíme algoritmus na vzorovém grafu:

Vzhledem k tomu neorientovaný graf G3(V, E), kde V = \{V1, V2, V3, V4, V5, V6, V7, V8\}E = \{E1, E2, E3, E4, E5\}.

prvním krokem algoritmu je inicializace všech vrcholů a jejich označení jako nenavštěvované.

červený vrchol označuje, že není navštíven. Zelený vrchol označuje, že je navštíven algoritmem:

můžeme vybrat libovolný vrchol ze seznamu vrcholů pro spuštění algoritmu. Vyberte V1.

algoritmus kontroluje, zda je navštíven nebo ne. V tomto případě seV1 nenavštíví. Takže volá DFS (V, V1).

v Rámci DFS(), první, štítky vrchol V1 jako navštívené a vyhledá sousední vrcholy V1. Všechny sousední vrcholy jsou také označeny jako navštívené. Když DFS dokončí návštěvu všech sousedních vrcholů V1, Component_Count se stane 1 a stav vrcholů se aktualizuje:

algoritmus opět vybere libovolný náhodný vrchol. Vyberme v4 tentokrát.

kontroluje, zda je v4 již navštíveno nebo ne. Protože není navštíven, algoritmus volá DFS (V, V4). Opět algoritmus označí vrchol V4 označit jako navštívil, a DFS hledá jeho sousední vrcholy a označí je jako navštívené. Nyní se Component_Count stane 2 a stav seznamu vertex se znovu aktualizuje:

algoritmus pokračuje a rozhodne V6, kontroluje stav, a vyzývá DFS(V, V6). Vrchol v6 a jeho přilehlé vrcholy jsou označeny jako navštívené a component_count se zvýší na 3. Algoritmus aktualizuje vrchol seznamu stav:

Konečně, algoritmus vybere V8 hovory DFS(V, V8)V8 jako navštívené. Vertex V8 nemá žádné sousední vrcholy, takže DFS se vrací a Component_Count se zvyšuje na 4. Konečně, algoritmus aktualizace stavu vertex seznam:

Jako algoritmus skončil procházející všemi vrcholy grafu G3, tak to ukončí a vrátí hodnotu Component_Count, který se rovná počtu připojených komponent v G3. V tomto případě algoritmy najdou čtyři připojené komponenty v G3:

Jsme použili čtyři různé barvy, které ilustrují připojené komponenty v G3, konkrétně: C1 = \{V1, V2, V3\}C2 = \{V4, V5\}C3 = \{V6, V7\}C4 = \{V8\}.

časová Složitost Analýzy

algoritmus, který jsme právě viděli pro zjištění připojených komponent v daný neorientovaný graf používá DFS vyhledávání a počítá počet volání systému souborů DFS funkce. Pokud je graf reprezentován seznamem sousedství, pak vyhledávání DFS navštíví všechny vrcholy jednou a každý okraj dvakrát v případě neorientovaného grafu. Kontrola stavu vrcholu trvá o (1) čas. Celkově tedy náš algoritmus zabere \ mathbf{O (V+E)} čas.

V případě, že graf je reprezentován pomocí matice sousednosti, DFS hledání trvá O(V^2) čas, jako je třeba procházet celý řádek vyhodnotit soused vrcholy. Kontrola stavu vrcholu opět trvá o(1) čas. Tak nám dává celkem \ mathbf{O (v^2)} čas.

Závěr

V tomto článku jsme diskutovali jednoduchá definice připojených komponent následuje pár jednoduchých a snadno pochopitelné příklady. Také jsme uvedli některé běžné, ale důležité vlastnosti připojených komponent.

poté jsme diskutovali o algoritmu založeném na vyhledávání DFS, abychom našli počet připojených komponent v daném grafu. Algoritmus jsme demonstrovali pomocí vzorového grafu. Nakonec jsme analyzovali časovou složitost algoritmu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.