• Nenhum resultado encontrado

Projeto e Análise de Algoritmos

N/A
N/A
Protected

Academic year: 2021

Share "Projeto e Análise de Algoritmos"

Copied!
28
0
0

Texto

(1)

Projeto e Análise de Algoritmos

Edirlei Soares de Lima

<edirlei@iprj.uerj.br>

Aula 13 – Componentes Fortemente

Conectados

(2)

Componentes Fortemente Conectados

• Um componente fortemente conectado (Strongly Connected

Component - SCC) de um grafo orientado G= (V, A) é um conjunto

máximo de vértices C ⊆ V, tal que, para todo par de vértice u e v:

– u ⇝ v – v ⇝ u

(3)

Componentes Fortemente Conectados

• Algoritmos:

– Algoritmo de Kosaraju;

– Algoritmo de Tarjan;

(4)

Algoritmo de Kosaraju

1. Chama BuscaEmProfundidade(G) para obter os tempos de término t[u] para cada vértice u.

2. Obtem GT (G transposto).

3. Chama BuscaEmProfundidade(GT), realizando a busca a partir

do vértice de maior t[u] obtido pela BuscaEmProfundidade(G). 4. Enquanto houver vértices restantes, inicie uma nova busca em profundidade em GT a partir do vértice de maior t[u]

dentre os vértices restantes.

5. Retorne os vértices de cada árvore da floresta obtida como um componente fortemente conectado separado.

(5)

Algoritmo de Kosaraju

1. Chama BuscaEmProfundidade(G) para obter os tempos de término t[u] para cada vértice u.

0 1 2 3 4 5 6 7 c

d f

(6)

Algoritmo de Kosaraju

1. Chama BuscaEmProfundidade(G) para obter os tempos de término t[u] para cada vértice u.

0 1 2 3 4 5 6 7 c b b b b b b b b d 1 11 4 13 2 14 3 6 f 10 12 5 16 9 15 8 7

(7)

Algoritmo de Kosaraju

2. Obtem GT (G transposto). 0 1 2 3 4 5 6 7 c b b b b b b b b d 1 11 4 13 2 14 3 6 f 10 12 5 16 9 15 8 7

(8)

Algoritmo de Kosaraju

2. Obtem GT (G transposto). 0 1 2 3 4 5 6 7 c b b b b b b b b d 1 11 4 13 2 14 3 6 f 10 12 5 16 9 15 8 7

(9)

Algoritmo de Kosaraju

3. Chama BuscaEmProfundidade(GT),

realizando a busca a partir do vértice de maior t[u] obtido pela BuscaEmProfundidade(G). 0 1 2 3 4 5 6 7 c b b b b b b b b d 1 11 4 13 2 14 3 6 f 10 12 5 16 9 15 8 7 f

(10)

Algoritmo de Kosaraju

3. Chama BuscaEmProfundidade(GT),

realizando a busca a partir do vértice de maior t[u] obtido pela BuscaEmProfundidade(G). 0 1 2 3 4 5 6 7 c b b b b b b b b d 1 11 4 13 2 14 3 6 f 10 12 5 16 9 15 8 7 3 5 1 0 4 6 7 2 f 16 15 12 10 9 8 7 5

(11)

Algoritmo de Kosaraju

3. Chama BuscaEmProfundidade(GT),

realizando a busca a partir do vértice de maior t[u] obtido pela BuscaEmProfundidade(G). 0 1 2 3 4 5 6 7 c d f 3 5 1 0 4 6 7 2 f 16 15 12 10 9 8 7 5

(12)

Algoritmo de Kosaraju

3. Chama BuscaEmProfundidade(GT),

realizando a busca a partir do vértice de maior t[u] obtido pela BuscaEmProfundidade(G). 0 1 2 3 4 5 6 7 c b b d 1 2 f 4 3 3 5 1 0 4 6 7 2 f 16 15 12 10 9 8 7 5

(13)

Algoritmo de Kosaraju

5. Retorne os vértices de cada árvore da floresta obtida como um componente fortemente conectado separado. 0 1 2 3 4 5 6 7 c b b d 1 2 f 4 3 3 5 1 0 4 6 7 2 f 16 15 12 10 9 8 7 5

(14)

Classificação de Arestas

• Classificação de arestas pode ser útil

para derivar outros algoritmos.

• Na busca em profundidade cada

aresta pode ser classificada pela cor

do vértice que é alcançado pela

primeira vez:

– Branco indica uma aresta de árvore.

– Cinza indica uma aresta de retorno.

– Preto indica uma aresta de avanço

quando u é descoberto antes de v ou uma

(15)

Algoritmo de Kosaraju

4. Enquanto houver vértices

restantes, inicie uma nova busca em profundidade em GT a partir do

vértice de maior t[u] dentre os vértices restantes. 0 1 2 3 4 5 6 7 c b b d 1 2 f 4 3 3 5 1 0 4 6 7 2 f 16 15 12 10 9 8 7 5

(16)

Algoritmo de Kosaraju

5. Retorne os vértices de cada árvore da floresta obtida como um componente fortemente conectado separado. 0 1 2 3 4 5 6 7 c b b b b b b b b d 7 5 8 1 10 2 9 15 f 14 6 13 4 11 3 12 16 3 5 1 0 4 6 7 2 f 16 15 12 10 9 8 7 5

(17)

Algoritmo de Kosaraju – Análise

