Vous êtes sur la page 1sur 6

O PROBLEMA DO CAIXEIRO VIAJANTE

Mike Muya Tshibende, Marcelo Cardoso


Instituto de Informtica Universidade Federal do Rio Grande do Sul (UFRGS)
Caixa Postal 15.064 91.501-970 Porto Alegre RS Brasil
muyatshib@yahoo.fr
marc.cardoso@gmail.com

Abstract: Our main objective in this paper is to prove that the travelling salesman is
a NP-complete problem. We will show that it belongs to the NP class and that there is a
known NP-complete problem that can be reduced to the TSP in polynomial time. Based
on that, we will then conclude that the TSP is NP-complete.
Resumo: O objetivo deste trabalho mostrar que o problema do caixeiro viajante
NP-completo. Mostraremos que ele pertence classe NP e que existe um problema
conhecido como sendo NP-completo que possa ser reduzido ao problema do caixeiro
viajante em tempo polinomial. Com isso, chegaremos a concluso de que o problema
do caixeiro viajante NP-completo.

1. Introduo
O problema do caixeiro viajante ou Travelling Salesman Problem (TSP) um dos mais
clssicos problemas de complexidades. Seja um vendedor que deve visitar n cidades e ele deseja
fazer uma viagem visitando cada cidade apenas uma vez e voltar para cidade de origem usando o
caminho mais curto possvel. O fato de se querer encontrar o custo mnimo caracteriza o TSP
como um problema de otimizao. Na figura 1 se v um exemplo de uma configurao com 5
cidades representadas por vrtices e um custo c(i, j) para viajar da cidade i at a cidade j. O custo
mnimo = 15 e caminho 2-3-5-4-1-2

Figura 1. Uma instncia do problema do caixeiro viajante

2. Caixeiro

Viajante pertence classe NP

A classe NP o conjunto de todos os problemas que podem ser verificados em tempo


polinomial. O algoritmo apresentado abaixo recebe como entrada uma matriz de adjacncia G,
um vetor contendo a sequncia da viagem executada e o custo mximo do cclo.
E retorna verdadeiro caso a entrada representa a soluo verdadeira (caso o vendedor passe
exatamente uma vez em cada cidade, totaliza os custos dos caminhos e verifica se a soma no
mximo k) e falso caso contrrio.
Verificao da soluo do Problema do Caixeiro Viajante
Entradas:
G: Matriz de adjacncia do grafo
v : Vetor da sequncia
k : Custo mximo do ciclo
1. Incio
2. Distancia = 0;
3. n= numVert (G); // grava o numero de vrtices do grafo
4. Se n<> |v| // nmero de vrtices do vetor de sequencia diferente do nmero de vertice do grafo
5.
return false
6. Para i=1 at n Faa
7.
visitados [i] = 0; //Inicializa uma lista para controlar o numero de vezes que um vertice foi
// visitado
8. Fim Para;
9. Para i=1 at |v| Faa
10.
visitados [v[i]] = visitados [v[i]+1]; //Preenche com nmero de vezes que um
//vrtice foi visitado

11.
Se i <> |v| ento
12.
Distancia = Distancia + G[v[i]],v[i+1]];
13.
Seno
14.
Distancia = Distancia + G[v[i]] [v[1]]; // adiciona com o vertice de origem.
15.
Fim Se;
16. Fim Para;
17. Para i=1 at n Faa
18.
Se visitados [i] <> 1 // verifica se todos os vrtices foram visitados apenas uma vez.
19.
return false;
20.
Fim Se
21. Fim Para;
22. Se Distancia <= k ento // verifica se a soma
23.
return true;

24. Seno
25.
return false;
26. Fim Se
27. Fim
2.1. Clculo da complexidade
Cp [verificao] = Cp [4...5] + Cp [6...7] + Cp [9...15] + Cp [17...21] + Cp [22...27]
=
1+1+somatorio_de_i=1_ate_n
1+somatorio_de_i=1_ate_v
1+somatorio_de_i=1_ate_ n 1+1+1
= 2 + n+ v + n+ 2
= 2n + v + 4
= O (n)
Exemplo de execuo do algoritmo para uma matriz de entrada G. Essa entrada produz a
sada true.

v= [0, 1, 3, 2]; k = 250


A complexidade do algoritmo de verificao tem complexidade polinomial, isso nos
garante que o problema do Caixeiro Viajante pertence classe NP.

3. Caixeiro Viajante pertence classe NP-Completo


