SlideShare uma empresa Scribd logo
1 de 10
Algoritmo de Kosaraju
Marcos Castro
Componentes fortemente conexos
• Seja um grafo G(V, E) onde V é o conjunto de vértices e E é o conjunto de arestas,
um subconjunto de vértices C (C ⊆ V) é um componente fortemente conexo se
respeita as propriedades:
• 1) Para todo par de vértices (u, v) em C, existe um caminho de u à v e vice-versa.
• 2) C é maximal em respeito à propriedade 1.
• Quais são os componentes fortemente conexos do grafo abaixo?
0
2
1 3
4
Componentes fortemente conexos
• Seja um grafo G(V, E) onde V é o conjunto de vértices e E é o conjunto de arestas,
um subconjunto de vértices C (C ⊆ V) é um componente fortemente conexo se
respeita as propriedades:
• 1) Para todo par de vértices (u, v) em C, existe um caminho de u à v e vice-versa.
• 2) C é maximal em respeito à propriedade 1.
• Quais são os componentes fortemente conexos do grafo abaixo?
0
2
1 3
4
Componentes fortemente conexos
• Aplicação: em redes sociais, pode-se detectar grupos de pessoas fortemente
conectadas para sugerir algo como páginas, games, amizades.
• Como detectar todos os componentes fortemente conexos?
• Iremos utilizar o algoritmo de Kosaraju.
• A complexidade desse algoritmo é O(V + E) utilizando lista de adjacência.
• Primeiramente será explicado o algoritmo.
• Após a explicação, será disponibilizado um link com a implementação em C++.
Algoritmo
• Crie uma pilha vazia e faça uma DFS no grafo.
• Ao final de cada DFS, insira o vértice na pilha como mostra o algoritmo:
Inicialmente o vetor de visitados
é preenchido com falso.
Algoritmo
• Obtenha o grafo transposto
• Basta inverter as orientações das arestas do grafo original.
• Os vértices são os mesmos do grafo original, só inverte as arestas!
Algoritmo
• Marque novamente todos os vértices como não visitados para a segunda DFS.
• Enquanto a pilha não for vazia:
• Obtenha o elemento do topo.
• Remova o elemento do topo.
• Se esse elemento não foi visitado, realize uma DFS nele.
Algoritmo
• Algoritmo da função DFS:
Código
• A implementação foi feita em C++, segue o link:
• https://gist.github.com/marcoscastro/362854424c34bcec92cb
Contato
mcastrosouza@live.com
www.geeksbr.com
www.github.com/marcoscastro
www.youtube.com/c/marcoscastrosouza

Mais conteúdo relacionado

Mais procurados

9 º ano função de 1º grau e teorema de tales exercícios
9 º ano função de 1º grau e teorema de tales exercícios9 º ano função de 1º grau e teorema de tales exercícios
9 º ano função de 1º grau e teorema de tales exercíciosAndréia Rodrigues
 
Fisica 001 plano inclinado atrito
Fisica   001 plano inclinado atritoFisica   001 plano inclinado atrito
Fisica 001 plano inclinado atritocon_seguir
 
Apostila de matrizes determinantes e sistemas 2008
Apostila de matrizes determinantes e sistemas 2008Apostila de matrizes determinantes e sistemas 2008
Apostila de matrizes determinantes e sistemas 2008Jussileno Souza
 
Exercícios de permutações simples com resposta
Exercícios de permutações simples com respostaExercícios de permutações simples com resposta
Exercícios de permutações simples com respostaUyara Teixeira
 
Lista frações 6º ano
Lista frações 6º anoLista frações 6º ano
Lista frações 6º anoMarcos Ribeiro
 
Aula de mosaico sem atividade
Aula de mosaico sem atividadeAula de mosaico sem atividade
Aula de mosaico sem atividadeMarcelo Malafaia
 
Discussão de um sistema linear
Discussão de um sistema linearDiscussão de um sistema linear
Discussão de um sistema linearDamysson Henrique
 
