algoritmos em grafos Árvores geradoras prof. andré renato 1º semestre / 2012

44
Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Upload: internet

Post on 18-Apr-2015

107 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em Grafos

Árvores Geradoras

Prof. André Renato

1º Semestre / 2012

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

Algoritmos em GrafosVamos voltar a falar em árvores:

◦Como definir a estrutura de dados “árvore”?

◦Quais os elementos que compõem uma árvore?

◦Em relação ao número de filhos de cada nó, como podem ser as árvores?

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

Algoritmos em GrafosSe pensarmos nas árvores como

grafos acíclicos (sem ciclos) não-direcionados, qual a quantidade de arestas que podemos ter?

Qual seria a raiz da árvore?

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

Algoritmos em GrafosNo processo de confecção de

circuitos eletrônicos, é muito comum precisar fazer com que diversos pinos (partes do circuito) sejam eletricamente equivalentes.

Isto equivale a dizer que estes pinos precisam estar conectados entre si, através de fios.

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

Algoritmos em GrafosDeverão ser utilizados n-1 fios,

para conectar n pinos.A colocação dos fios deve ser tal

que seja gasta a menor quantidade possível de fios.

Este problema pode ser modelado através de grafos.

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

Algoritmos em GrafosOs pinos são os vértices;As possíveis conexões entre pinos

são as arestas;O peso (custo) associado às arestas

é a quantidade de fio necessária para a ligação;

Nós desejamos encontrar um subconjunto acíclico de arestas de forma que a soma de todos os custos seja a mínima possível.

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

Algoritmos em GrafosO resultado é uma árvore que

conecta todos os vértices, chamada de árvore geradora, uma vez que ela gera o grafo G.

O problema é chamado de Problema da Árvore Geradora Mínima (AGM), ou Problema da Árvore Geradora de Custo Mínimo.

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

Algoritmos em GrafosExistem dois algoritmos

mundialmente famosos para este problema;◦Prim;◦Kruskal;

A utilização de um ou de outro vai depender de características do grafo, como sua esparsidade, por exemplo.

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

Algoritmos em GrafosAmbos utilizam a estratégia

gulosa de escolher primeiro as arestas de menor custo possível;

Em ambos está presente, direta ou indiretamente, a preocupação de não formar ciclos com as escolhas realizadas.

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

Algoritmos em GrafosAlgoritmo de Kruskal:

◦A idéia por trás deste algoritmo é ordenar todas as arestas em ordem não-decrescente de peso;

◦Escolher as arestas pela ordem, de forma que possam ser colocadas na resposta sem formar ciclos.

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

Algoritmos em GrafosColocar as arestas em ordem e

armazená-las em uma lista é um problema simples de estrutura de dados.

O problema maior está em saber, de forma eficiente, se uma aresta, ao ser colocada na resposta formará ou não um ciclo.

Idéias????

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

Algoritmos em GrafosUma solução simples consiste em

guardar um código para cada vértice;

Inicialmente, cada vértice possui um código distinto, que pode ser até o número do próprio vértice;

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

Algoritmos em GrafosSe dois vértices são adjacentes

na solução do problema, o código dos dois deverá ser o mesmo.

Logo, quando uma aresta (v1,v2) for testada, ela poderá ser colocada na resposta se codigo(v1)≠codigo(v2);

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

Algoritmos em GrafosQuando a aresta for inserida,

todos os vértices v que tenham codigo(v) = v1 deverão receber o código v2 ou vice-versa;

Um vetor de números inteiros de tamanho n é suficiente para este propósito;

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

Algoritmos em GrafosAntes de explicitar o pseudo-

código do algoritmo, vamos a um exemplo gráfico;

As arestas em vermelho fazem parte da solução final do problema (árvore geradora mínima);

As demais estruturas serão atualizadas conforme as explicações dadas;

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 2 3 4 5 6 7 8 9

Arestas: 1 2 2 4 4 6 7 7 8 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 2 3 4 5 3 7 8 9

