Mestrado em
Ciência da Computação
Algoritmos e Estrutura de Dados
Caminhos e Conexidade em
grafos:
Conceitos e algoritmos
Prof. Rodrigo L. S. Silva, D.Sc. Prof. Stênio Sã R. F. Soares, D.Sc.
Em muitas aplicações é essencial que se
estabeleça o se verifique a conexidade de vértices,
bem como a ocorrência de propriedades
relacionadas à conexidade.
Existe um caminho para ir de um objeto a outro
seguindo as conexões?
Qual é a menor distância entre um objeto e outro
objeto?
É possível sair de um dado nó e visitar todos os demais
Motivação
Alguns exemplos de problemas :
envio de mensagens por uma rede;
melhorar a robustez de um serviço de comunicação;
descobrir qual é o roteiro mais curto para visitar um
conjunto de clientes;
melhorar a segurança e eficiência em comunicação
de dados;
. . .
Aplicações
Seja um grafo G=(V,E),
um passeio em G é uma sequência finita e não
vazia W=v
0e
1v
1e
2...e
kv
k, cujos termos são vértices
e arestas dispostos alternadamente e que, para
i=1 ... k, a aresta e
iconecta o vértice v
i-1ao vértice
v
i.
Como trataremos apenas de grafos simples,
podemos representar um passeio apenas pelos
vértices: W=v
0v
1...v
k, onde os vértices v
0e v
ksão a
4
Caminhos e conexidade
6
7
Seja P={P
1, P
2, ..., P
q} uma partição de V tal que
P
i≠ para i = 1, ..., q, sendo que se dois nós
∅
u e v
são conectados u e v pertencem a uma mesma
participação e vice-versa.
Nestas condições, dizemos que estas partições P
isão componentes conexas.
Grafo com três componentes conexas
Ciclos
Ciclos
11
Existe um grafo G que:
● É Euleriano mas não é Hamiltoniano? ● É Euleriano e Hamiltoniano?
● É Hamiltoniano mas não é Euleriano?
13
Teoria de Grafos
Caminhamento em
Grafos
• Caminhar/percorrer um grafo:
visitar todos os nós e arestas
Enquanto for possível, aprofundar-se no grafo. Quando não for mais possível, recuar.
BUSCA EM PROFUNDIDADE BUSCA EM PROFUNDIDADE 8 9 1 5 4 2 6 3 7 10 1 4 6 7 8 3 2 10 5 9 1º 2º 3º 4º 5º 6º 7º 8º 9º 10º 13
Caminhamento em
Grafos
8 9 1 5 4 2 6 3 7 10 1 4 6 7 8 3 2 10 5 9 1º 2º 3º 4º 5º 6º 7º 8º 9º 10º 1 4 6 5 7 8 3 2 10 9 1415
Teoria de Grafos
Caminhamento em
Grafos
• A ordem em que os nós e arestas são visitados depende: • do nó inicial
• da ordem em que os nós e as arestas aparecem na estrutura de dados
Caminhamento em
Grafos
Algoritmo recursivo para busca a partir de um nó
Procedimento PROF(nó v) visitado(v) sim
Para cada nó w adjacente a v faça Se visitado(w) = não então
PROF(w) fim-para
Fim
17 Teoria de Grafos
Caminhamento em
Grafos
Exemplo: D A E B C F G H A B C D E F G H B C A B H F G A D E B H C H C H D E F G 1 A D E B C F G H 2 3 4 5 6 7 8 X X X X X X X X não visitado visitado 17Caminhamento em
Grafos
Exemplo: D A E B C F G H 1 A D E B C F G H 2 3 4 5 6 7 8 A B E F D H C G Árvore de busca em profundidade Árvore de busca em profundidade 1819 Teoria de Grafos
Caminhamento em
Grafos
Procedimento BUSCA-PROF Para i = 1,...,n faça visitado(i) não fim-para Para i = 1,...,n façaSe visitado(i) = não então PROF(i)
fim-para Fim
Algoritmo de busca em profundidade
Caminhamento em
Grafos
Exemplo: 1 8 2 3 1 7 5 6 4 11 9 14 12 10 13 8 1 3 2 4 3 5 4 6 5 7 6 2 7 9 8 9 14 10 11 11 1012 13 13 12 14 2021
Teoria de Grafos
Caminhamento em
Grafos
Aplicações de busca em profundidade, grafo G=(V,E): G é acíclico?
G é conexo?
Quais são as componentes conexas de G? Quais são os pontos de articulação de G?
Caminhamento em
Grafos
Procedimento COMPONENTES-CONEXAS Para i = 1,...,n faça visitado(i) 0 fim-para componente 0 Para i = 1,...,n faça Se visitado(i) = 0 então componente componente + 1 PROF(i, componente) fim-se fim-paraAlgoritmo para encontrar as componentes conexas
23
Teoria de Grafos
Caminhamento em
Grafos
Procedimento PROF(v, marca) visitado(v) marca
Para cada nó w adjacente a v faça Se visitado(w) = 0 então
PROF(w, marca) fim-se
fim-para Fim
Algoritmo para encontrar as componentes conexas
Caminhamento em
Grafos
Exemplo: Problema do mosaico
• Quantos e quais mosaicos intermediários existem entre dois mosaicos específicos?
• Novas configurações (mosaicos) são obtidas através do movimento de um elemento para a posição vazia.
4 5 3 8 2 7 1 6 ■ 1 2 3 4 5 7 6 8 ■ 4 5 3 8 2 7 1 6 ■ 24
25 Teoria de Grafos
Caminhamento em
Grafos
4 ■ 6 2 7 5 1 3 8 4 5 6 2 7 ■ 1 3 8 4 5 6 ■ 7 2 1 3 8 1 2 3 4 5 ■ 6 8 7 4 5 6 2 7 3 1 ■ 8 4 5 6 2 7 1 ■ 3 8 4 5 6 2 7 1 8 3 ■ 4 5 6 2 ■ 1 7 3 8?
252 8 3 6 ■ 4 1 7 5
Caminhamento em
Grafos
■ 8 3 2 6 4 1 7 5 2 8 3 ■ 6 4 1 7 5 2 8 3 1 6 4 ■ 7 5 2 8 3 1 ■ 4 7 6 5 2 8 3 1 6 4 7 ■ 5 2 8 3 ■ 1 4 7 6 5 2 ■ 3 1 8 4 7 6 5 2 8 3 1 4 ■ 7 6 5 2 8 3 1 6 4 7 5 ■ ■ 8 3 2 1 4 7 6 5 2 8 3 7 1 4 ■ 6 5 ■ 2 3 1 8 4 7 6 5 2 3 ■ 1 8 4 7 6 5 8 ■ 3 2 6 4 1 7 5 2 ■ 3 6 8 4 1 7 5 2 8 3 6 4 ■ 1 7 5 2 8 3 6 7 4 1 ■ 5 8 ■ 3 2 1 4 7 6 5 2 8 3 7 1 4 6 ■ 5 1 2 3 ■ 8 4 7 6 5 8 3 ■ 8 6 3 ■ 2 3 2 3 ■ 2 8 ■ 2 8 3 2 8 3 2 8 3 8 3 ■ 8 1 3 2 8 3 2 8 3 1 2 3 1 2 3 NÓ INICIAL NÓ INICIAL Busca em profundidade 1 2 3 4 5 6 7 10 11 13 14 16 17 8 9 12 15 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2627
Teoria de Grafos
Caminhamento em
Grafos
Enquanto for possível, examinar todos os nós à mesma distância do nó inicial. Quando não for mais possível, aprofundar.
BUSCA EM AMPLITUDE BUSCA EM AMPLITUDE 8 9 1 5 4 2 6 3 7 10 1 4 6 7 8 3 2 10 5 9 1 4 7 10 8 6 5 9 3 2 27
Caminhamento em
Grafos
Exemplo: D A E B C F G B C A F DÁrvore de busca em profundidade (pilha)
Árvore de busca em profundidade (pilha)
D E A
C B
Árvore de busca em amplitude (fila)
Árvore de busca em amplitude (fila)
29 Teoria de Grafos
Caminhamento em
Grafos
Procedimento BUSCA-AMPL(v) visitado(v) simColocar v em uma fila
Enquanto fila não vazia faça
w retirar o elemento da frente da fila
Para cada vértice i adjacente a w faça Se visitado(i) = não então
visitado(i) sim
Colocar i no final da fila fim-se
fim-para fim-enquanto Fim
Algoritmo de busca em amplitude
Caminhamento em
Grafos
Exemplo: D A E B C F G H A B C D E F G H B C A B H F G A D E B H C H C H D E F G 1 A D E B C F G H 2 4 8 5 6 3 7 não visitado visitado Fila A w = B A B C B C DE D C C D E F F E D G D E F G H E F G H 3031 Teoria de Grafos
Caminhamento em
Grafos
Exemplo: D A E B C F G H 1 A D E B C F G H 2 4 8 5 6 3 7 Árvore de busca em amplitude (fila) Árvore de busca em amplitude (fila) D A E B C F G H 312 8 3 6 ■ 4 1 7 5
Caminhamento em
Grafos
■ 8 3 2 6 4 1 7 5 2 8 3 ■ 6 4 1 7 5 2 8 3 1 6 4 ■ 7 5 2 8 3 1 ■ 4 7 6 5 2 8 3 1 6 4 7 ■ 5 2 8 3 ■ 1 4 7 6 5 2 ■ 3 1 8 4 7 6 5 2 8 3 1 4 ■ 7 6 5 2 8 3 1 6 4 7 5 ■ ■ 8 3 2 1 4 7 6 5 2 8 3 7 1 4 ■ 6 5 ■ 2 3 1 8 4 7 6 5 2 3 ■ 1 8 4 7 6 5 8 ■ 3 2 6 4 1 7 5 2 ■ 3 6 8 4 1 7 5 2 8 3 6 4 ■ 1 7 5 2 8 3 6 7 4 1 ■ 5 8 ■ 3 2 1 4 7 6 5 2 8 3 7 1 4 6 ■ 5 1 2 3 ■ 8 4 7 6 5 8 3 ■ 8 6 3 ■ 2 3 2 3 ■ 2 8 ■ 2 8 3 2 8 3 2 8 3 8 3 ■ 8 1 3 2 8 3 2 8 3 1 2 3 1 2 3 Busca em amplitude 1 2 8 3 1 4 ■ 7 6 5 2 3 4 1 8 ■ 7 6 5 2 8 ■ 1 4 3 7 6 5 2 8 3 1 4 5 7 6 ■ 2 ■ 8 1 4 3 7 6 5 2 8 3 1 4 5 7 ■ 6 2 8 3 1 ■ 6 7 5 4 2 8 ■ 1 6 3 7 5 4 2 8 3 ■ 1 6 7 5 4 2 ■ 3 1 8 6 7 5 4 2 8 3 1 5 6 7 ■ 4 2 ■ 8 1 6 3 7 5 4 NÓ INICIAL NÓ INICIAL 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 Exemplo do mosaico: 321. Seja o problema de verificar se um grafo possui ciclos. Apresente um algoritmo para este problema e mostre a sua complexidade considerando cada uma das estruturas de armazenamento vistas em sala.
2. Apresente um algoritmo para o problema de verificar se um dado nó de um grafo é um nó de articulação. Demonstre a complexidade do seu algoritmo.
3. Considere um grafo ponderado G=(V,E). Apresente um algoritmo para obter um subgrafo G´=(V,E´), que seja G´ seja conexo, sem ciclo e que a soma dos pesos das arestas de E´ seja mínima. Apresente a complexidade do seu algoritmo.
Exercícios
4. Dado um grafo G=(V,E), apresente um algoritmo para verificar se G é euleriano. Caso a resposta seja sim, seu algoritmo deve apresentar o circuito euleriano.
5. Considere o problema em que uma instituição de ensino deseja utilizar o menor número de dias para aplicar as provas de k disciplinas para um grupo de n alunos. Neste problema, como existem alunos que cursam disciplina em comum, as provas destas disciplinas não podem ocorrer em um mesmo dia. Modele este problema como