ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo...

27
ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia Silva Boeres Teoria dos Grafos Trabalho Computacional

Transcript of ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo...

Page 1: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

ALGORITMO DE KRUSKALAlgoritmo polinomial para geração

de uma Árvore Geradora Mínima

de um grafo conexo

Hilio HolzRamon M. Ramos

Professora: Maria Claudia Silva Boeres

Teoria dos GrafosTrabalho Computacional

Page 2: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Agenda

1. Árvores, Árvores Geradoras, Árvores Geradoras Mínimas e seus pesos

2. O problema da Árvore Geradora Mínima

3. O algoritmo de Kruskal

4. Estruturas de dados utilizadas

5. Implementações realizadas

6. Complexidade do algoritmo

7. Resultados obtidos

8. Conclusão

Page 3: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Árvore

O que é?

Na teoria dos grafos, uma árvore nada mais é do que um tipo especial de grafo:

Uma árvore Um grafo comum com ciclos

Árvores são grafos em que não existem ciclos!

Page 4: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Árvore Geradora

O que é?

Uma árvore é dita geradora se ela interliga (direta ou indiretamente) todos os nós do grafo.

Page 5: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Árvore Geradora Mínima – AGM

O que é?

Uma Árvore Geradora Mínima - AGM, ou Minimum Spanning Tree - MST, de um grafo com pesos nas arestas (grafo valorado) é qualquer árvore geradora do grafo que tenha peso mínimo.

Vale frisar..Localizar uma AGM só é possível em grafos valorados, ou seja, com pesos nas arestas.

Page 6: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Peso total de uma AGM

O que é peso?Peso é o valor dado a cada aresta, podendo representar qualquer valor em um problema real, como custo, fluxo, confiabilidade, etc.

Peso total da árvore geradora: 1+2+4+6+12 = 25

Como calcular o peso total?O peso total de uma AGM é dado pela soma dos pesos das arestas da árvore.

Page 7: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

O problema da AGM

O problema da Árvore Geradora Mínima – AGM consiste em encontrar, dado um grafo com arestas valoradas, uma estrutura de conexão (árvore) em que todos os nós

(geradora) se conectem (direta ou indiretamente) uns aos outros.

Essa estrutura deve possuir o menor peso possível, onde o peso é dado pela soma dos pesos das arestas escolhidas (mínima).

Como resolver?

formar todas as árvores geradoras possíveis e escolher a de menor peso• Opção 1 – Difícil!

O matemático Arthur Caley provou que um grafo com N nós possui NN-2 árvores geradoras diferentes.

N=4, 16 árvores N=6, 1.296 árvores N=10, 100.000.000 árvores

Apenas 1 árvore mínima

Usar um algoritmo específico para esta tarefa...

• Opção 2 – Melhor

Page 8: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Algoritmos possíveis de AGM

Há quatro possibilidades conhecidas

Algoritmo de Kruskal.

Algoritmo de Prim.

Esta apresentação se limita a demonstrar o comportamento do

Algoritmo de Kruskal

Algoritmo Reverse-Delete.

Algoritmo de Borůvka.

Page 9: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

O algoritmo de Kruskal

O que é Floresta Geradora Mínima?

Objetivo

Resolver o problema de AGM para grafos conexos.

Para grafos desconexos encontra a Floresta Geradora Mínima.

Uma Floresta Geradora Mínima é composta pelo conjunto de árvores geradoras mínimas de cada componente conexo.

É o mesmo princípio das AGM só que para grafos desconexos.

História

Este algoritmo apareceu pela primeira vez no jornal Proceedings of the American Mathematical Society, em 1956, e foi escrito por Joseph Bernard Kruskal, Jr.

Page 10: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Funcionamento

1. Lê todas as arestas

2. Ordena em ordem crescente

3. Seleciona cada aresta na ordem

1. Verifica:

1. Se forma ciclo, descarta

2. Senão adiciona à arvore

Page 11: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Programa exemplo

Clicar na figura para abrir o programa...

Page 12: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Estrutura de dados

Matriz de Adjacência com pesos

Lista de Arestas

Estruturas de dados utilizadas

Algoritmo implementado utilizando Conjuntos Disjuntos

Page 13: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Matriz de Adjacência

• Arestas nulas representadas com 999

• Alocado somente metade da matriz

• Sem ordenação!

• Não façam isso em casa!

Page 14: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Lista de Arestas

• Não representa arestas inexistentes

• Não consegue representar grafos desconexos

1 2

3

54

5

47

2

10

V1 : 1V2 : 2Custo : 5

V1 : 1V2 : 5Custo : 7

V1 : 1V2 : 3Custo : 2

V1 : 3V2 : 2Custo : 4

V1 : 3V2 : 5Custo : 10

Page 15: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Conjuntos Disjuntos

• Conjuntos de objetos conectados

• Objetos

• Conjuntos Disjuntos

• Find

• Union

Page 16: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Conjuntos Disjuntos - Quick Find

• Estrutura de Dados• Vetor de inteiros id[ ] de tamanho N

• Dois vértices são de mesmo conjunto se tem o mesmo id.

• Find: Retornar o id do nó

• Union: Para mesclar conjuntos contendo p e q, muda-se todas as entradas com id[p] para id[q]

Page 17: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Conjuntos Disjuntos - Quick Union

• Estrutura de Dados• Vetor de inteiros id[ ] de tamanho N

• id[i] é o pai de i

• Find: Procurar recursivamente até id[i] =i

• Union: mudar o id da raiz de um dos conjuntos

Page 18: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Heurística 1 - União por Ordenação

• Union: A raiz de menor ordem aponta para a raiz de maior ordem.

• Objetivo

Evitar árvores compridas.

Page 19: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Heurística 2 - Compressão de Caminho

• Find: Fazer cada nó no caminho apontar diretamente para a raiz.

Page 20: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Implementação – Complexidade

Estrutura Conjuntos Make Sets Ordenação Find's + Union's

Matriz Quick-Find O(V) O(n3) O(n+Lg n)

Lista

Quick-Find O(V) O(E Lg E) O(n+Lg n)

Quick-Union O(V) O(E Lg E) O(n+Lg n)

QU+heurísticas O(V) O(E Lg E) O(n)

•Make Sets

•Ordenação

•Find's + Union's

Page 21: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Implementação

• Linguagem• C

• Testes• Grafos

Esparsos

Densos

Completos

• Número de Vértices variando de 50 a 2000 (de 50 em 50)

Page 22: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Resultados – Grafos Esparsos

Page 23: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Resultados – Grafos Densos

Page 24: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Resultados – Grafos Completos

Page 25: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Exemplo

• Ex:Problema realmente grande

• 109 vértices e 1010 arestas

• Aplicação das heurísticas reduz o tempo de 3000 anos para 1 minuto em relação ao Quick-Find

Fonte: http://www.cs.princeton.edu/~rs/AlgsDS07/01UnionFind.pdf

Page 26: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Conclusão

• Ordenação tem efeito muito importante

• 'Quick Union + heurísticas' é implementação assintoticamente mais rápida conhecida

• Bons Algoritmos tornam as soluções possíveis

Page 27: ALGORITMO DE KRUSKAL Algoritmo polinomial para geração de uma Árvore Geradora Mínima de um grafo conexo Hilio Holz Ramon M. Ramos Professora: Maria Claudia.

Hilio Holz e Ramon M. RamosAlgoritmo de Kruskal

Obrigado!

Dúvidas / Perguntas?