Multiplicação e divisão de inteiros
Multiplicação e divisão de inteirosMultiplicação e divisão de inteiros
Multiplicação e divisão de inteirosProfessora Andréia
 
Lei de Coulomb força eletrica exemplo e exercícios
Lei de Coulomb força eletrica exemplo e exercíciosLei de Coulomb força eletrica exemplo e exercícios
Lei de Coulomb força eletrica exemplo e exercíciosVinicius Tavares
 
Exercícios de calculo 1 limites
Exercícios de calculo 1   limitesExercícios de calculo 1   limites
Exercícios de calculo 1 limitesAdersom Carvalho
 
Na minha escola é todo mundo igual
Na minha escola é todo mundo igualNa minha escola é todo mundo igual
Na minha escola é todo mundo igualBlog da Criançada
 
Fisica cn2 parte6 maquinas simples
Fisica cn2 parte6 maquinas simplesFisica cn2 parte6 maquinas simples
Fisica cn2 parte6 maquinas simples2marrow
 
Lista de Exercícios 1 – Semelhança
Lista de Exercícios 1 – SemelhançaLista de Exercícios 1 – Semelhança
Lista de Exercícios 1 – SemelhançaEverton Moraes
 
Gabarito Prova Física 1 ano Ensino Médio Colégio Pedro II - Centro
Gabarito Prova Física 1 ano Ensino Médio Colégio Pedro II - CentroGabarito Prova Física 1 ano Ensino Médio Colégio Pedro II - Centro
Gabarito Prova Física 1 ano Ensino Médio Colégio Pedro II - CentroSérgio F. de Lima
 
Assintotas - Exercícios resolvidos
Assintotas - Exercícios resolvidosAssintotas - Exercícios resolvidos
Assintotas - Exercícios resolvidosnumerosnamente
 
Trabalho de uma força
Trabalho de uma forçaTrabalho de uma força
Trabalho de uma forçalittlevic4
 
Potencial elétrico
Potencial elétricoPotencial elétrico
Potencial elétricoBetine Rost
 
Calorimetria calor sensível, calor latente, calor específico e capacidade té...
Calorimetria  calor sensível, calor latente, calor específico e capacidade té...Calorimetria  calor sensível, calor latente, calor específico e capacidade té...
Calorimetria calor sensível, calor latente, calor específico e capacidade té...Fernanda Katiusca Santos
 

Mais procurados (20)

9 º ano função de 1º grau e teorema de tales exercícios
9 º ano função de 1º grau e teorema de tales exercícios9 º ano função de 1º grau e teorema de tales exercícios
9 º ano função de 1º grau e teorema de tales exercícios
 
Fisica 001 plano inclinado atrito
Fisica   001 plano inclinado atritoFisica   001 plano inclinado atrito
Fisica 001 plano inclinado atrito
 
Apostila de matrizes determinantes e sistemas 2008
Apostila de matrizes determinantes e sistemas 2008Apostila de matrizes determinantes e sistemas 2008
Apostila de matrizes determinantes e sistemas 2008
 
Exercícios de permutações simples com resposta
Exercícios de permutações simples com respostaExercícios de permutações simples com resposta
Exercícios de permutações simples com resposta
 
Lista frações 6º ano
Lista frações 6º anoLista frações 6º ano
Lista frações 6º ano
 
Aula de mosaico sem atividade
Aula de mosaico sem atividadeAula de mosaico sem atividade
Aula de mosaico sem atividade
 
Discussão de um sistema linear
Discussão de um sistema linearDiscussão de um sistema linear
Discussão de um sistema linear
 
Montar painel consciencia negra
Montar painel consciencia negraMontar painel consciencia negra
Montar painel consciencia negra
 
Multiplicação e divisão de inteiros
Multiplicação e divisão de inteirosMultiplicação e divisão de inteiros
Multiplicação e divisão de inteiros
 
