Otimização em Grafos
Definições e Teoremas
Árvore
Grafo conexo que não tem ciclos
Teorema 1
Se é uma árvore de ordem e tamanho , então
Relembrar
Ordem de um grafo
- Número de vértices
Tamanho de um grafo
- Número de arestas
Teorema 2
Um grafo de ordem é uma árvore, se e só se é conexo e tem tamanho .
Árvore de cobertura
Seja um grafo, é a sua Árvore de Cobertura
se:
- É uma árvore
- É um subgrafo de que contém todos os vértices
Custo de árvore
Dada uma Rede
, o custo de uma árvore de cobertura da Rede
é o somatório de todos os valores das arestas de .
Relembrar
Rede
é um grafo com um valor real associado a cada aresta.
Árvore de cobertura mínima
Árvore de cobertura de uma Rede , cujo custo é menor ou igual que o custo de qualquer outra Árvore de cobertura de .
Árvore Económica
Árvore de cobertura construída através do Algoritmo de Kruskal.
Algoritmos
Algoritmo de Kruskal
Descrição Informal
Assinalam-se sempre as arestas de custo mínimo, se não formarem ciclos. Caso forme um ciclo, a aresta é identificada e ignorada durante resto da execução do Algoritmo.
O Algoritmo de Kruskal
termina quando todas as arestas já foram analisadas. Tanto podem estar assinaladas ou identificadas como arestas que completam ciclos.
O resultado final é uma Árvore Económica, que também será uma Árvore de Custo mínimo.
NOTA
Por convenção, só se deve identificar arestas que formam ciclos, quando o valor dessa aresta for o mínimo das arestas ainda por analisar.
Também se pode usar o Algoritmos de Kruskal
para encontrar uma árvore de cobertura máxima
, basta ir assinalando as arestas pela ordem inversa (1º as que têm valor máximo).
No entanto, esse método não pode ser chamado Algoritmo de Kruskal
, é apenas uma adaptação
Teorema - Correção de Kruskal
AVISO
Mais um Teorema, cuja Demonstração é importante saber para preparar a Demonstração que sai no teste
Uma Árvore Económica de uma Rede é sempre uma árvore de custo mínimo dessa Rede.
Demonstração
Seja uma Rede, uma Árvore Económica construída com o Algoritmo de Kruskal
e a árvore de custo mínimo (é conhecida).
Através do Teorema 1, sabe-se que e têm arestas ( é o número de vértices da Rede ).
Seja a sequência de arestas de assinaladas através do Algoritmo de Kruskal.
Seja a primeira aresta que pertence a e não pertence a . Se adicionarmos a , ficaríamos com um ciclo
em vez de uma árvore, porque ficávamos com arestas, e, novamente pelo Teorema 1, uma árvore só pode ter arestas.
Nesse ciclo, há necessariamente uma aresta, , que não pertence a , se removermos de ficamos com uma nova árvore, .
Importante (chave do Teorema)
No Algoritmo de Kruskal
escolhe-se sempre as arestas por ordem crescente do valor. Por isso, se não está em e todas as arestas até estão em e (foram feitas sempre as mesmas escolhas), das duas uma:
- e têm o mesmo custo, mas se escolhermos uma delas a outra completará um ciclo, e para escolheu-se , ficando de fora
- Custo de é superior, e as escolhas que foram feitas para fizeram com que completa-se um ciclo
Em suma, é impossível que o custo de seja inferior ao de .
Relembrando que é a árvore de custo mínimo, sabemos que:
Pelas condições apresentadas, conclui-se que a única solução possível será quando , então .
Repare-se que e têm mais uma aresta em comum, , do que e .
Este processo é recursivo. Seja a árvore com custo igual a que se obtém no final de processo descrito acima, por exemplo, agora teríamos .
Se fossemos aplicando o processo para cada ( seria agora o novo ), para todas as arestas que restam de , ignorando as arestas que já são comuns, no final, o último será igual a e como o custo de é igual ao de , concluí-se que também será uma Árvore de custo mínimo
.
QED
Algoritmo de Dijkstra
Este Algoritmo resolve o Problema da Trajetória mínima.
Descrição Informal
Seja o vértice de partida, o conjunto de arestas, ainda não percorridas, que não fazem ciclos e que incidem nos vértices já percorridos (vamos chamar ao conjunto de vértices já percorridos ).
Seja uma função que atribui a um vértice , já percorrido, o custo necessário para lá chegar.
No início , por isso, escolhe-se a aresta que incide em com menor valor associado.
Agora , por isso, em vez de escolhermos a aresta com menor valor disponível em , escolhemos uma aresta que incida num novo vértice , tal que ,de todos os vértices ainda por explorar, é o mínimo de todos os desse conjunto.
O Algoritmo termina quando tivermos um custo associado a todos os vértices.
O resultado final será uma Árvore de Cobertura
, onde para cada , é o custo mínimo possível
.