![Page 1: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/1.jpg)
Algoritmos em Grafos
Baseado em:The Algorithm Design Manual
Steven S. Skiena
![Page 2: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/2.jpg)
Introdução (1) Um grafo G=(V,E) consiste em cum
conjunto V de vértices e um conjunto E de pares de vértices ou arestas.
Os grafos são uma forma de modelar os problemas.
Muitos problemas algorítmicos são simplificados ao pensarmos neles em termos de grafos.
![Page 3: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/3.jpg)
Introdução (2)
A teoria dos Grafos fornece uma linguagem para tratarmos com as propriedades dos grafos.
Conhecer diferentes problemas algorítmicos em grafos é melhor do que entender os detalhes de algoritmos particulares em grafos.
![Page 4: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/4.jpg)
Conteúdo
Estruturas de dados básicas e operações de atravessamento.
Algoritmos mais sofisticados para: caminhos mais curtos e árvore geradora.
![Page 5: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/5.jpg)
Observações
Grafos podem ser utilizados para modelar uma variedade de estruturas e relações.
Muitas aplicações de grafos podem ser reduzidas a propriedades padrão de grafos e usando algoritmos bem conhecidos.
Busca em profundidade e busca em largura fornecem mecanismos para visitar cada aresta e cada vértice do grafo.
![Page 6: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/6.jpg)
O grafo de relacionamento
![Page 7: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/7.jpg)
O grafo de relacionamento
Se sou seu amigo, você é meu amigo?
Sou amigo de mim mesmo? Quão íntimo é um amigo? Estou relacionado através de uma
cadeia a alguém famoso? Quão próximo estou de alguém
famoso?
Grafos orientados e não-orientadosLaços, multi-arestas, grafos simples.
Grafos com pesos
Caminho em um grafo
Caminho mínimo
![Page 8: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/8.jpg)
O grafo de relacionamento
Existe um caminho de relacionamento entre quaisquer duas pessoas no mundo?
Quem tem mais amigos? E menos? Qual o maior clique? Quanto tempo uma fofoca minha
leva para retornar a mim?
Componentes conexas
Grau de um vértice, grafos regularesClique
Circuitos
![Page 9: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/9.jpg)
Estruturas de Dados Matriz de
adjacências Lista de adjacências
1
5 4
2
3
1 2 3 4 5
1 0 1 0 0 1
2 1 0 1 1 1
3 0 1 0 1 0
4 0 1 1 0 1
5 1 1 0 1 1
1 2 5
2 1 5 3 43 2 4
4 2 5 3
5 4 1 2
![Page 10: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/10.jpg)
Matriz de adjacências
Espaço: O(n²) Espaço pode ser reduzido
agrupando-se as informações em bits ou armaze-nando apenas a matriz triangular.
Tempo constante para testar a pertinência de uma aresta ao grafo.
![Page 11: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/11.jpg)
Listas de adjacências
Tempo O(di) para verificar a pertinência de uma aresta ao grafo, onde di é o grau do vértice i.
Pior caso quando din). Na prática os grafos geralmente
são esparsos.
![Page 12: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/12.jpg)
Lista de adjacências
Para muitas aplicações é a melhor alternativa.
A utilização de lista ligada facilita a “ampliação” da estrutura.
![Page 13: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/13.jpg)
Matriz de Adjacências X Listas de Adjacências
Testar se aresta está no grafo. Determinar o grau de um vértice. Menos memória em grafos pequenos. Menos memória em grafos grandes. Inserção ou remoção de aresta. Atravessar o grafo. Melhor na maioria dos problemas.
Matriz de Adjacência
Listas de Adjacências
Matriz de Adjacência
Listas de Adjacências
Matriz de Adjacência
Listas de Adjacências
Listas de Adjacências
![Page 14: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/14.jpg)
Atravessando Grafos Impressão ou validação de cada
vértice e/ou aresta. Cópia de um grafo ou conversão entre
representações diferentes. Contagem de números de vértices
e/ou arestas. Determinação de componentes
conexas. Determinação de caminho entre dois
vértices ou ciclos, caso existam.
![Page 15: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/15.jpg)
Atravessando Grafos
Eficiência um mesmo local não deve ser visitado repetidamente.
Corretude o percurso deve ser feito de modo que não se perca nada.
![Page 16: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/16.jpg)
Atravessando Grafos
Os vértices devem ser marcados quando visitados pela primeira vez.
Cada vértice deve ter um dos estados: Não-visitado Visitado Completamente explorado
![Page 17: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/17.jpg)
Atravessando Grafos
Mantém-se uma estrutura de dados com todos os vértices já visitados mas ainda não completamente explorados.
As arestas não-orientadas são consideradas duas vezes. As orientadas apenas uma.
![Page 18: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/18.jpg)
Atravessando Grafos
Estruturas dados para armazenar os vértices descobertos mas ainda não completamente explorados: Fila busca em largura Pilha busca em profundidade
![Page 19: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/19.jpg)
Busca em Largura
A árvore define um caminho mais curto da raiz até cada um dos vértices.
3
3 3 3
3 3
3
4
5
2
1
6
![Page 20: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/20.jpg)
Busca em Profundidade
3
4
5
2
1
6
1
2
5
6
3
4
Geralmente é mais útil do que a busca em largura.
![Page 21: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/21.jpg)
Busca em Profundidade
Em um grafo não-orientado temos: arestas da árvore arestas para um ancestral (aresta de
retorno)
![Page 22: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/22.jpg)
Busca em Profundidade
Em um grafo orientado temos: arestas da árvore arestas para a frente ligam um
vértice visitado a um completamente explorado.
arestas para trás ligam um vértice visitado a outro visitado.
arestas cruzadas as demais.
![Page 23: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/23.jpg)
Aplicações da Travessia
Componentes Conexas Detecção de Árvores e Ciclos 2-coloração de Grafos Ordenação Topológica Vértices de Articulação
![Page 24: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/24.jpg)
Componentes Conexas
Pode-se usar Busca em Largura ou Busca em Profundidade.
Em grafos orientados temos os conceitos de fracamente conexo e fortemente conexo.
Tempo: O(m+n)
![Page 25: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/25.jpg)
Detecção de Árvores e Ciclos Detecção de árvores é feita
usando busca em profundidade o grafo é uma árvore se, e somente se, não existirem arestas de retorno.
A detecção de ciclo é feita quando a primeira aresta de retorno é identificada.
Tempo: O(n)
![Page 26: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/26.jpg)
2-coloração de Grafos Pode-se usar busca em largura ou
em profundidade. Um vértice visitado recebe sempre
cor diferente da de seu pai. Para cada aresta não visitada
verifica-se se ela não une dois vértices de mesma cor. Neste caso, foi possível uma 2-coloração.
![Page 27: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/27.jpg)
Ordenação Topológica
Consideremos grafos dirigidos acíclicos.
![Page 28: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/28.jpg)
Ordenação Topológica
É uma ordenação nos vértices de forma que todas as arestas vão da esquerda para a direita.
Busca em profundidade é utilizada para determinar se o grafo orientado é acíclico e então determinar uma ordenação topológica.
![Page 29: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/29.jpg)
Ordenação Topológica
Um grafo orientado é acíclico se, e somente se, não são encontradas arestas de retorno durante uma busca em profundidade.
Cada vértice é rotulado em ordem inversa à ordem em que eles são marcados completamente explorados.
![Page 30: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/30.jpg)
Vértices de Articulação (1) É um vértice de um grafo conexo cuja
remoção torna o grafo desconexo. Qualquer grafo que contenha um
vértice de articulação é frágil. A conectividade de um grafo é a
quantidade de vértices necessários para desconectar o grafo.
Conectividade é uma importante medida de robustez no projeto de rede.
![Page 31: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/31.jpg)
Vértice de Articulação (2)
![Page 32: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/32.jpg)
Modelagem de Problemas (1)
Procura-se um algoritmo para o projeto de rotas naturais para personagens de jogos de vídeo game através de uma sala cheia de objetos. Como fazer?
![Page 33: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/33.jpg)
Como proceder?
Uma grade onde cada vértice é um lugar válido e uma aresta ligando vértices vizinhos, com pesos dependendo da distância entre os vértices.
Determinar o caminho mais curto.
![Page 34: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/34.jpg)
Modelagem de Problemas (2)
No seqüenciamento de DNA, os dados experimentais consistem de pequenos fragmentos. Para cada fragmento f, existem fragmentos que são forçados a estar à esquerda de f, outros à direita e outros que podem ir para qualquer um dos lados. Como podemos determinar uma ordenação consistente dos fragmentos da esquerda para a direita que satisfaça todas as restrições?
![Page 35: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/35.jpg)
Como proceder? Criar um grafo dirigido no qual a
cada vértice é atribuído um fragmento.
Uma aresta (l,f) liga um fragmento l que é obrigado a estar à esquerda.
Uma aresta (f,r) liga um fragmento r que é obrigado a estar à direita.
Determinar uma ordenação topológica neste grafo.
![Page 36: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/36.jpg)
Modelagem de Problemas (3)
Dado um conjunto qualquer de retângulos no plano, como distribuí-los em um número mínimo de cestos tal que o subconjunto de retângulos em um mesmo cesto não intersectam-se entre si?
![Page 37: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/37.jpg)
Como proceder? Cada vértice representa um retângulo. Uma aresta liga vértices cujos
retângulos se intersectam. Cada cesto corresponde a um conjunto
independente. A coloração de vértices particiona um
grafo em conjuntos independentes, logo nosso problema é determinar uma coloração mínima de vértices.
![Page 38: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/38.jpg)
Modelagem de Problemas (4)
Ao portar códigos de UNIX para DOS, tem-se que reduzir o tamanho dos nomes de várias centenas de arquivos para no máximo 8 caracteres cada. Como diminuir o nome dos arquivos e garantir que não haja conflito?
![Page 39: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/39.jpg)
Como proceder? Construir um grafo com vértices
correspondendo ao nome original ligados a vértices que possam corresponder a reduções do nome.
Determinar um conjunto de n arestas que não tenham vértices em comum.
Determinar um conjunto independente de arestas em um grafo bipartido.
![Page 40: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/40.jpg)
Árvore Geradora Mínima
Uma árvore é uma grafo sem ciclos.
Um árvore geradora é um subgrafo de G com os mesmo vértices que é uma árvore.
Um árvore geradora mínima de um grafo com pesos é a árvore geradora de peso mínimo.
![Page 41: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/41.jpg)
Observações Úteis em determinar a menor
quantidade de fios necessárias para interligar um grupo de casas ou cidades.
Pode existir mais de uma tal árvore. Para o caso em que todas as arestas
têm o mesmo peso, todas as árvores geradoras são mínimas.
Para o caso geral, o problema não é tão simples.
![Page 42: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/42.jpg)
Algoritmo de Prim
Escolha um vértice arbitrário senquanto existe algum vértice fora
da árvore façatome a aresta de menor peso entre a árvore e um vértice não pertencen- te à árvoreadicione a aresta selecionada e o
vértice à árvore T
![Page 43: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/43.jpg)
Exemplo
![Page 44: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/44.jpg)
Tempo
O(nm) Pode ser reduzido a O(n²).
![Page 45: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/45.jpg)
Algoritmo de Kruskal
Mantenha as arestas em uma fila de prioridade ordenada pelo peso
Conta <- 0enquanto (Conta < n-1) faça
tome o próxima aresta (v,w)se componente(v) != componente(w)
insira (v,w) em Tjunte as componentes
![Page 46: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/46.jpg)
Exemplo
1
1
31
2
1
33 1
2
1
1
3
3
3
2
![Page 47: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/47.jpg)
Tempo
O(nm) Pode ser melhorado para O(m log
m).
![Page 48: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/48.jpg)
Caminho mais curto
Quando o grafo é sem pesos, a determinação de um caminho mais curto pode ser feita através de uma busca em largura.
Quando o grafo tem pesos associados às arestas, o caminho mais curto pode não ser o que usa menos arestas.
![Page 49: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/49.jpg)
Caminho mais curto (2)
S
t
![Page 50: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/50.jpg)
Algoritmo de Dijkstra
O grafo de entrada tem pesos não-negativos associados às suas arestas.
Dado o caminho mais curto entre s e cada vértice v1,v2,...vk de um conjunto de vértices, deve existir algum outro vértice x tal que o caminho mais curto de s a vi a x, para algum 1 i k.
![Page 51: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/51.jpg)
Algoritmo de Dijkstra
![Page 52: Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena](https://reader030.vdocuments.mx/reader030/viewer/2022020115/552fc12b497959413d8d0b15/html5/thumbnails/52.jpg)
Todos os caminhos mais curtos