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.