You are on page 1of 12

Pontifcia Universidade Catlica de Campinas

Ana Luisa Bavati RA: 13022165


Frederico Bechara De Paola RA: 13099965
Leonardo Henrique Burrone RA: 13066667

Projeto de Anlise de Algoritmos

Campinas
26 de maio de 2015.

Ana Luisa Bavati


Frederico Bechara De Paola
Leonardo Henrique Burrone

Projeto de Anlise de Algoritmos

Relatrio apresentado como requisito parcial para obteno de


aprovao na disciplina de Anlise de Algoritmos e Teoria dos
Grafos, no Curso de Engenharia de Computao, na Pontifcia
Universidade Catlica de Campinas. Prof. Lcia Guimaraes.

Campinas
26 de maio de 2015.

Resumo:

Neste projeto foi feita uma pesquisa sobre a classe de algoritmos NP. Mostramos
tambm suas subclasses e possveis solues para problemas dessa classe.
Aps o desenvolvimento apresentamos um exemplo prtico de problema dessa classe
e sua resoluo.

Abstract:
In this project a research about the algorithm class NP was made. We also show its
subclasses and possible solutions for problems of this class.
After the discussion we show a practical example of a problem from this class and
your resolution.

Sumrio:

1 Introduo.................................................................................................................... 5
2 Objetivo........................................................................................................................ 6
3 Desenvolvimento.......................................................................................................... 6
3.1 Classe de algoritmos e suas sub-classes ............................................................. 6
3.1.1 Classe NP................................................................................................................. 6
3.1.2 Classe P.................................................................................................................... 7
3.1.3 NP-Completo........................................................................................................... 7
3.1.4 Solues de Problemas NP-completos.................................................................... 8
3.1.5 NP-Difcil................................................................................................................ 8
3.1.6 Solues de Problemas NP-difceis....................................................................... 8
3.2 Exemplo prtico de problema: Problema da Mochila .................................... 9
3.2.1 Pseudocdigo para a resoluo do Problema da Mochila ............................ 10
4 Concluso................................................................................................................... 11
5 Referncia bibliogrficas.......................................................................................... 11

1 Introduo:
A complexidade computacional um ramo da teoria da computao em cincia da
computao terica e matemtica que estuda a eficincia dos algoritmos se concentra em
classificar problemas computacionais de acordo com sua dificuldade inerente, e relacionar
essas classes entre si.
Entre os problemas esto:

Problemas de deciso: existe uma determinada estrutura satisfazendo certa


propriedade? Resultado: sim ou no.

Problemas de busca: tipo de problema computacional representado por


uma relao binria.

Problemas de otimizao: dentre todas as estruturas satisfazendo determinada


propriedade, obter aquela que otimiza certa funo de custo. Resultado: uma
soluo vivel tima.

Do ponto de vista prtico, de nada nos adianta um algoritmo perfeito se sua


implementao computacional demora muito tempo para ser processada. Mesmo tarefas
relativamente simples, como o produto de dois nmeros com muitos dgitos, pode demorar
alguns minutos para serem concludas nos atuais computadores. Se considerarmos que alguns
algoritmos necessitam multiplicar nmeros muito grandes milhares de vezes esses alguns
minutos podem se transformar em um tempo excessivamente longo.
Para medir a eficincia de um algoritmo frequentemente usamos o tempo terico que o
programa leva para encontrar uma resposta em funo dos dados de entrada. Este clculo
feito associando-se uma unidade de tempo para cada operao bsica que o procedimento
executa. Se a dependncia do tempo com relao aos dados de entrada for polinomial, o
programa considerado rpido. Se, entretanto, a dependncia do tempo for exponencial o
programa considerado lento.
Podemos classificar os problemas resolvidos por programas em classes. Entre as
classes esto: P e NP.
A classe de algoritmos P representa um conjunto de problemas de deciso que podem
ser resolvido por um polinmio p(n), responsvel por limitar o nmero de passos do
processamento, caso esse processamento for iniciado com uma entrada de tamanho n.
A classe NP consiste nos problemas que podem ser verificados em tempo polinomial
(Problemas Intratveis).

