• Nenhum resultado encontrado

Componentes fortemente conexas

N/A
N/A
Protected

Academic year: 2022

Share "Componentes fortemente conexas"

Copied!
55
0
0

Texto

(1)

Componentes fortemente conexas

CLRS Cap 22.5

(2)

Busca em profundidade

DFS(G)

1 para cada uV(G) faça

2 u.cor←branco u.π←nil 3 tempo←0

4 para cada uV(G) faça 5 se u.cor=branco 6 então DFS-Visit(u)

DFS-Visit(u)

1 u.cor←cinzento u.d←tempo tempo←tempo+ 1 3 para cada vu.Estrela faça

4 se u.cor=branco 5 então v.πu

6 DFS-Visit(v)

7 u.cor←preto

8 u.f ←tempo tempo←tempo+ 1

(3)

Busca em profundidade

DFS(G)

1 para cada uV(G) faça

2 u.cor←branco u.π←nil 3 tempo←0

4 para cada uV(G) faça 5 se u.cor=branco 6 então DFS-Visit(u) DFS-Visit(u)

1 u.cor←cinzento u.d←tempo tempo←tempo+ 1 3 para cada vu.Estrela faça

4 se u.cor=branco 5 então v.πu

6 DFS-Visit(v)

7 u.cor←preto

8 u.f ←tempo tempo←tempo+ 1

(4)

A floresta DF

Cada componente da floresta DF é uma árvore enraizada, orientada a partir da raiz.

A cada chamada de DFS-Visitno laço principal, os vértices lá processados fazem parte da componente cuja raiz é o argumento da chamada.

Se o grafo é não dirigido,

isso determina as componentes conexas do grafo. E se o grafo é dirigido?

O que conseguimos inferir de uma floresta DF?

(5)

A floresta DF

Cada componente da floresta DF é uma árvore enraizada, orientada a partir da raiz.

A cada chamada de DFS-Visitno laço principal, os vértices lá processados fazem parte da componente cuja raiz é o argumento da chamada.

Se o grafo é não dirigido,

isso determina as componentes conexas do grafo. E se o grafo é dirigido?

O que conseguimos inferir de uma floresta DF?

(6)

A floresta DF

Cada componente da floresta DF é uma árvore enraizada, orientada a partir da raiz.

A cada chamada de DFS-Visitno laço principal, os vértices lá processados fazem parte da componente cuja raiz é o argumento da chamada.

Se o grafo é não dirigido,

isso determina as componentes conexas do grafo.

E se o grafo é dirigido?

O que conseguimos inferir de uma floresta DF?

(7)

A floresta DF

Cada componente da floresta DF é uma árvore enraizada, orientada a partir da raiz.

A cada chamada de DFS-Visitno laço principal, os vértices lá processados fazem parte da componente cuja raiz é o argumento da chamada.

Se o grafo é não dirigido,

isso determina as componentes conexas do grafo.

E se o grafo é dirigido?

O que conseguimos inferir de uma floresta DF?

(8)

Digrafos fortemente conexos

Um digrafo éfortemente conexose e somente se para cada par{s,t} de seus vértices, existem caminhos des a t e de t as. Exemplo: um digrafo fortemente conexo

0

5 1

6 7 8

4

9 10

2 3

11 12

(9)

Componentes fortemente conexas

SejaG um digrafo e u e v vértices deG.

Escrevemosu v se existe caminho de u para v em G.

SejaC um conjunto maximal de vértices deG tal que u v ev u quaisquer que sejamu e v em C. C é uma componente fortemente conexadeG.

Diferentes componentes fortemente conexas são disjuntas, ou seja, as componentes determinam uma partição deVG.

(10)

Componentes fortemente conexas

SejaG um digrafo e u e v vértices deG.

Escrevemosu v se existe caminho de u para v em G.

SejaC um conjunto maximal de vértices deG tal que u v e v u quaisquer que sejamu ev em C.

C é uma componente fortemente conexadeG.

Diferentes componentes fortemente conexas são disjuntas, ou seja, as componentes determinam uma partição deVG.

(11)

Componentes fortemente conexas

SejaG um digrafo e u e v vértices deG.

Escrevemosu v se existe caminho de u para v em G.

SejaC um conjunto maximal de vértices deG tal que u v e v u quaisquer que sejamu ev em C. C é uma componente fortemente conexadeG.

Diferentes componentes fortemente conexas são disjuntas, ou seja, as componentes determinam uma partição deVG.

(12)

Componentes fortemente conexas

SejaG um digrafo e u e v vértices deG.

