apresentacao-Hilio-e-Ramon

Download Report

Transcript apresentacao-Hilio-e-Ramon

Teoria dos Grafos
Trabalho Computacional
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
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
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Árvore
O que é?
Na teoria dos grafos, uma árvore nada mais é do que um tipo especial
de grafo:
Árvores são grafos em que não existem ciclos!
Uma árvore
Algoritmo de Kruskal
Um grafo comum com ciclos
Hilio Holz e Ramon M. Ramos
Árvore Geradora
O que é?
Uma árvore é dita geradora se ela interliga (direta ou indiretamente)
todos os nós do grafo.
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Á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.
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
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.
Como calcular o peso total?
O peso total de uma AGM é dado pela soma dos pesos das arestas da
árvore.
Peso total da árvore geradora: 1+2+4+6+12 = 25
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
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?
• Opção 1 – Difícil!
formar todas as árvores geradoras possíveis e escolher a de menor peso
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
• Opção 2 – Melhor
Usar um algoritmo específico para esta tarefa...
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Algoritmos possíveis de AGM
Há quatro possibilidades conhecidas
Algoritmo de Kruskal.
Algoritmo de Prim.
Algoritmo Reverse-Delete.
Algoritmo de Borůvka.
Esta apresentação se limita a demonstrar o comportamento do
Algoritmo de Kruskal
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
O algoritmo de Kruskal
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.
Objetivo
Resolver o problema de AGM para grafos conexos.
Para grafos desconexos encontra a Floresta Geradora Mínima.
O que é Floresta Geradora Mínima?
É o mesmo princípio das AGM só que para grafos desconexos.
Uma Floresta Geradora Mínima é composta pelo conjunto de árvores
geradoras mínimas de cada componente conexo.
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Funcionamento
1. Lê todas as arestas
1. Verifica:
2. Ordena em ordem crescente
1. Se forma ciclo, descarta
3. Seleciona cada aresta na ordem
2. Senão adiciona à arvore
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Programa exemplo
Clicar na figura para abrir o programa...
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Estrutura de dados
Estruturas de dados utilizadas
Matriz de Adjacência com pesos
Lista de Arestas
Algoritmo implementado utilizando Conjuntos Disjuntos
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Matriz de Adjacência
• Arestas nulas representadas com 999
• Alocado somente metade da matriz
• Sem ordenação!
• Não façam isso em casa!
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Lista de Arestas
• Não representa arestas inexistentes
• Não consegue representar grafos desconexos
5
1
2
2
4
7
5
V1 : 1
V2 : 2
Custo : 5
Algoritmo de Kruskal
V1 : 1
V2 : 5
Custo : 7
3
10
4
V1 : 1
V2 : 3
Custo : 2
V1 : 3
V2 : 2
Custo : 4
V1 : 3
V2 : 5
Custo : 10
Hilio Holz e Ramon M. Ramos
Conjuntos Disjuntos
• Conjuntos de objetos conectados
• Objetos
• Conjuntos Disjuntos
• Find
• Union
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
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]
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
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
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Heurística 1 - União por Ordenação
• Objetivo
Evitar árvores compridas.
• Union: A raiz de menor ordem aponta para a raiz de maior
ordem.
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Heurística 2 - Compressão de Caminho
• Find: Fazer cada nó no caminho apontar diretamente para a raiz.
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Implementação – Complexidade
•Make Sets
•Ordenação
•Find's + Union's
Estrutura
Conjuntos
Make Sets
Ordenação
Find's + Union's
Matriz
Quick-Find
O(V)
O(n3)
O(n+Lg n)
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)
Lista
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Implementação
• Linguagem
•
C
• Testes
•
Grafos
 Esparsos
 Densos
 Completos
•
Número de Vértices variando de 50 a 2000 (de 50 em 50)
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Resultados – Grafos Esparsos
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Resultados – Grafos Densos
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Resultados – Grafos Completos
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
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
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
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
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos
Obrigado!
Dúvidas / Perguntas?
Algoritmo de Kruskal
Hilio Holz e Ramon M. Ramos