Projeto e Análise de Algoritmos

Documentos relacionados
Busca em Profundidade. Componentes Conexos. Grafos. Maria Adriana Vidigal de Lima. Fevereiro

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 33

Busca em Profundidade e em Largura

Busca em Profundidade. Busca em Grafos. Busca em Grafos. Busca em Grafos. Busca em Grafos. Os objetivos da busca são: Aplicações???

Busca em Largura. Adaptado de Humberto C. B. Oliveira

Universidade Federal de Alfenas

GRAFOS Aula 05 Algoritmos de percurso: busca em largura e profundidade Max Pereira

Análise e Síntese de Algoritmos. Algoritmos em Grafos CLRS, Cap. 22

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Projeto e Análise de Algoritmos

IPRJ PROJETO E ANÁLISE DE ALGORITMOS LISTA DE EXERCÍCIOS 10

MAC328 Algoritmos em grafos (14/5/2004) Componentes fortemente conexos

Pesquisa em Grafos. Pedro Ribeiro 2016/2017 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2016/ / 52

Pesquisa em Grafos. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Pesquisa em Grafos 2014/ / 48

Teoria dos Grafos Aula 6

AED Algoritmos e Estruturas de Dados LEE /2004

Árvores: Conceitos Básicos e Árvore Geradora

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica (continuação) Prof. Humberto Brandão

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Busca em largura. Algoritmos em Grafos. Marco A L Barbosa

Algoritmos e Estruturas de Dados II

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011)

Grafos: Busca. Algoritmos e Estruturas de Dados 2. Graça Nunes

Projeto e Análise de Algoritmos

PCC104 - Projeto e Análise de Algoritmos

Grafos. Notas. Notas. Notas. Notas. Algoritmos elementares. Representação de grafos Lista de adjacências Matriz de adjacências Atributos

Projeto e Análise de Algoritmos

Introdução a Grafos Letícia Rodrigues Bueno

Conceitos Básicos da Teoria de Grafos

Grafos Caminhos mais Curtos

Grafos: algoritmos de busca

Redes Neurais (Inteligência Artificial)

Grafos e Algoritmos de Busca

APLICAÇÕES DE BUSCA EM GRAFOS

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Projeto e Análise de Algoritmos

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

05 Grafos: ordenação topológica SCC0503 Algoritmos e Estruturas de Dados II

Grafos representação e aplicações. Prof. Guilherme Tomaschewski Netto

Algoritmos e Estruturas de Dados

5COP096 TeoriadaComputação

Teoria dos Grafos Aula 5

Programa Analítico de Disciplina SIN213 Projeto de Algoritmos

SCC-210 Algoritmos Avançados. Capítulo 9 Grafos. Adaptado por João Luís G. Rosa

Algoritmos em Grafos: Conectividade

Projeto e Análise de Algoritmos

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

Algoritmos e Estruturas de Dados. Grafos Semestre de Inverno 13/14

Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno

03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina

Informações Importantes! INF TURMA A

Algoritmo Aproximado. Prof. Anderson Almeida Ferreira [DPV]9.2 [ZIV]9.2.2 e 9.2.3

PAA-DCC-UFAM. Grafos. Universidade Federal do Amazonas Departamento de Eletrônica e Computação

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Projeto e Análise de Algoritmos

não descobertos descobertos explorados descoberta cruzamento

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA DEPARTAMENTO DE INFORMÁTICA APLICADA

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

Grafos parte 2* Algoritmos e Estruturas de Dados II SCC-203 Rosane 2010/2011. *Baseado em material de professores dos anos anteriores

Análise e Síntese de Algoritmos

SCC-201 Introdução à Ciência de Computação II

grafo nós vértices arcos arestas

Caminhos mínimos de todos os pares

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

INF 1010 Estruturas de Dados Avançadas

Emparelhamentos Máximos em Grafos Bipartidos

Análise de Algoritmos e Estruturas de Dados

Teoria dos Grafos. Árvores

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

