Você está na página 1de 21

CICLO HAMILTONIANO

PROBLEMA NP-COMPLETO

Tiago Schenkel

Mestrado em Ciência da Computação - UFPEL

Teoria dos Grafos

Introdução

A Teoria dos Grafos surgiu com os trabalhos de L. Euler, G. Kirchhoff e A. Cayley. O problema das pontes de Königsberg é o primeiro e mais famoso problema em teoria dos grafos resolvido por Euler em 1736. O termo grafo foi criado pelo químico E. Frankland e adotado em 1884. Ele vem da contração de notação gráfica.

Teoria dos Grafos

O Problema das pontes de Königsberg

Na cidade de Königsberg (atual Kalimingrado), antiga capital da Prússia, existiam sete pontes que cruzavam o

rio Preguel estabelecendo ligações entre duas ilhas e

entre as ilhas e as margens opostas do rio. O problema consistia em determinar se é possível ou não fazer um passeio pela cidade começando e terminando no mesmo lugar, cruzando cada ponte exatamente uma única vez.

não fazer um passeio pela cidade começando e terminando no mesmo lugar, cruzando cada ponte exatamente

Teoria dos Grafos

O Problema das pontes de Königsberg

Em 1736 Euler escreveu um artigo, considerado o primeiro artigo da Teoria dos Grafos, onde demonstra

a inexistência de tal percurso.

Euler não só resolveu o problema das pontes de Königsberg, mas deu um processo geral para, fixadas

algumas regiões com seus rios e pontes, saber se existe

ou não um percurso passando por todas as pontes, percorrendo cada ponte uma só vez.

Teoria dos Grafos

O que é um grafo?

Um grafo é um conjunto de pontos, chamados vértices, conectados por linhas, chamadas de arestas.

Definição de grafo

Um grafo G consiste de um conjunto finito e não vazio de n nós, denotado por V(G), e m arestas, denotado por A(G).

Cada aresta corresponde a um par não ordenado de nós.

denotado por V(G) , e m arestas, denotado por A(G) .  Cada aresta corresponde a

Ciclo Euleriano

Ciclo Euleriano

Um Ciclo Euleriano é um ciclo que percorre todas as arestas de um grafo exatamente uma vez e retorna ao vértice inicial. É utilizado para solucionar problemas de otimização, onde procura-se encontrar um circuito que contenha todas arestas do grafo e cuja distância total seja mínima.

Teorema

Um grafo G conexo possui ciclo euleriano se e somente se todo vértice de G possuir grau par.

 Teorema  Um grafo G conexo possui ciclo euleriano se e somente se todo vértice

Ciclo Hamiltoniano

Histórico:

Em 1859, o matemático irlandês Sir Willian Hamilton introduziu um quebra-cabeça com formato de

dodecaedro, que é uma figura sólida com 12 faces

pentagonais idênticas.

Cada vértice foi rotulado com o nome de uma cidade. A questão proposta por Hamilton foi começar em uma

cidade e fazer um tour pelo mundo visitando cada cidade uma única vez, voltando à cidade original.

Ciclo Hamiltoniano

Solução do problema de Hamilton:

O quebra-cabeça é fácil de se resolver. Basta “espichar” as faces do dodecaedro para planificá-lo.

:  O quebra-cabeça é fácil de se resolver. Basta “espichar” as faces do dodecaedro para
:  O quebra-cabeça é fácil de se resolver. Basta “espichar” as faces do dodecaedro para
:  O quebra-cabeça é fácil de se resolver. Basta “espichar” as faces do dodecaedro para

Ciclo Hamiltoniano

Formulação do problema:

Dado um grafo G, é possível achar um circuito de G em que cada vértice apareça uma única vez?

Ciclo Hamiltoniano

Definição:

Dado um grafo G, um circuito (ou caminho) Hamiltoniano para G é um circuito simples que inclui

todos os vértices de G.

Ou seja, é uma sequência de vértices adjacentes e arestas distintas em que cada vértice aparece

exatamente uma vez.

Diz-se que G é um grafo Hamiltoniano se G tem um Ciclo Hamiltoniano.

Ciclo Hamiltoniano

Questões em aberto:

Quando um grafo possui um ciclo hamiltoniano? Como determinar se um grafo é hamiltoniano? Existe um algoritmo eficiente que possa determinar se tal ciclo existe?

Ciclo Hamiltoniano

Apesar de terem sido estudados por vários séculos,

não há uma boa caracterização dos grafos hamiltonianos. Existem famílias de grafos para os quais existe um circuito hamiltoniano, também é possível estabelecer certas condições que implicam na não- existência de um circuito.

Não se conhece um algoritmo eficiente para

verificar se um grafo é hamiltoniano.

Ciclo Hamiltoniano

O problema do ciclo hamiltoniano pertence a classe de problemas NP- Completos.

A solução para este problema vale U$ 1 milhão!

Ciclo Hamiltoniano

Solução força-bruta:

Se existir um circuito hamiltoniano, ele corresponderá a uma permutação circular dos vértices, com a

propriedade de que os vértices consecutivos sejam

ligados por um arco de grafo.

Para verificar a existência de um circuito hamiltoniano basta gerar todas as permutações circulares dos

vértices e testar se uma delas corresponde a um percurso no grafo.

Ciclo Hamiltoniano

O algoritmo funciona para grafos de tamanho

moderado:

Num grafo com 9 vértices, o número de permutações é de 8! = 40.320 caminhos.

E grafos maiores?

Num grafo com 50 vértices, o número de permutações é de 49! > 16 * 10^48

Considerando que um computador realize 200 milhões de operações por segundo, se em cada operação ele conseguir testar um circuito, mesmo assim serão necessários

8 * 10^42 segundos, o que corresponde a

aproximadamente 2 * 10^35 anos.

Ciclo Hamiltoniano

Aplicações:

Problema do caixeiro viajante: consiste em encontrar um caminho que passe por todas cidades uma única

vez e retorne ao ponto de partida escolhendo para isso um caminho de custo mínimo. Criptografia: dado um grafo, é difícil encontrar um

circuito hamiltoniano (ou mostrar que não existe), mas é

fácil testar se uma sequência de vértices forma um circuito hamiltoniano.

Ciclo Hamiltoniano

O grafo abaixo é Hamiltoniano?

Ciclo Hamiltoniano  O grafo abaixo é Hamiltoniano?

Ciclo Hamiltoniano

Não é hamiltoniano!

Ciclo Hamiltoniano  Não é hamiltoniano!

Ciclo Hamiltoniano

O grafo abaixo é Hamiltoniano?

Ciclo Hamiltoniano  O grafo abaixo é Hamiltoniano?

Ciclo Hamiltoniano

É hamiltoniano!

Ciclo Hamiltoniano  É hamiltoniano!

CICLO HAMILTONIANO

Problema NP-Completo

Tiago Schenkel (tiago.tche@gmail.com)

Mestrado em Ciência da Computação - UFPEL