1. Chama BuscaEmProfundidade(G) para obter os tempos de término t[u] para cada vértice u. 2. Obtem GT (G transposto).

3. Chama BuscaEmProfundidade(GT), realizando

a busca a partir do vértice de maior t[u] obtido pela BuscaEmProfundidade(G).

4. Enquanto houver vértices restantes, inicie uma nova busca em profundidade em GT a partir

do vértice de maior t[u] dentre os vértices restantes.

5. Retorne os vértices de cada árvore da

floresta obtida como um componente fortemente conectado separado.

(18)

Algoritmo de Tarjan

1. Chamar BuscaEmProfundidade(G).

2. Ao visitar um vértice v, coloca-lo em uma pilha S;

3. Calcular e guardar os valores de d[v] e low[v];

d[v]: Número de vértices visitados quando v é descoberto; low[v]: O menor valor de d[] ou low[] atingível por uma aresta de retorno na árvore de v;

4. Se ao concluir a exploração de um vértice v d[v] = low[v], então v é "raíz" de um componente fortemente conectado.

Nesse caso retirar tudo o que está na pilha S até v e reportar esses elementos como um componente fortemente conectado;

(19)

Algoritmo de Tarjan

(20)

Algoritmo de Tarjan

2. Ao visitar um vértice v, coloca-lo em uma pilha S; 3. Calcular e guardar os valores de d[v] e low[v]; a b c d e f g h i c d S low

(21)

Algoritmo de Tarjan

4. Se ao concluir a exploração de um vértice v d[v] = low[v], então v é raíz de um componente fortemente conectado. Nesse caso retirar tudo o que está na pilha S até v e

reportar esses elementos como um componente fortemente conectado;

a b c d e f g h i c g g w w g g b b b d 0 1 2 3 4 5 6 2 5 5 S a b e f g h i low

(22)

Algoritmo de Tarjan

a b c d e f g h i c g g w w b b b b b d 0 1 2 3 4 5 6 2 2 2 5 5 S a b e f g low 4. Se ao concluir a exploração de um vértice v d[v] = low[v], então v é raíz de um componente fortemente conectado. Nesse caso retirar tudo o que está na pilha S até v e

reportar esses elementos como um componente fortemente conectado;

(23)

Algoritmo de Tarjan

a b c d e f g h i c b b b b b b b b b d 0 1 8 7 2 3 4 5 6 0 0 0 0 2 2 2 5 5 S a b d c low 4. Se ao concluir a exploração de um vértice v d[v] = low[v], então v é raíz de um componente fortemente conectado. Nesse caso retirar tudo o que está na pilha S até v e

reportar esses elementos como um componente fortemente conectado;

(24)

Algoritmo de Tarjan

a b c d e f g h i c b b b b b b b b b d 0 1 8 7 2 3 4 5 6 0 0 0 0 2 2 2 5 5 low

(25)

Algoritmo de Tarjan – Análise

1. Chamar BuscaEmProfundidade(G).

2. Ao visitar um vértice v, coloca-lo em uma pilha S;

3. Calcular e guardar os valores de d[v] e low[v];

4. Se ao concluir a exploração de um vértice v d[v] = low[v], então v é "raíz" de um componente fortemente conectado. Nesse caso retirar tudo o que está na pilha S até v e reportar esses elementos como um componente fortemente conectado;

(26)

Aplicações

• Encontrar grupos de pessoas relacionadas em redes sociais;

– Sistemas de recomendação;

• Resolver problemas de 2-satisfiability (2-SAT);

• Algoritmo de model checking;

(27)

Exercícios

Lista de Exercícios 14 – Componentes

Fortemente Conectados

(28)

Leitura Complementar

• Halim e Halim. Competitive Programming, 3rd

Edition, 2003.

• Capítulo 4: Graph

• Cormen, Leiserson, Rivest e Stein. Algoritmos –

Teoria e Prática, 2ª. Edição, Editora Campus,

2002.

Referências

Documentos relacionados

Tim Burton, responsável por dois filmes sobre Batman, Batman (1989) e Batman Returns (1992). As diferentes adaptações são também produto do seu tempo e respondem a

Cada parte desse retângulo será repre- sentada pela fração um meio ou um sobre dois, ou seja, vamos dividir a barra pela metade.. No problema anterior, ao retirar da barra de

 Para os agentes físicos: ruído, calor, radiações ionizantes, condições hiperbáricas, não ionizantes, vibração, frio, e umidade, sendo os mesmos avaliados

A Pró-Reitoria de Assuntos Estudantis, por intermédio da Divisão Multidisciplinar de Assistência ao Estudante (DIMAE/PROAES) torna público o lançamento do presente edital

Tal será possível através do fornecimento de evidências de que a relação entre educação inclusiva e inclusão social é pertinente para a qualidade dos recursos de

Para atingir seus objetivos o FUNDO deverá manter, no mínimo 80% (oitenta por cento) da carteira em ativos relacionados diretamente, ou sintetizado via derivativos, à exposição

Por isso, apesar de o potencial de irritação da pele ser ligeiro, o contacto com a pele deve ser evitado. Uma vez ocorrida a sensibilidade, a exposição da pele a quantidades

O cacho foi transportado ao laboratório de Fitomelhoramento da Embrapa Amazônia Oriental para a mensuração dos caracteres: peso total do cacho (PTC) e peso de frutos por cacho