Escrevemosu v se existe caminho de u para v em G.

SejaC um conjunto maximal de vértices deG tal que u v e v u quaisquer que sejamu ev em C. C é uma componente fortemente conexadeG.

Diferentes componentes fortemente conexas são disjuntas, ou seja, as componentes determinam uma partição deVG.

(13)

Componentes fortemente conexas

Exemplo: 4 componentes fortemente conexas

0

5 1

6 7 8

4

9 10

2 3

11 12

Problema: Dado digrafo G, encontrar

todas as componentes fortemente conexas deG.

(14)

Componentes fortemente conexas

Exemplo: 4 componentes fortemente conexas

11 12

1 0

5

3

2

6 7 8

4

9 10

Problema: Dado digrafoG, encontrar

todas as componentes fortemente conexas deG.

(15)

Exemplo

v 0 1 2 3 4 5 6 7 8 9 10 11 12 id[v] 2 1 2 2 2 2 2 3 3 0 0 0 0

11 12

1 0

5

3

2

6 7 8

4

9 10

(16)

Exemplo

v 0 1 2 3 4 5 6 7 8 9 10 11 12 id[v] 2 1 2 2 2 2 2 3 3 0 0 0 0

11 12

1 0

5

3

2

6 7 8

4

9 10

(17)

Algoritmos Tarjan, Kosaraju e Sharir

Robert Endre Tarjan (1972), Sambasiva Rao Kosaraju (1978) eMicha Sharir (1981) desenvolveram algoritmos que consomem tempoO(n+m)

para calcular os componentes f.c. de um digrafoG.

Esses algoritmosutilizam DFS de uma maneira fundamental.

Tarjanrealiza apenas um passo DFS sobre o digrafo. Kosaraju e Sharirfazem duas passadas DFS.

Discutiremos o algoritmo de Kosaraju e Sharir.

(18)

Algoritmos Tarjan, Kosaraju e Sharir

Robert Endre Tarjan (1972), Sambasiva Rao Kosaraju (1978) eMicha Sharir (1981) desenvolveram algoritmos que consomem tempoO(n+m)

para calcular os componentes f.c. de um digrafoG.

Esses algoritmosutilizam DFS de uma maneira fundamental.

Tarjanrealiza apenas um passo DFS sobre o digrafo.

Kosaraju e Sharirfazem duas passadas DFS.

Discutiremos oalgoritmo de Kosaraju e Sharir.

(19)

Propriedade

Vértices de um componente fortemente conexo são umasubarborescência em uma floresta DF.

11 12

1 0

5

3

2

6 7 8

4

9 10

Ao entrar num componente f.c., examinaremos

todos os seus vértices na mesma chamada deDFS-Visit.

(20)

Propriedade

Vértices de um componente fortemente conexo são umasubarborescência em uma floresta DF.

11 12

1 0

5

3

2

6 7 8

4

9 10

Ao entrar num componente f.c., examinaremos

(21)

Digrafos dos componentes

Odigrafo dos componentes deG tem um

vértice para cada componente fortemente conexo e um arcoU-W seG possui um arco com ponta inicial emU e ponta final em W.

Digrafo dos componentes é um DAG! (DAG: directed acyclic graph)

(22)

Digrafos dos componentes

Odigrafo dos componentes deG tem um

vértice para cada componente fortemente conexo e um arcoU-W seG possui um arco com ponta inicial emU e ponta final em W.

Digrafo dos componentes é um DAG!

(DAG: directed acyclic graph)

(23)

Ideia . . .

Visitar as componentes

numaordem topológica do digrafo das componentes...

Primeiro a componenteamarelae aazul (ou vice-versa), depois aciam, e por último a vermelha.

(24)

Ideia . . .

Visitar as componentes

numaordem topológica do digrafo das componentes...

Primeiro a componenteamarelae aazul (ou vice-versa), depois aciam, e por último a vermelha.

(25)

Ideia . . . G e DFS

Visitar as componentes

numa ordem topológica do digrafo das componentes...

11 12

1 0

5

3

2

6 7 8

4

9 10

(26)

Ideia . . . G e DFS

Visitar as componentes

numa ordem topológica do digrafo das componentes...

11 12

1 0

5

3

2

6 7 8

4

9 10

(27)

Ideia . . . G e DFS

Visitar as componentes

numa ordem topológica do digrafo das componentes...

11 12

1 0

5

3

2

6 7 8

4

9 10

(28)

Ideia . . . G e DFS

Visitar as componentes

