Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

33
Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012

Transcript of Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Page 1: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Algoritmos em Grafos

Buscas em GrafosProf. André Renato1º Semestre/2012

Page 2: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosUma das operações mais comuns

em estruturas de dados consiste em listar os elementos armazenados de acordo com a estruturação utilizada.

Em listas, é possível imprimir os elementos um após o outro, na mesma ordem em que se encontram na lista.

Page 3: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosEm árvores binárias, existe três

formas de se imprimir todos os elementos: em ordem, em pré-ordem e em pós-ordem.

4015

20

819

32 45

Page 4: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosOs algoritmos são simples e

utilizam eficientemente a estrutura recursiva da árvore.

Além disso, existe um nó que é diferente dos demais e através do qual é possível o percorrimento atingindo todos os demais nós: nó raiz.

Page 5: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosEm grafos, qual o nó raiz?Como é feita a estruturação

recursiva do grafo?A segunda pergunta é de difícil

resposta, pois nem sempre o grafo apresenta uma estruturação bem-definida (na verdade, quase nunca).

A primeira pergunta é mais simples: não existe uma raiz natural em um grafo.

Page 6: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosComo fazer então o

percorrimento?◦O primeiro passo consiste em

escolher um nó aleatoriamente para ser o ponto inicial do algoritmo.

◦Deve-se então adotar uma política para o processamento do nó inicial e, sucessivamente, dos seus adjacentes.

◦Existem duas políticas mais usuais, que dão origem às duas formas de buscas mais utilizadas.

Page 7: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosBusca em largura

◦A idéia consiste em, partindo de um nó inicial v, armazenar todos os nós u adjacentes a ele.

◦Escolher um nó u e armazenar todos os adjacentes;

◦Passar para o segundo nó u e repetir o processo até que todos os nós imediatamente adjacentes a v sejam tratados.

◦O procedimento se repete para os nós adjacentes aos nós u armazenados.

Page 8: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosAlém do próprio grafo, é

necessário armazenar os nós que estão sendo processados em outra estrutura de dados. Qual???

Page 9: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosAinda existe um problema:

normalmente é possível partir de um nó v e atingir um nó u de duas ou mais formas diferentes.

Como evitar que este tipo de processamento repetido seja evitado sem excluir previamente nenhuma possibilidade de acesso aos nós?

Page 10: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosUma idéia é colocar nos nós um tipo de

marcação que servirá para identificar se o nó já foi processado ou ainda não.

Um atributo booleano (ou inteiro) é suficiente para cada nó.

Inicialmente, todos os nós são marcados como “não-visitado”. O nó inicial é colocado na fila e marcado como visitado.

O algoritmo prossegue como descrito anteriormente.

Page 11: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em Grafos

1

3

5

2

4

6

9

7

10

8

Page 12: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosBusca em profundidade:

◦A idéia agora é partir de um nó inicial v e encontrar um primeiro nó adjacente u.

◦Ao invés de enfileirar o nó u e buscar outro adjacente a v, mudamos imediatamente para o primeiro nó u encontrado e repetimos as operações.

Page 13: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosBusca em profundidade:

◦Quando um nó u for totalmente explorado, voltamos o fluxo do algoritmo para o nó que alcançou u primeiramente.

◦Prosseguimos, então, com outro nó adjacente ainda não explorado até que todos os nós adjacente ao nó inicial tenham sido explorados.

◦Neste ponto, o fluxo do algoritmo volta para o inicial encerrando sua execução.

Page 14: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosA estrutura de fila utilizada na

busca em largura não faz mais sentido, pois os nós vão sendo processados à medida em que são encontrados.

No entanto, por precisar mudar constantemente o nó corrente e depois voltar por todos os nós processados até o nó inicial, outra estrutura é necessária.

Page 15: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosQual????Se vamos utilizar uma pilha, é

possível pensar no algoritmo através de uma abordagem recursiva?

Page 16: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em Grafos

1

3

5

2

4

6

9

7

10

8

Page 17: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosOs algoritmos de busca podem

revelar informações importantes sobre os vértices, as arestas e o próprio grafo como todo.

Para conseguir isto, precisamos alterar levemente os algoritmos, fazendo-os armazenar informações extras durante suas execuções.