Para provarmos que o problema do Caixeiro Viajante pe NP-Difcil, devemos reduzir um
outro problema NP-Difcil a ele. Escolhemos o problema dos ciclo hamiltoniano para fazer essa
reduo.
3.1 Problema do Ciclo Hamiltoniano: definio
Um ciclo hamiltoniano um caminho fechado que contm cada vrtice de um grafo noorientado G = (V, E). Nesse problema, os vrtices so includos apenas uma vez, sem
repetio. Um grafo que possui esse tipo de circuito conhecido como grafo hamiltoniano.

Exemplo de um ciclo hamiltoniano em um Dodecaedro

3.2. O Problema do Caixeiro Viajante NP-Difcil


Para demonstrar que o problema do Caixeiro Viajante NP-Difcil, devemos mostrar
primeiro que Ciclo Hamiltoniano p Caixeiro Viajante.
Dado G = (V, E) uma instncia do problema Ciclo Hamiltoniano, uma instncia do
problema caixeiro viajante pode ser construda da seguinte maneira: formamos um grafo
completo G = (V, E), com E = {(i, j) : i, j V e i j} e a funo de custo: c(i, j) = {0 se (i, j) E;
seno 1}. Dessa forma, G um grafo completo, composto de todos os vrtices de G, com
arestas de custo 0 se j existiam no grafo original e custo 1 se no existiam. O algoritmo que
faz essa reduo executa em tempo polinomial, como pode ser visto abaixo:
Algoritmo de reduo
Entradas: G, n
G-> Matriz da adjacncia
n-> Nmero de vrtice
1. Inicio
2. c = [];
3. Para i=1 at n Faa
4.
Para j=1 at n Faa
5.
Se G[i] [j] > 0 ento
6.
c[i] [j] = 0;
7.
Seno
8.
c[i] [j] = 1;
9.
Fim Se
10.
Fim Para
11. Fim Para
12. return c
13. Fim
A complexidade do algoritmo de reduo dada por:
Cp [reduo] = Cp [3...8] +Cp [12]

= somatorio_de_i=1_ate_n (somatorio_de_j=1_ate_n ( 1 )) + 1
= n + 1
= O (n)
Abaixo temos um exemplo de um grafo G e de G (formado com o algoritmo dado
acima):

Grafo G uma instncia de ciclo hamiltoniano

Grafo G uma instncia de problema do Caixeiro Viajante


Se existe uma viagem h com custo zero em G, da mesma forma, existe uma viagem h
com custo mximo zero em G. Os custos das arestas em E so zero ou um, o custo da
viagem h e exatamente zero, e cada aresta na viagem deve ter custo zero. Um grafo G s
hamiltoniano se e somente se possuir uma trilha fechada que percorre todas as arestas com
custo mximo zero. Suponha que o grafo G tem um ciclo hamiltoniano, ento cada aresta
desse ciclo pertence a E e portanto, tem custo 0 em G.
G tem um ciclo hamiltoniano se e somente se existe uma instncia do caixeiro viajante
com circuito de tamanho menor ou igual ao nmero de vrtices n de G. Se G tem um ciclo
hamiltoniano, ento essa ordem em particular de cidades (vrtices) define um circuito de
tamanho n.
Assim, podemos concluir que h um ciclo hamiltoniano no grafo G. Portanto, o
problema de TSP pode ser reduzido em problema do ciclo hamiltoniano. Logo, o problema do
caixeiro viajante um problema NP- difcil.

4. Concluso

Pelo apresentado nas sees 2 e 3, provamos que o Problema do Caixeiro Viajante


pertence tanto classe NP-difcil quanto classe NP, portanto esse problema NP-completo,
como queramos demonstrar.

5. Bibliografia
CORMEN, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L.; STEIN, Clifford.
Algoritmos: teoria e prtica. Traduo da 2 edio (americana). Rio de Janeiro:
Elsevier: Editora Campus, 2002
Falando de TI.O problema do caixeiro viajante. Disponvel em:
<http://www.zanuz.com/2007/09/o-problema-do-caixeiro-viajante.html>. Acessado em
20/11/2012
Travelling Salesman Problem. Disponvel em: <http://www.shannarasite.org/kb/kbse56.html>,
Acessado em 20/11/2012.
WIKIPEDIA. Caminho hamiltoniano. Disponvel em:
<http://pt.wikipedia.org/wiki/Caminho_hamiltoniano>. Acessado em
20/11/2012
WIKIPEDIA. Travelling Salesman Problem. Disponvel em
<http://en.wikipedia.org/wiki/Travelling_salesman_problem>. Acessado em
20/11/2012

Vous aimerez peut-être aussi