Lei de Coulomb força eletrica exemplo e exercícios
Lei de Coulomb força eletrica exemplo e exercíciosLei de Coulomb força eletrica exemplo e exercícios
Lei de Coulomb força eletrica exemplo e exercícios
 
Exercícios de calculo 1 limites
Exercícios de calculo 1   limitesExercícios de calculo 1   limites
Exercícios de calculo 1 limites
 
Na minha escola é todo mundo igual
Na minha escola é todo mundo igualNa minha escola é todo mundo igual
Na minha escola é todo mundo igual
 
Fisica cn2 parte6 maquinas simples
Fisica cn2 parte6 maquinas simplesFisica cn2 parte6 maquinas simples
Fisica cn2 parte6 maquinas simples
 
Lista de Exercícios 1 – Semelhança
Lista de Exercícios 1 – SemelhançaLista de Exercícios 1 – Semelhança
Lista de Exercícios 1 – Semelhança
 
Gabarito Prova Física 1 ano Ensino Médio Colégio Pedro II - Centro
Gabarito Prova Física 1 ano Ensino Médio Colégio Pedro II - CentroGabarito Prova Física 1 ano Ensino Médio Colégio Pedro II - Centro
Gabarito Prova Física 1 ano Ensino Médio Colégio Pedro II - Centro
 
Assintotas - Exercícios resolvidos
Assintotas - Exercícios resolvidosAssintotas - Exercícios resolvidos
Assintotas - Exercícios resolvidos
 
Exercícios resolvidos
Exercícios resolvidosExercícios resolvidos
Exercícios resolvidos
 
Trabalho de uma força
Trabalho de uma forçaTrabalho de uma força
Trabalho de uma força
 
Potencial elétrico
Potencial elétricoPotencial elétrico
Potencial elétrico
 
Calorimetria calor sensível, calor latente, calor específico e capacidade té...
Calorimetria  calor sensível, calor latente, calor específico e capacidade té...Calorimetria  calor sensível, calor latente, calor específico e capacidade té...
Calorimetria calor sensível, calor latente, calor específico e capacidade té...
 

Destaque

Backtracking - Gerar todos os subconjuntos
Backtracking - Gerar todos os subconjuntosBacktracking - Gerar todos os subconjuntos
Backtracking - Gerar todos os subconjuntosMarcos Castro
 
Clausura transitiva de un grafo dirigido
Clausura transitiva de un grafo dirigidoClausura transitiva de un grafo dirigido
Clausura transitiva de un grafo dirigidoguest4b1d8bc
 
Busca em largura - BFS
Busca em largura - BFSBusca em largura - BFS
Busca em largura - BFSMarcos Castro
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro ViajanteMarcos Castro
 
Programação dinâmica
Programação dinâmicaProgramação dinâmica
Programação dinâmicaMarcos Castro
 
Listas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosListas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosMarcos Castro
 
Análise Assintótica
Análise AssintóticaAnálise Assintótica
Análise AssintóticaMarcos Castro
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STLMarcos Castro
 
Metaheurística Simulated Annealing
Metaheurística Simulated AnnealingMetaheurística Simulated Annealing
Metaheurística Simulated AnnealingMarcos Castro
 
Expressões Regulares com Python 3
Expressões Regulares com Python 3Expressões Regulares com Python 3
Expressões Regulares com Python 3Marcos Castro
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - DicionáriosMarcos Castro
 
Agrupamento (clustering) - K-Means
Agrupamento (clustering) - K-MeansAgrupamento (clustering) - K-Means
Agrupamento (clustering) - K-MeansMarcos Castro
 
Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)Marcos Castro
 
Algoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPAlgoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPMarcos Castro
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de ProgramaçãoMarcos Castro
 

Destaque (20)

Backtracking - Gerar todos os subconjuntos
Backtracking - Gerar todos os subconjuntosBacktracking - Gerar todos os subconjuntos
Backtracking - Gerar todos os subconjuntos
 
