Um caminho hamiltoniano num grafo é um caminho onde ocorrem todos os vértices do grafo exactamente uma vez. Análogamente, um ciclo hamiltoniano é um ciclo que contém todos os vértices do grafo exactamente uma vez, com excepcção dos vértices inicial e final que têm de coincidir. Um grafo diz-se hamiltoniano se possuir algum ciclo hamiltoniano. Se retirarmos a última aresta a um ciclo hamiltoniano obtemos um caminho hamiltoniano, logo todo o grafo hamiltoniano possui caminhos hamiltonianos. No entanto, o recíproco desta afirmação não é verdadeiro, como o seguinte exemplo mostra. Exemplo. 1
A designação de hamiltoniano referese ao matemático irlandês Sir William Rowan Hamilton (1805 1865), famoso pela sua desoberta dos quaterniões, uma generalização não-comutativa dos números complexos. Por volta de 1857 Hamilton criou um jogo ao qual deu o nome de jogo icosiano, aludindo aos 20 vértices do dodecaedro. A cada um desses vértices era atribuído o nome de uma capital e o objectivo do jogo era, usando as arestas do dodecaedro, planear um percurso que visitasse cada uma das cidades exactamente uma vez e terminasse na cidade de onde se tinha partido. Assim, procurava-se um ciclo hamiltoniano no grafo do dodecaedro. Um exemplo de um tal ciclo é o seguinte: 2
3
4
Exemplo. Este exemplo mostra a independência entre a existência de circuitos (atalhos) eulerianos e a existência de ciclos (caminhos) hamiltonianos num grafo. circ euler atalh euler cic ham cam ham (a) sim não sim sim (b) não sim não sim (c) não não sim sim (d) sim não não sim (e) não sim não não (f) não não não sim 5
Exemplo. O grafo G abaixo não é Hamiltoniano porque a aresta a indicada é uma ponte. O grafo H também não é Hamiltoniano porque se v for o vértice indicado na figura então!(h v) = 2 > 1. No entanto, basta acrescentar uma qualquer aresta entre vértices não adjacentes a G ou H para que o respectivo grafo se torne Hamiltoniano. Por esta razão, dizemos que G e H são ambos grafos não-hamiltonianos maximais. a G v H 6
Exemplo. Se retirarmos os três vértices representados a preto no grafo G abaixo, obtemos um grafo com 4 componentes conexas. Logo G não é Hamiltoniano. 7
Algoritmo Seja G um grafo simples com n 3 vértices que satisfaz as hipóteses do Teorema de Ore. Passo 1. Escolher um vértice qualquer de G e, acrescentando vértices adjacentes à direita e à esquerda, construir um caminho aberto em G de comprimento cada vez maior, até não ser possível prosseguir, digamos C = y 1 y 2 y m, 3 apple m apple n, de comprimento m 1. Passo 2. (i) Se y 1 e y m não forem adjacentes em G, prosseguimos para o Passo 3. Caso contrário, y 1 e y m são adjacentes e prosseguimos para (ii). 8
(ii) Se m = n então y 1 y 2 y m y 1 é um ciclo Hamiltoniano em G; parar. Caso contrário, y 1 e y m são adjacentes e m< n; ir para (iii). (iii) Existe um vértice z, diferente de y 1,...,y m, que é adjacente a y k, para algum 1 apple k apple m. Substituir C pelo caminho aberto de comprimento m z y k y k+1 y m y 1 y k 1. De seguida, estender C acrescentando vértices adjacentes à direita e à esquerda até não ser possível prosseguir, de forma a termos ainda um caminho aberto de comprimento maior ou igual a m. Voltar ao início do Passo 2. Passo 3. Encontrar um vértice y k, com 1 < k<m, tal que y 1 é adjacente a y k e y m é adjacente a y k 1. Substituir C pelo caminho y 1 y k 1 y m y m 1 y k. de comprimento m 1, tal como C. As duas extremidades deste caminho são adjacentes. Voltar ao Passo 2(ii).
Teorema 1 (Dirac, 1952). Se o grafo G tem n vértices (n 3) e d(v) n/2 para todo o vértice v de G, então G é hamiltoniano. Exemplo. O grafo seguinte é hamiltoniano: Note-se que a condição do Teorema de Dirac é suficiente mas não é necessária. Por exemplo, o ciclo de cinco vértices C 5 é hamiltoniano mas nenhum dos seus vértices satisfaz a condição d(v) 5/2. A prova do Teorema de Dirac pode ser adaptada para uma prova do seguinte resultado mais geral: Teorema 2. Seja G um grafo com n vértices e sejam u e v vértices não adjacentes de G tais que d(u)+d(v) n. Seja G + uv o grafo obtido adicionando a aresta uv a G. Então G é hamiltoniano se e só se G + uv é hamiltoniano. 9
Exemplo. Aplicações sucessivas do teorema anterior permitem chegar ao grafo hamiltoniano completo K 6, logo G é também hamiltoniano. 10
Exemplo. Aplicar o algoritmo baseado no Teorema de Ore ao seguinte grafo: 11
O Problema do Caixeiro Viajante Exemplo. (Zé Pedro, o caixeiro viajante) O Zé Pedro é um caixeiro viajante que tem clientes em cinco cidades, que abreviamos por A, B, C, D e E. Ele precisa de planear uma viajem de negócios com cidade de partida e de destino final A (a cidade onde mora), em que passará por cada uma das restantes quatro cidades precisamente uma vez. O grafo abaixo representa o custo de cada viagem (ida ou volta) entre cada par de cidades. Qual o percurso mais barato para esta viagem do Zé Pedro? Por outras palavras, qual é o ciclo hamiltoniano optimal (isto é, cuja soma do peso das arestas é menor) no grafo dado? 12
Exemplo. (As Luas de Júpiter e Saturno) No ano 2020 será lançada da Terra uma expedição para explorar as luas de Júpiter e Saturno. Serão visitadas Callisto, Ganymede, Io (luas de Júpiter), Mimas e Titan (luas de Saturno), onde serão recolhidas amostras com as quais a expedição voltará à Terra. A seguinte figura indica a duração da missão (em anos) entre cada par de luas. Qual é o ciclo hamiltoniano optimal (mais breve) no grafo representado? (Terra) 13
Exemplo. (Vida em Marte) A tabela abaixo indica as distancias aproximadas (em milhas) entre sete locais de Marte, onde cientistas da NASA pensam poder encontrar vestígios de vida com maior probabilidade. A G H I N P W A - 7500 5000 2800 3500 1500 2200 G 7500-3000 6000 8000 6500 5000 H 5000 3000-4000 4800 3500 2800 I 2800 6000 4000-2000 3000 2900 N 3500 8000 4800 2000-4000 3200 P 1500 6500 3500 3000 4000-1300 W 2200 5000 2800 2900 3200 1300 - Quer-se planear uma viagem que colocará um robot em Marte, aterrando em A. O robot deverá percorrer cada um dos locais, recolher amostras de solo e regressar a A, de onde um fogetão trará as amostras para Terra de forma a serem analisadas. Qual será o ciclo hamiltoniano optimal no grafo correspondente? 14
Método Exaustivo Este método consiste em fazer uma lista de todos os ciclos hamiltonianos do grafo, calcular o peso de cada um e escolher um de peso mínimo. Quantos ciclos hamiltonianos é que existem no grafo completo de n vértices K n? 15
Exemplo. (Zé Pedro, o caixeiro viajante) Uma forma de resolver o problema do Zé Pedro é usar o método de exaustão em que se calculam os pesos dos 4! = 24 ciclos hamiltonianos possíveis em K 5 : ciclo hamilt custo total ciclo inverso ABCDEA 185+121+174+199+133=812 AEDCBA ABCEDA 185+121+120+199+152=777 ADECBA ABDCEA 185+150+174+120+133=762 AECDBA ABDECA 185+150+199+120+119=773 ACEDBA ABECDA 185+200+120+174+152=831 ADCEBA ABEDCA 185+200+199+174+119=877 ACDEBA ACBDEA 119+121+150+199+133=722 AEDBCA ACBEDA 119+121+200+199+152=791 ADEBCA ACDBEA 119+174+150+200+133=776 AEBDCA ACEBDA 119+120+200+150+152=741 ADBECA ADBCEA 152+150+121+120+133=676 AECBDA ADCBEA 152+174+121+200+133=780 AEBCDA Verificamos assim que há exactamente dois ciclos optimais, o ciclo ADBCEA e o seu inverso, o ciclo AECBDA. Em qualquer dos casos, o Zé Pedro gasta 676 Euros na sua viagem de trabalho e esta é a melhor solução. 16
Método do Vizinho Mais Próximo Escolhe-se um vértice e a aresta de menor peso incidente nesse vértice. Esta aresta determina um outro vértice. De cada novo vértice escolhe-se a aresta de menor peso, de entre as arestas que são incidentes nesse vértice e num vértice que ainda não foi escolhido. No final, regressa-se ao vértice inicial. Exemplo. (Zé Pedro, o caixeiro viajante) No caso do Zé Pedro, por este algoritmo ele começa pelo vértice A. De A vai para C, de C para E, depois para D e finalmente para B, de onde regressa a A. O custo desta viagem é de 773 Euros. O método do vizinho mais próximo é muito mais rápido do que que o método de exaustão, embora não produza, em geral, uma solução optimal. Neste caso, o custo adicional é de 97 Euros, e o erro relativo é de 97/676 ' 14, 3%. 17
Exemplo. (Zé Pedro, o caixeiro viajante) Suponhamos que o Zé Pedro consegue alargar o seu negócio e ter um leque de clientes espalhados por dez cidades. O custo das viagens entre as cidades está representado abaixo, em forma de um grafo e de uma tabela: Neste caso, para usar o método exaustivo temos de calcular o peso de 9! = 362880 ciclos hamiltonianos. Demorando 30 segundos por cada um dos ciclos demoraríamos 3024 horas, o que é mais de 4 meses a trabalhar 24 horas por dia, 7 dias por semana! Tentemos então o método do vizinho mais próximo. O ciclo que obtemos é ACEDBJGKF HA, cujo custo é de 2153 Euros. 18
Método do Vizinho Mais Próximo com Repetição Exemplo. (Zé Pedro, o caixeiro viajante) Voltando mais uma vez ao exemplo do Zé Pedro e aplicando o algoritmo do vizinho mais próximo com repetição, obtemos sucessivamente os ciclos: ciclo custo em Euros ACEDBA 773 BCAEDB 722 CAEDBC 722 DBCAED 722 ECADBE 741 Assim, este algoritmo escolhe o ciclo BCAEDB = CAEDBC = DBCAED, cujo custo é de 722 Euros. Como sabemos, este não é um ciclo optimal, mas o resultado é mais satisfatório do que o obtido usando o algoritmo do vizinho mais próximo (sem repetição) começando em A. 19
Método do Elo Mais Barato Começamos por escolher a aresta de menor peso do grafo. Depois, escolhemos a aresta de menor peso de entre as arestas que não foram ainda escolhidas (que não tem de ser adjacente à primeira), sujeitos às seguintes regras: 1. não permitir que se forme um ciclo a não ser que já todos os vértices sejam incidentes com alguma das arestas já escolhidas; 2. não permitir que de entre as arestas escolhidas haja três incidentes no mesmo vértice. Repetimos este processo até obtermos um ciclo, que será necessariamente um ciclo hamiltoniano. Se alguma destas duas regras fosse violada não obeteríamos um ciclo hamiltoniano. Reciprocamente, se seguirmos estas regras terminamos com um ciclo hamiltoniano. 20
Exemplo. (Zé Pedro, o caixeiro viajante) Usemos este algoritmo no problema do Zé Pedro com cinco cidades. Obtemos o ciclo ACEBDA, de peso 741 Euros. 21
Exemplo. (Vida em Marte) Retomemos o problema do robot a recolher amostras de solo em Marte apresentado no início. Vamos aplicar-lhe os algoritmos que acabámos de discutir: Método exaustivo. Temos de calcular o peso de 6! = 720 ciclos hamiltonianos. Usando um computador obtemos um ciclo optimal de 20100 milhas. Método do elo mais barato. Obtemos o ciclo AP W HGNIA, de peso 21400 milhas. Método do vizinho mais próximo. Começando em A, obtemos o ciclo AP W HGINA, de peso 20100 milhas. Método do vizinho mais próximo com repetição. Uma vez que começando em A obtivémos um ciclo optimal, este método produzirá uma solução com o mesmo peso. 22