Arestas: 2 2 4 4 6 7 7 8 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 2 3 4 4 3 7 8 9

Arestas: 2 4 4 6 7 7 8 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 2 3 4 4 3 7 3 9

Arestas: 4 4 6 7 7 8 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 2 3 3 3 3 7 3 9

Arestas: 4 6 7 7 8 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 1 3 3 3 3 7 3 9

Arestas: 6 7 7 8 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 1 3 3 3 3 7 3 9

Arestas: 7 7 8 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 1 3 3 3 3 3 3 9

Arestas: 7 8 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 1 3 3 3 3 3 3 9

Arestas: 8 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 1 1 1 1 1 1 1 9

Arestas: 8 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 1 1 1 1 1 1 1 9

Arestas: 9 10 11 14

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Cod

1 1 1 1 1 1 1 1 1

Arestas: 10 11 14

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

Algoritmos em GrafosPseudo-código Kruskal:

◦Para cada vértice v: codigo(v) := v;

◦Ordenar as arestas na lista L (não-decrescente);

◦Retirar a aresta (v1,v2) da frente da lista; Se codigo(v1) ≠ codigo(v2) então:

Inserir a aresta na solução; Para cada vértice v: Se codigo(v) = codigo(v2) então codigo(v) :=

codigo(v1)

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

Algoritmos em GrafosQual a complexidade do

algoritmo de Kruskal?Para fazer a atualização dos

códigos é possível utilizar uma estrutura de dados chamada de heaps de Fibonacci.

Com ela, o processo de atualização dos códigos diminui a complexidade para O(lg n);

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

Algoritmos em GrafosO algoritmo de Prim monta a

árvore geradora mínima, partindo de um nó previamente estabelecido;

Os demais nós vão sendo incorporados de forma a se conectar com a árvore com o menor custo possível;

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

Algoritmos em GrafosEstes nós que ainda não foram

incorporados, ficam em uma lista ordenada;

A ordenação da lista é feita de acordo com a menor distância que cada vértice tem para a árvore parcial que está sendo montada;

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 5 6 7 8 9

Dist

0

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

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 4 6 7 8 9 -

Dist

8 2 7 4 -

Page 34: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 6 7 8 9 - -

Dist

8 7 6 7 4 - -

Page 35: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 6 7 9 - - -

Dist

8 7 2 7 10 - - -

Page 36: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 3 7 9 - - - -

Dist

8 1 7 10 - - - -

Page 37: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 7 9 - - - - -

Dist

8 8 7 10 - - - - -

Page 38: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 1 2 9 - - - - - -

Dist

8 8 9 - - - - - -

Page 39: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 2 9 - - - - - - -

Dist

4 9 - - - - - - -

Page 40: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó 9 - - - - - - - -

Dist

9 - - - - - - - -

Page 41: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em Grafos

1

2

3

4

5

6

9

7

8

4

11

87

8 7

9

10

144

2

2

6

1

Nó - - - - - - - - -

Dist

- - - - - - - - -

Page 42: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em GrafosPseudo-código do algoritmo de Prim:

◦Para cada vértice v: dist[v] := ;*

◦dist[r] := 0;◦Insere, em uma lista de prioridade L, todos

os vértices de acordo com dist[];◦Enquanto L não estiver vazia:

u := elemento de menor dist[] de L; Para todos os vértices v adjacente a u, que estão

em L: Se w(u,v) < dist[v] então

dist[v] := w(u,v); //atualizar L*

Page 43: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em GrafosComplexidade do algoritmo?Utilizando heaps de Fibonacci,

reduz para O(E + V lgV)

Page 44: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012

Algoritmos em GrafosOs resultados dos algoritmos deverão

ter o mesmo valor, embora possam apresentar arestas distintas.

O algoritmo de Prim utiliza a idéia de escolher um vértice inicial para a geração da árvore.

Se o algoritmo for modificado para anotar a qual predecessor os vértices estão associados, é possível obter a árvore geradora de forma mais direta;