Baseado em: The Algorithm Design Manual Steven S. Skiena - ppt carregar
PublicouBárbara Goes Alterado mais de 4 anos atrás
Apresentação em tema: "Baseado em: The Algorithm Design Manual Steven S. Skiena"— Transcrição da apresentação:
1 Baseado em: The Algorithm Design Manual Steven S. Skiena
Algoritmos em Grafos Baseado em: The Algorithm Design Manual Steven S. Skiena
2 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.
3 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.
4 Conteúdo Estruturas de dados básicas e operações de atravessamento.
Algoritmos mais sofisticados para: caminhos mais curtos e árvore geradora.
5 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.
6 O grafo de relacionamento
7 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-orientados Laços, multi-arestas, grafos simples. Grafos com pesos Caminho em um grafo Caminho mínimo
8 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 regulares Clique Circuitos
9 Estruturas de Dados Matriz de adjacências Lista de adjacências 1 2 3 4
5 1 2 5 3 4 1 5 4 2 3
10 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.
11 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 di=Q(n). Na prática os grafos geralmente são esparsos.
12 Lista de adjacências Para muitas aplicações é a melhor alternativa.
A utilização de lista ligada facilita a "ampliação" da estrutura.
13 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 Listas de Adjacências Matriz de Adjacência Matriz de Adjacência Listas de Adjacências Listas de Adjacências
14 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.
15 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.
16 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
17 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.
18 Atravessando Grafos Estruturas dados para armazenar os vértices descobertos mas ainda não completamente explorados: Fila Þ busca em largura Pilha Þ busca em profundidade
19 Busca em Largura 3 4 5 2 1 6 3 A árvore define um caminho mais curto da raiz até cada um dos vértices.
20 Busca em Profundidade 1 2 5 6 3 4 3 4 5 2 1 6 Geralmente é mais útil do que a busca em largura.
21 Busca em Profundidade Em um grafo não-orientado temos:
arestas da árvore arestas para um ancestral (aresta de retorno)
22 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.
23 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
24 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)
25 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)
26 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.
27 Ordenação Topológica Consideremos grafos dirigidos acíclicos.
28 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.
29 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.
30 Vértices de Articulação (1)
31 Vértice de Articulação (2)
32 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?
33 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.
34 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?
35 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.
36 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?
37 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.
38 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?
39 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.
40 Á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.
41 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.
42 Algoritmo de Prim Escolha um vértice arbitrário s
enquanto existe algum vértice fora da árvore faça tome a aresta de menor peso entre a árvore e um vértice não pertencen-	te à árvore adicione a aresta selecionada e o vértice à árvore T
44 Tempo O(nm) Pode ser reduzido a O(n²).
45 Algoritmo de Kruskal Mantenha as arestas em uma fila de prioridade ordenada pelo peso Conta <- 0 enquanto (Conta < n-1) faça tome o próxima aresta (v,w) se componente(v) != componente(w) insira (v,w) em T junte as componentes
46 Exemplo 1 1 1 1 2 3 1 1 3 3 2 3 3 1 3 2
47 Tempo O(nm) Pode ser melhorado para O(m log m).
48 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.
49 Caminho mais curto (2) S t
50 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.