Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012.
Transcript of Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012.
![Page 1: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/1.jpg)
Algoritmos em Grafos
Árvores Geradoras
Prof. André Renato
1º Semestre / 2012
![Page 2: Algoritmos em Grafos Árvores Geradoras Prof. André Renato 1º Semestre / 2012.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/2.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/3.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/4.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/5.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/6.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/7.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/8.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/9.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/10.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/11.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/12.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/13.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/14.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/15.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/16.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/17.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/18.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/19.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/20.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/21.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/22.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/23.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/24.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/25.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/26.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/27.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/28.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/29.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/30.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/31.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/32.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/33.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/34.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/35.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/36.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/37.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/38.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/39.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/40.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/41.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/42.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/43.jpg)
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.](https://reader035.fdocumentos.tips/reader035/viewer/2022062512/552fc130497959413d8d4d48/html5/thumbnails/44.jpg)
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;