numa ordem topológica do digrafo das componentes...

11 12

1 0

5

3

2

6 7 8

4

9 10

(29)

Ideia . . . G e DFS

Visitar as componentes

numa ordem topológica do digrafo das componentes...

11 12

1 0

5

3

2

6 7 8

4

9 10

(30)

Ideia . . . G e DFS

Visitar as componentes

numa ordem topológica do digrafo das componentes...

11 12

1 0

5

3

2

6 7 8

4

9 10

Cada chamada à DFS-Visit devolve uma componente fortemente conexa.

(31)

Propriedade

Um digrafoG e seu digrafo reversoR têm asmesmascomponente fortemente conexas.

Exemplo: DigrafoG

11 12

1 0

5

3

2

6 7 8

4

9 10

(32)

Propriedade

Um digrafoG e seu digrafo reversoR têm asmesmascomponente fortemente conexas.

Exemplo: Digrafo reverso R deG

11 12

1 0

5

3

2

6 7 8

4

9 10

(33)

DFS e componentes fortemente conexas

Considere o vetorf obtido de uma DFS noG.

Fato. Se f[v]>f[w] e existe um caminho dew a v, Fato. entãoexiste um caminhode v a w.

Em outras palavras:

Fato. Se existe um caminho dew av e f[v]>f[w],

entãov e w estão em ummesmo componente fortemente conexo.

(34)

DFS e componentes fortemente conexas

Considere o vetorf obtido de uma DFS noG. Fato. Se f[v]>f[w] e existe um caminho dew a v, Fato. entãoexiste um caminhode v a w.

Em outras palavras:

Fato. Se existe um caminho dew av e f[v]>f[w],

entãov e w estão em ummesmo componente fortemente conexo.

(35)

DFS e componentes fortemente conexas

Considere o vetorf obtido de uma DFS noG. Fato. Se f[v]>f[w] e existe um caminho dew a v, Fato. entãoexiste um caminhode v a w.

Em outras palavras:

Fato. Se existe um caminho dew av ef[v]>f[w],

entãov e w estão em ummesmo componente fortemente conexo.

(36)

Algoritmo de Kosaraju-Sharir

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G)

Execute uma DFS emG calculandou.f para cada u. Construa Gr.

Execute uma DFS emGr considerando os vértices deGr em ordem decrescente do valor de f calculado acima. Devolva as componentes da floresta DF construída para Gr.

(37)

Algoritmo de Kosaraju-Sharir

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G)

Execute uma DFS emG calculandou.f para cada u. Construa Gr.

Execute uma DFS emGr considerando os vértices deGr em ordem decrescente do valor de f calculado acima. Devolva as componentes da floresta DF construída para Gr.

(38)

Algoritmo de Kosaraju-Sharir

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G)

Execute uma DFS emG calculandou.f para cada u.

Construa Gr.

Execute uma DFS emGr considerando os vértices deGr em ordem decrescente do valor de f calculado acima. Devolva as componentes da floresta DF construída para Gr.

(39)

Algoritmo de Kosaraju-Sharir

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G)

Execute uma DFS emG calculandou.f para cada u.

Construa Gr.

Execute uma DFS emGr considerando os vértices deGr em ordem decrescente do valor de f calculado acima. Devolva as componentes da floresta DF construída para Gr.

(40)

Algoritmo de Kosaraju-Sharir

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G)

Execute uma DFS emG calculandou.f para cada u.

Construa Gr.

Execute uma DFS emGr considerando os vértices deGr em ordem decrescente do valor de f calculado acima.

Devolva as componentes da floresta DF construída para Gr.

(41)

Algoritmo de Kosaraju-Sharir

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G)

Execute uma DFS emG calculandou.f para cada u.

Construa Gr.

Execute uma DFS emGr considerando os vértices deGr em ordem decrescente do valor de f calculado acima.

Devolva as componentes da floresta DF construída para Gr.

(42)

Segunda versão (para a simulação)

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G) Construa Gr.

Execute uma DFS emGr calculandou.f para cadau. Execute uma DFS emG considerando os vértices de G em ordem decrescente do valor de f calculado acima. Devolva as componentes da floresta DF construída para G.

(43)

Segunda versão (para a simulação)

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G) Construa Gr.

Execute uma DFS emGr calculandou.f para cadau.

Execute uma DFS emG considerando os vértices de G em ordem decrescente do valor de f calculado acima. Devolva as componentes da floresta DF construída para G.

(44)

Segunda versão (para a simulação)

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G) Construa Gr.

Execute uma DFS emGr calculandou.f para cadau.