06 Grafos: Caminhos Mínimos SCC0503 Algoritmos e Estruturas de Dados II

Algoritmo Aproximação. Prof. Anderson Almeida Ferreira [DPV]9.2 [ZIV]9.2.2 e 9.2.3

Definição 1.1 : Uma árvore é um grafo simples conexo e sem ciclos.

Algoritmos para Automação e Sistemas

Ciclos hamiltonianos e o problema do caixeiro viajante

Árvore Geradora Mínima

Árvores Binárias. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 17/03/2015

BCC402 Algoritmos e Programação Avançada. Prof. Marco Antonio M. Carvalho Prof. Túlio Toffolo 2012/1

Universidade Federal de Alfenas

Desafios de Programação TCC Turma A-1

BCC204 - Teoria dos Grafos

Algoritmos em Grafos

CIC 111 Análise e Projeto de Algoritmos II

Projeto e Análise de Algoritmos NP Completude Parte 2. Prof. Humberto Brandão

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO PRÓ-REITORIA DE ENSINO DE GRADUAÇÃO

Estruturas de Dados Grafos

Algoritmos em Grafos: Caminho Mínimo

Grafos parte 2. Percorrendo um grafo. Correção. Eficiência. Percorrendo um Grafo. Percorrendo um Grafo. Percorrendo um Grafo

PCS LABORATÓRIO DE PROGRAMAÇÃO ORIENTADA A OBJETOS PARA A ENGENHARIA ELÉTRICA

5COP096 TeoriadaComputação

01 Grafos: parte 1 SCC0503 Algoritmos e Estruturas de Dados II

Transcrição:

Projeto e Análise de Algoritmos Aula 13 Componentes Fortemente Conectados Edirlei Soares de Lima <edirlei@iprj.uerj.br>

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

Componentes Fortemente Conectados Algoritmos: Algoritmo de Kosaraju; Algoritmo de Tarjan;

Algoritmo de Kosaraju 1. Chama BuscaEmProfundidade(G) para obter os tempos de término t[u] para cada vértice u. 2. Obtem G T (G transposto). 3. Chama BuscaEmProfundidade(G T ), 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 G T 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.

Algoritmo de Kosaraju 1. Chama BuscaEmProfundidade(G) para obter os tempos de término t[u] para cada vértice u. c d f 0 1 2 3 4 5 6 7

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

Algoritmo de Kosaraju 2. Obtem G T (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

Algoritmo de Kosaraju 2. Obtem G T (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

Algoritmo de Kosaraju 3. Chama BuscaEmProfundidade(G T ), 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

Algoritmo de Kosaraju 3. Chama BuscaEmProfundidade(G T ), 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

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

Algoritmo de Kosaraju 3. Chama BuscaEmProfundidade(G T ), 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

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

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 aresta de cruzamento caso contrário.

Algoritmo de Kosaraju 4. Enquanto houver vértices restantes, inicie uma nova busca em profundidade em G T 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

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

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 G T (G transposto). 3. Chama BuscaEmProfundidade(G T ), 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 G T a partir do vértice de maior t[u] dentre os vértices restantes. O(V + A) 5. Retorne os vértices de cada árvore da floresta obtida como um componente fortemente conectado separado.

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;

Algoritmo de Tarjan 1. Chamar BuscaEmProfundidade(G).

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]; c d low S a b c d e f g h i

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 low 2 5 5 S a b e f g h i

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 b b b b b d 0 1 2 3 4 5 6 low 2 2 2 5 5 S a b e f g

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 b b b b b b b b b d 0 1 8 7 2 3 4 5 6 low 0 0 0 0 2 2 2 5 5 S a b d c

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 low 0 0 0 0 2 2 2 5 5

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; O(V + A)

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;

Exercícios Lista de Exercícios 14 Componentes Fortemente Conectados http://www.inf.puc-rio.br/~elima/paa/

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. Capítulo 22: Algoritmos Elementares de Grafos