Clausura transitiva de un grafo dirigido
Clausura transitiva de un grafo dirigidoClausura transitiva de un grafo dirigido
Clausura transitiva de un grafo dirigido
 
Busca em largura - BFS
Busca em largura - BFSBusca em largura - BFS
Busca em largura - BFS
 
Problema do Caixeiro Viajante
Problema do Caixeiro ViajanteProblema do Caixeiro Viajante
Problema do Caixeiro Viajante
 
Programação dinâmica
Programação dinâmicaProgramação dinâmica
Programação dinâmica
 
Listas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionáriosListas, tuplas, conjuntos e dicionários
Listas, tuplas, conjuntos e dicionários
 
Algoritmos gulosos
Algoritmos gulososAlgoritmos gulosos
Algoritmos gulosos
 
Análise Assintótica
Análise AssintóticaAnálise Assintótica
Análise Assintótica
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Metaheurística Simulated Annealing
Metaheurística Simulated AnnealingMetaheurística Simulated Annealing
Metaheurística Simulated Annealing
 
Tabela Hash
Tabela HashTabela Hash
Tabela Hash
 
Expressões Regulares com Python 3
Expressões Regulares com Python 3Expressões Regulares com Python 3
Expressões Regulares com Python 3
 
Python - Dicionários
Python - DicionáriosPython - Dicionários
Python - Dicionários
 
Agrupamento (clustering) - K-Means
Agrupamento (clustering) - K-MeansAgrupamento (clustering) - K-Means
Agrupamento (clustering) - K-Means
 
Python - Set
Python - SetPython - Set
Python - Set
 
Fila de prioridades
Fila de prioridadesFila de prioridades
Fila de prioridades
 
Binary heap
Binary heapBinary heap
Binary heap
 
Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)Problema das N rainhas (Backtracking)
Problema das N rainhas (Backtracking)
 
Algoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMPAlgoritmo de Knuth-Morris-Pratt - KMP
Algoritmo de Knuth-Morris-Pratt - KMP
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 

Semelhante a Algoritmo de Kosaraju detecta CFC em O(V+E

Seminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra LaraSeminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra LaraIFPB
 
Introdução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitosIntrodução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitosssusera0fc94
 
Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...
Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...
Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...Murilo Adriano Vasconcelos
 

Semelhante a Algoritmo de Kosaraju detecta CFC em O(V+E (8)

Grafos
GrafosGrafos
Grafos
 
Seminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra LaraSeminário sobre Grafos por Samyra Lara
Seminário sobre Grafos por Samyra Lara
 
Introdução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitosIntrodução aos grafos: Principais conceitos
Introdução aos grafos: Principais conceitos
 
Grafos_1.pptx
Grafos_1.pptxGrafos_1.pptx
Grafos_1.pptx
 
Aula Grafos
Aula GrafosAula Grafos
Aula Grafos
 
Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...
Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...
Treinamento Para competições de Programação do INF-UFG - Grafos Parte 1 - Tur...
 
Fluxo a Custo Mínimo
Fluxo a Custo MínimoFluxo a Custo Mínimo
Fluxo a Custo Mínimo
 
Questesdetecnologia ano2003
Questesdetecnologia ano2003Questesdetecnologia ano2003
Questesdetecnologia ano2003
 

Mais de Marcos Castro

Árvores de Decisão
Árvores de DecisãoÁrvores de Decisão
Árvores de DecisãoMarcos Castro
 
Colored de Bruijn Graphs
Colored de Bruijn GraphsColored de Bruijn Graphs
Colored de Bruijn GraphsMarcos Castro
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de ProgramaçãoMarcos Castro
 
Ferramentas para Bioinformática
Ferramentas para BioinformáticaFerramentas para Bioinformática
Ferramentas para BioinformáticaMarcos Castro
 
A importância da Bioinformática
A importância da BioinformáticaA importância da Bioinformática
A importância da BioinformáticaMarcos Castro
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais ArtificiaisMarcos Castro
 
Agrupamento de sequências biológicas
Agrupamento de sequências biológicasAgrupamento de sequências biológicas
Agrupamento de sequências biológicasMarcos Castro
 
Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)Marcos Castro
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Marcos Castro
 
Bioinformática com Biopython
Bioinformática com BiopythonBioinformática com Biopython
Bioinformática com BiopythonMarcos Castro
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STLMarcos Castro
 

Mais de Marcos Castro (14)

Árvores de Decisão
Árvores de DecisãoÁrvores de Decisão
Árvores de Decisão
 
Colored de Bruijn Graphs
Colored de Bruijn GraphsColored de Bruijn Graphs
Colored de Bruijn Graphs
 
Maratona de Programação
Maratona de ProgramaçãoMaratona de Programação
Maratona de Programação
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Arquivos FASTQ
Arquivos FASTQArquivos FASTQ
Arquivos FASTQ
 
Ferramentas para Bioinformática
Ferramentas para BioinformáticaFerramentas para Bioinformática
Ferramentas para Bioinformática
 
A importância da Bioinformática
A importância da BioinformáticaA importância da Bioinformática
A importância da Bioinformática
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 
Redes Neurais Artificiais
Redes Neurais ArtificiaisRedes Neurais Artificiais
Redes Neurais Artificiais
 
Agrupamento de sequências biológicas
Agrupamento de sequências biológicasAgrupamento de sequências biológicas
Agrupamento de sequências biológicas
 
Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)Longest palindromic subsequence (LPS)
Longest palindromic subsequence (LPS)
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
 