Execute uma DFS emG considerando os vértices de G em ordem decrescente do valor de f calculado acima.

Devolva as componentes da floresta DF construída para G.

(45)

Segunda versão (para a simulação)

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G) Construa Gr.

Execute uma DFS emGr calculandou.f para cadau.

Execute uma DFS emG considerando os vértices de G em ordem decrescente do valor de f calculado acima.

Devolva as componentes da floresta DF construída para G.

(46)

Digrafo reverso R e DFS

v 0 1 2 3 4 5 6 7 8 9 10 11 12

f[v] 7 8 6 5 4 3 2 1 0 12 9 10 11

11 12

1 0

5

3

2

6 7 8

4

9 10

(47)

Digrafo reverso R e DFS

v 0 1 2 3 4 5 6 7 8 9 10 11 12

f[v] 7 8 6 5 4 3 2 1 0 12 9 10 11

i 0 1 2 3 4 5 6 7 8 9 10 11 12

f−1[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1 0

5

3

2

6 7 8

4

9 10

(48)

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

f−1[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1 0

5

3

2

6 7 8

4

9 10

(49)

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

f−1[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1 0

5

3

2

6 7 8

4

9 10

(50)

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

f−1[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1 0

5

3

2

6 7 8

4

9 10

(51)

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

f1[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1 0

5

3

2

6 7 8

4

9 10

(52)

Digrafo G e DFS

i 0 1 2 3 4 5 6 7 8 9 10 11 12

f1[i] 8 7 6 5 4 3 2 0 1 10 11 12 9

11 12

1 0

5

3

2

6 7 8

4

9 10

(53)

Algoritmo de Kosaraju-Sharir

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G)

I Execute uma DFS emG calculandou.f para cada u.

I Construa Gr.

I Execute uma DFS emGr considerando os vértices deGr em ordem decrescente do valor de f calculado acima.

I Devolva as componentes da floresta DF construída para Gr.

Consumo de tempo: linear no tamanho de G.

Teorema: Kosaraju-Sharir(G) calcula corretamente as componentes fortemente conexas deG.

(54)

Algoritmo de Kosaraju-Sharir

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G)

I Execute uma DFS emG calculandou.f para cada u.

I Construa Gr.

I Execute uma DFS emGr considerando os vértices deGr em ordem decrescente do valor de f calculado acima.

I Devolva as componentes da floresta DF construída para Gr. Consumo de tempo: linear no tamanho de G.

Teorema: Kosaraju-Sharir(G) calcula corretamente as componentes fortemente conexas deG.

(55)

Algoritmo de Kosaraju-Sharir

SejaG= (V,E) um digrafo.

SejaGr o digrafo reverso de G (todos os arcos invertidos).

Kosaraju-Sharir(G)

I Execute uma DFS emG calculandou.f para cada u.

I Construa Gr.

I Execute uma DFS emGr considerando os vértices deGr em ordem decrescente do valor de f calculado acima.

I Devolva as componentes da floresta DF construída para Gr. Consumo de tempo: linear no tamanho de G.

Teorema: Kosaraju-Sharir(G) calcula corretamente as componentes fortemente conexas deG.

Referências

Documentos relacionados

Se nesse período crítico, ela encontra alguém que, ignorante e inescrupulosamente, lhe fornece exercícios respiratórios, e se ela segue as instruções fidedignamente na esperança

As espécies encontradas em níveis mais altos em ambos os grupos foram as três do complexo vermelho (P. Os indivíduos não-tabagistas e tabagistas apresentaram perfis

De forma geral, milho e soja correspondem juntos a mais de 50% da composição da ração de peixes (Sonoda et al., 2016), principalmente nas rações de terminação, que é a fase que

No lugar da oferta da identificação, da inclusão do indivíduo em projetos e em programas especializados, segundo a lógica predicativa, trata-se, agora, mais ainda, de colocar

Presidente: Meus irmãos e minhas irmãs, nesta noite santa, em que nosso Senhor Jesus Cristo passou da morte à vida, a Igreja convida os seus filhos dispersos por toda a

Os motins na América Portuguesa tanto quanto na Espanhola derivam do colapso das formas acomodativas - como será melhor explicado à frente -, ou melhor dizendo, do rompimento

Deus não vai perguntar quantas pessoas você atraiu para a igreja.... mas vai perguntar como você influenciou o Mundo à

ficará impossibilitado de realizar a prova em condições especiais. A candidata que estiver amamentando poderá solicitar atendimento especial, mediante requerimento