Page 18: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosBusca em largura:

◦Distância entre os vértices: pode ser entendida como a quantidade mínima de arestas adjacentes entre dois vértices;

◦Para calcular a distância e quais arestas estão envolvidas, adicionaremos duas informações aos vértices: a distância corrente d e o vértice que o precede na busca pred.

◦Vale lembrar que a distância não leva em conta o peso das arestas.

Page 19: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosAs arestas indicadas pelo valor

de pred formam uma estrutura de dados conhecida. Qual?

Por que isso acontece?

Page 20: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosBusca em profundidade:

◦Quando um nó é visitado, não temos a menor idéia de quando o fluxo do algoritmo voltará para ele.

◦Isto depende da quantidade de nós que serão alcançados através dele.

Se imaginarmos que o algoritmo é executado de acordo com horizonte de tempo fictício onde cada visita a um nó demora uma unidade de tempo, podemos anotar quando o nó é começa a ser visitado e quando termina.

Page 21: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosBusca em profundidade:

◦Se imaginarmos que o algoritmo é executado de acordo com horizonte de tempo fictício onde cada visita a um nó demora uma unidade de tempo, podemos anotar quando o nó é começa a ser visitado e quando termina.

◦Teremos então duas informações além de pred: o tempo de descoberta do nó desc e o tempo de finalização do nó fim.

Page 22: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosOs tempos de descoberta e

finalização apresentam uma estrutura de parênteses.

Se representarmos a descoberta do nó u pelo símbolo “(u” e a finalização pelo símbolo “u), a sequência de descobertas e finalizações gera uma expressão bem formada, onde os parênteses estão corretamente aninhados.

Page 23: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosExemplo de estrutura de parênteses

y

x

z

w

s

v

t

u

ts

v uz

y w

x

2(z

1(s

3(y

4(x

5x)

6y)

7(w

8w)

9z)

10s)

11(t

12(v

13v)

14(u

15u)

16t)

Page 24: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosClassificação de arestas:

◦Pode trazer informações importantes sobre o grafo, como a existência de ciclos (que será visto posteriormente).

◦Arestas de árvore: são as arestas obtidas pela relação de precedência direta entre vértices do u e v do grafo, ao final da busca.

◦A aresta (u,v) é de árvore, se v for descoberto por esta mesma aresta.

Page 25: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosClassificação de arestas:

◦Arestas de retorno: são as arestas (u,v) que conectam um vértice u a um vértice v já visitado anteriormente.

◦Arestas de avanço: são as arestas (u,v) que conectam um vértice u a um vértice v descendente não-imediato.

◦Arestas de cruzamento: são as demais arestas do grafo.

Page 26: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em Grafos

y

x

z

w

s

v

t

u

ts

v uz

y w

x

Page 27: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosOrdem topológica: pode ser vista

como o posicionamento dos vértices numa linha horizontal, onde todas as arestas estão da esquerda para a direita.

A ordem topológica é aplicada a grafos direcionados que não possuam ciclos.

Page 28: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em Grafos

Page 29: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosAlgoritmo para ordem topológica:

◦Executar a busca em profundidade;◦Conforme os vértices são finalizados,

colocá-los na frente de uma lista encadeada*;

◦Retornar o início da lista;

*Pode ser utilizada uma pilha.

Page 30: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosComponentes fortemente

conexos: são subconjuntos maximais de vértices, onde para cada par de vértices (u,v), existe uma forma de chegar de u até v e vice-versa.

Não faz sentido em grafos não-direcionados. Por quê?????

Page 31: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em Grafos

1 2

5 6 7

98

3 4

Page 32: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosAlgoritmo para gerar os

componentes:◦Executar a busca em profundidade,

anotando os tempos de finalização de cada vértice;

◦Calcular o grafo transposto;◦Aplicar a busca em profundidade no

grafo transposto: Considerar os vértices em ordem

decrescente de seus tempos de finalização;

◦Mostrar os vértices de cada árvore como um componente fortemente conexo;

Page 33: Algoritmos em Grafos Buscas em Grafos Prof. André Renato 1º Semestre/2012.

Buscas em GrafosColocar grafos de exemplo e

pseudo-codigo no final