Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilLadislava Mašková
1
Hledání silně souvislý komponent Silně souvislá komponenta orientovaného grafu G= (V,E) je maximální množina uzlů UV taková že ∀ u,v ∈ V : u je dosažitelné z v a v je dosažitelné z u
2
Známé algoritmy a jejich složitost ● Tarjan (1972) – složitost (V + E) ● Double DFS – složitost (V + E) Je zřejmé, že jejich složitost je zároveň dolní hranice tohoto problému
3
Double DFS ● Je založen na aplikaci DFS ● Algoritmus využívá transponovaný graf G T ● Grafy G a G T mají shodné SCC ● Po provedení 2. DFS jsou hledané komponenty tvořeny vrcholy jednotlivých DFS stromů
4
SCC(G) 1.Zavolej DFS(G), který spočítá koncový čas pro každý vrchol 2.Spočitej transponovaný graf G T 3.Zavolej DFS(G T ), ale vrcholy uvažu v pořadí klesajících koncových časů spočitaných v 1. 4.Výstup jsou komponenty tvořeny vrcholy jednotlivých DFS stromů spočitaných v 3.
5
Provedeme 1.DFS
6
0/ 0
7
2/ 0 0/ 0 1/ 0 0/ 0
8
2/ 0 3/ 4 1/ 0 0/ 0
9
2/ 5 3/ 4 1/ 0 0/ 0
10
6/ 0 2/ 5 3/ 4 1/ 0 0/ 0
11
6/ 0 2/ 5 3/ 4 1/ 0 7/ 8
12
6/ 9 2/ 5 3/ 4 1/ 0 7/ 8
13
6/ 9 2/ 5 3/ 4 1/ 1 0 7/ 8
14
Transponujeme graf Provedeme 2.DFS na transponovaném grafu ale v hlavní cyklu DFS uvažujeme vrcholy v pořadí klesajících koncových časů spočitaných v 1. DFS
15
9 6 7 1010 8
16
9 6 7 1010 8
17
9 6 7 1010 8
18
9 6 7 1010 8
19
9 6 7 1010 8
20
9 6 7 1010 8
21
Vrcholy jednotlivých DFS stromů tvoří hledané sylně souvislé komponenty
22
Robert E. Tarjan (*1948) ● studoval na California Institute of Technology (B.S.) a Stanford University (M.S. a Ph.D.) ● Publikoval přes 170 článků, vymyslel řadu alogritmů (převážně z oblasti grafových algoritmů), zabýval se datovými strukturami. ● Algoritmus pro SCC publikován v: Robert E. Tarjan, Depth-first search and linear graph algorithms, SIAM Journal on Computing, 1(2):146-160, 1972.
23
Tarjanův algoritmus pro SCC ● Je založený na DFS. ● Vrcholy v grafu si indexuje podle pořadí v jakém je navštěvuje (visit), u každého vrcholu si také pamatuje vrchol s nejnižším indexem, ke kterému existuje z tohoto vrcholu cesta (low-link). ● Při první návštěvě vrcholu nastaví low-link = visit, při dalším prohledávání upravuje low-link na odpovídající hodnotu. ● Navštívené vrcholy postupně ukládá na zásobník (kde jsou seřazeny podle jejich hodnoty visit). ● Když se rekurzívní volání DFS vrátí zpět k takovému vrcholu, u kterého platí visit = low-link (tedy vrchol s nejnižším indexem, ke kterému vede z toho vrcholu cesta, je on sám), tak se odstraní všechny vrcholy ze sásobníku až po tento vrchol – tvoří totiž silně spojitou komponentu.
24
Příklad
36
Srovnání obou algoritmů
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.