Bioinformática com Biopython
Bioinformática com BiopythonBioinformática com Biopython
Bioinformática com Biopython
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 

Algoritmo de Kosaraju detecta CFC em O(V+E

  • 2. Componentes fortemente conexos • Seja um grafo G(V, E) onde V é o conjunto de vértices e E é o conjunto de arestas, um subconjunto de vértices C (C ⊆ V) é um componente fortemente conexo se respeita as propriedades: • 1) Para todo par de vértices (u, v) em C, existe um caminho de u à v e vice-versa. • 2) C é maximal em respeito à propriedade 1. • Quais são os componentes fortemente conexos do grafo abaixo? 0 2 1 3 4
  • 3. Componentes fortemente conexos • Seja um grafo G(V, E) onde V é o conjunto de vértices e E é o conjunto de arestas, um subconjunto de vértices C (C ⊆ V) é um componente fortemente conexo se respeita as propriedades: • 1) Para todo par de vértices (u, v) em C, existe um caminho de u à v e vice-versa. • 2) C é maximal em respeito à propriedade 1. • Quais são os componentes fortemente conexos do grafo abaixo? 0 2 1 3 4
  • 4. Componentes fortemente conexos • Aplicação: em redes sociais, pode-se detectar grupos de pessoas fortemente conectadas para sugerir algo como páginas, games, amizades. • Como detectar todos os componentes fortemente conexos? • Iremos utilizar o algoritmo de Kosaraju. • A complexidade desse algoritmo é O(V + E) utilizando lista de adjacência. • Primeiramente será explicado o algoritmo. • Após a explicação, será disponibilizado um link com a implementação em C++.
  • 5. Algoritmo • Crie uma pilha vazia e faça uma DFS no grafo. • Ao final de cada DFS, insira o vértice na pilha como mostra o algoritmo: Inicialmente o vetor de visitados é preenchido com falso.
  • 6. Algoritmo • Obtenha o grafo transposto • Basta inverter as orientações das arestas do grafo original. • Os vértices são os mesmos do grafo original, só inverte as arestas!
  • 7. Algoritmo • Marque novamente todos os vértices como não visitados para a segunda DFS. • Enquanto a pilha não for vazia: • Obtenha o elemento do topo. • Remova o elemento do topo. • Se esse elemento não foi visitado, realize uma DFS nele.
  • 9. Código • A implementação foi feita em C++, segue o link: • https://gist.github.com/marcoscastro/362854424c34bcec92cb