fcil entender que a classe NP inclui a classe P, ou seja, que todo problema
polinomial polinomialmente verificvel. O bom senso sugere que P apenas uma pequena
parte de NP. Surpreendentemente, ningum encontrou ainda um problema de NP que no
esteja em P, isto , um problema polinomialmente verificvel para o qual no existe algoritmo
polinomial.
Neste projeto pesquisaremos sobre a classe NP e suas sub-classes, apresentando uma
explicao sobre a classe e um exemplo prtico de problema e sua resoluo.
2 Objetivo:
Pesquisar sobre a classe de algoritmos NP e suas subclasses. Com o estudo, mostrar
possveis solues. E por fim, mostrar um exemplo prtico.
3 Desenvolvimento:
3.1 Classes de algoritmos e suas sub-classes:
3.1.1 Classe NP:
A classe NP consiste dos algoritmos no-determinsticos polinomiais, e recebe este
nome devido a uma formulao equivalente que no usa o conceito de certificao, mas o de
deciso de linguagens. As categorias de linguagens usadas nessa deciso so as reconhecidas
pelas maquinas de Turing. Essa mquina um modelo abstrato de computador, restringida
apenas aos aspectos lgicos de funcionamento.
Problemas NP-completos so os problemas mais difceis no conjunto NP. Um
problema de deciso L NP-Completo se:
1) L est em NP (Qualquer soluo dada para problemas NP-completos podem ser
verificadas rapidamente, mas no h nenhuma soluo eficiente conhecida).
2) Todos os problemas em NP redutvel a L em tempo.
Um problema NP-difcil se segue propriedade 2 mencionada acima, no precisa
seguir propriedade 1. Portanto, o conjunto NP-completo tambm um subconjunto do
conjunto NP-difcil.

3.1.2 Classe P:
A classe P, subconjunto da classe NP, o conjunto de todos os problemas que podem
ser resolvidos por algoritmos determinsticos em tempo polinomial; em outras palavras, a
classe complexa P abrange todas as solues para os problemas que podem ser resolvidos e
so considerados tratveis.
Exemplos de problemas da classe P: ordenao caminhos mais curtos em um grafo;
rvore geradora de peso mnimo; fluxo mximo; programao linear.
3.1.3 NP-Completo:
o subconjunto dos problemas NP de tal modo que todo problema em NP se pode
reduzir, com uma reduo de tempo polinomial, a um dos problemas NP-completo.
Os problemas NP-completos o subconjunto dos "mais difceis" problemas nodeterminsticos polinomiais.
A partir da definio de NP-completos, parece impossvel provar que um problema L
NP-completo. Por definio, isso nos requere mostrar que todos os problemas em NP so
tempos polinomiais redutveis a L. Felizmente, h uma maneira alternativa para provar isso. A

idia pegar um problema NP-completo conhecido e reduzi-la a L. Se a reduo de tempo


polinomial possvel, podemos provar que L NP-completo por transitividade de reduo (Se
um problema NP-completo redutvel a L em tempo polinomial, ento todos os problemas
so redutveis a L em tempo polinomial).
3.1.4 Solues de Problemas NP-completos:
Estratgias possveis:

Escolher o mais eficiente dos algoritmos exponenciais.

Concentrar a escolha na anlise de caso mdio ao invs de pior caso.

Em particular, um estudo dos padres de inputs que ocorrem com mais frequncia
pode levar a escolha de um algoritmo que se comporte melhor para esses inputs.

Escolha pode depender mais de resultados empricos do que de uma anlise


rigorosa.

Estratgia alternativa: Algoritmos de Aproximao.

3.1.5 NP-Difcil:
Est entre o conjunto dos problemas NP, tambm chamado NP-hard ou NP-complexo.
So to difceis quanto os problemas mais difceis em NP e podem ser de qualquer tipo como
de problemas de deciso, problemas de pesquisa ou problemas de otimizao.
Um problema A pertence a classe NP-Difcil se existe um problema B NPCompleto que pode ser transformado em A em tempo polinomial.
3.1.6 Solues de Problemas NP-difceis:

Algoritmos exatos no-polinomiais: programao dinmica; branch-and-bound;


backtracking.

Algoritmos pseudo-polinomiais: polinomiais no tamanho da instncia e no valor


do maior dado da entrada.
Exemplo: problema da mochila.

Processamento paralelo: acelerao na prtica, sem reduo da complexidade.

Casos especiais polinomiais: colorao de grafos de intervalos.

Algoritmos aproximativos: encontram uma soluo vivel com custo a distncia


mxima garantida do timo.
Exemplo: Bin Packing.

Algoritmos probabilsticos: convergncia em valor esperado; convergncia em


probabilidade.

Heursticas: qualquer mtodo aproximado projetado com base nas propriedades


estruturais ou nas caractersticas das solues dos problemas, com complexidade
reduzida em relao dos algoritmos exatos e fornecendo, em geral, solues
viveis de boa qualidade (sem garantia de qualidade).
Exemplos: mtodos construtivos; busca local; metaheursticas.

Avanos no estudo e desenvolvimento de heursticas: resolver problemas maiores;


resolver problemas em tempos menores; obter melhores solues.

3.2 Exemplo prtico de problema: Problema da mochila:


O problema que vamos abordar nesse projeto chamado O Problema da Mochila.
Esse problema se constitui em um problema de otimizao combinatria, do tipo NPcompleto. Sua formulao extremamente simples: um viajante necessita preencher sua
mochila com objetos de diferentes tamanhos e pesos. O objetivo preencher a mochila de
modo que a soma dos valores dos itens seja a maior possvel, porm no se pode ultrapassar o
peso mximo.
Esse problema pode ser aplicado em casos como: investimentos de capital, corte
empacotamento, carreamento de veculos e oramento.

Fonte: http://pt.wikipedia.org/wiki/Ficheiro:Knapsack.svg

Por exemplo: na figura acima temos uma mochila com peso mximo de 15Kg e cinco
itens de peso e valor diferentes. Quais itens devero ser escolhidos para que o valor total seja
o maior possvel respeitando o peso mximo?
Para a soluo desse problema existem vrias formas como: programao dinmica,
algoritmo guloso e meta-heurstica. Porem as duas ltimas citadas so utilizadas para solues
aproximadas. Nesse projeto vamos apresentar uma forma de resoluo que obtm uma
soluo exata, a programao dinmica.
A soluo por programao dinmica utiliza uma forma aprimorada da recursividade
de modo que garante que uma funo no seja executada vrias vezes; assim ocorre a
armazenagem dos dados j calculados, geralmente em uma matriz para que seja evitado
reclculos, possibilitando que estes possam ser usados na resoluo dos problemas seguintes.
Geralmente fazemos o uso de variveis do tipo integer, uma para o nmero de itens
que sero trabalhados, outra para o peso mximo da mochila, e dois vetores, um para
armazenar em casa posio pesos dos itens e outro vetor para os valores. Uma tabela
(quantidades de itens/ peso mximo da mochila) montada. O maior valor possvel sempre
estar na ltima linha e coluna da matriz.
O tempo do algoritmo proporcional ao tamanho da tabela, ou seja, quanto maior o
nmero de itens trabalhados/ou peso mximo da mochila, maior o consumo de tempo do
algoritmo.
3.2.1 Pseudocdigo para a resoluo do Problema da Mochila:
int pesos[]
int valores[]
int tabela_resultados[][]
int itens
int peso_maximo

Para y de 0 at peso_maximo
Tabela_resultados[0][y] = 0
Para i de 1 at itens
A = tabela_resultado[i-1][y]
Se pesos[i] > y
B=0
Seno
B = tabela_resultado[i - 1][y pesos[i]] + valores[i]
Se A > B
Tabela_resultado[i][y] = a
Seno
B = tabela_resultado[i][y] = b
Retorne tabela_resultados[itens][peso_maximo]
4 Concluso:
Pela observao dos aspectos analisados conclumos que algoritmos NP podem possuir
possveis solues caso no sejam algoritmos NP intratveis. Alm de analisar as subclasses
diferentes da classe de algoritmo, observamos o exemplo do Problema da Mochila em que
foi apresentado acima, resolvido por programao dinmica, que mais exata.
5 Referncias bibliogrficas:
Disponvel em: <http://pt.wikipedia.org/wiki/Complexidade_computacional> Acesso em: 18
Maio 2015
Disponvel em: <http://www.dm.ufscar.br/hp/hp501/hp501001/hp501001.html> Acesso em:
18 Maio 2015
Disponvel em: <http://pt.wikipedia.org/wiki/M%C3%A1quina_de_Turing> Acesso em: 18
Maio 2015
Disponvel em: <http://www.ime.usp.br/~pf/analise_de_algoritmos/aulas/NPcompleto.html>
Acesso em: 18 Maio 2015
Disponvel em: < http://pt.slideshare.net/OnOSJunior/trabalho-pnp > Acesso em: 18 Maio
2015

Disponvel em: <http://www.geeksforgeeks.org/np-completeness-set-1/> Acesso em: 19 Maio


2015
Disponvel em: <http://pt.wikipedia.org/wiki/NP-completo> Acesso em: 19 Maio 2015
Disponvel em: <http://www.ufjf.br/eduardo_barrere/files/2013/03/APA_2013_aula5.pdf>
Acesso em: 19 Maio 2015
Disponvel em: <http://www.inf.ufrgs.br/~prestes/Courses/Complexity/aula27.pdf> Acesso
em: 19 Maio 2015
Disponvel em:
<http://professor.ufabc.edu.br/~leticia.bueno/classes/aa/materiais/complexidade.pdf>
Acesso em: 19 Maio 2015
Disponvel em: <www-di.inf.puc-rio.br/~celso/grupo/metaheuristicasPUC-ebc98.ppt> Acesso
em: 19 Maio 2015
Disponvel em: <https://www.youtube.com/watch?v=gSiBvA6am9Y> Acesso em: 20 Maio
2015
Disponvel em: < http://pt.wikipedia.org/wiki/Problema_da_mochila> Acesso em: 20 Maio
2015

You might also like