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 označuje vrchol setu a označuje okraj nastavena . Graf má jeden připojený komponent, ať je to jméno , který obsahuje všechny vrcholy . Nyní zkontrolujeme, zda sada drží definici nebo ne.
podle definice by se vrcholy v sadě měly navzájem dosáhnout cestou. Vybrali jsme si dva náhodné vrcholy :
- je dostupný na prostřednictvím:
- je dostupný na přes:
body spokojen definice, a mohli bychom udělat to samé s další vrchol párů v 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 , where , and . The graph has 3 connected components: and .
Nyní, pojďme se podívat, zda připojené komponenty splňují definici nebo ne. Budeme náhodně vybrat pár z každé nastavit.
Z množiny , vybereme vrcholy .
- je dosažitelný na přes:
- je dostupný na prostřednictvím:
Teď pojďme vybrat vrcholy set .
- is reachable to
- is reachable to
Finally, let’s pick the vertices and from the set .
- is reachable to
- je dostupný na
Takže z těchto jednoduchých demonstrací, je jasné, že 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 :
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 . V 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:
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 , kde .
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 .
algoritmus kontroluje, zda je navštíven nebo ne. V tomto případě se nenavštíví. Takže volá .
v Rámci DFS(), první, štítky vrchol jako navštívené a vyhledá sousední vrcholy . Všechny sousední vrcholy jsou také označeny jako navštívené. Když DFS dokončí návštěvu všech sousedních vrcholů , Component_Count se stane 1 a stav vrcholů se aktualizuje:
algoritmus opět vybere libovolný náhodný vrchol. Vyberme tentokrát.
kontroluje, zda je již navštíveno nebo ne. Protože není navštíven, algoritmus volá . Opět algoritmus označí vrchol 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 , kontroluje stav, a vyzývá . Vrchol 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 hovory jako navštívené. Vertex 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 , tak to ukončí a vrátí hodnotu Component_Count, který se rovná počtu připojených komponent v . V tomto případě algoritmy najdou čtyři připojené komponenty v :
Jsme použili čtyři různé barvy, které ilustrují připojené komponenty v , konkrétně: .
č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á čas. Celkově tedy náš algoritmus zabere čas.
V případě, že graf je reprezentován pomocí matice sousednosti, DFS hledání trvá čas, jako je třeba procházet celý řádek vyhodnotit soused vrcholy. Kontrola stavu vrcholu opět trvá čas. Tak nám dává celkem č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.