Você está na página 1de 10

UNIVERSIDADE ESTADUAL DE MARING

DEPARTAMENTO DE INFORMTICA

GUSTAVO HENRIQUE APOLONI AGUERA
LAILSON MIRANDA TOFANELLI














TEORIA DA COMPLEXIDADE








MARING
2013



Introduo
A maior parte dos problemas computacionais pode ser resolvida com
algoritmos polinomiais, ou seja, o pior caso de um algoritmo desta natureza ainda
solucionvel computacionalmente. Os algoritmos que solucionam o problema do
quadrado perfeito, de uma equao de segundo grau ou do caminho mais curto em um
grafo pertencem a essa categoria.
Algoritmos intratveis so aqueles cujo tempo no polinomial. Solues para
problemas deste tipo so dificilmente encontradas em tempo hbil. Todavia, a soluo
pode existir e no ser polinomial. Neste caso, o problema classificado como no
polinomial.
O tempo polinomial de uma soluo indica se o problema pode ser resolvido
em tempo til, ou seja, se um computador qualquer pode tratar o problema e encontrar
sua soluo. Problemas no polinomiais, em geral, necessitam que supercomputadores
sejam utilizados para que suas instncias sejam resolvidas. Embora uma soluo tima
possa ser encontrada, o tempo para consegui-la pode ser inestimvel.
Reduo do tempo polinomial
Problemas de Deciso so aqueles que podem ser respondidos com sim ou no.
Esta definio simplifica bastante todo o restante da teoria. Muitos problemas podem
ser facilmente convertidos em problemas de deciso. Por exemplo, ao invs de procurar
pelo tamanho mximo em um dado grfico, questiona-se a existncia de um valor > k.
Resolvendo-se o problema de deciso, pode-se resolver o problema original.
Um problema de deciso pode ser visto como um problema de reconhecimento de
linguagem. Considere U come sendo o conjunto de todas as possveis entradas para um
problema de deciso. Considere L U como sendo o conjunto de todas as entradas cuja
resposta sim. Ns chamaremos L de linguagem correspondente ao problema.
Partiremos agora para a definio de reduo do tempo polinomial.
Definio: Considere L1 e L2 como sendo duas linguagens pertencentes a U1 e
U2. Diremos que L1 redutvel polinomialmente a L2 se existe um algoritmo de tempo

polinomial que converte cada entrada U1 U1 a outra entrada U2 U2 tal que U1 U1 se
e somente se U2 L2.
O algoritmo mencionado na definio converte um problema em outro. Tm-se
um algoritmo para L2, ento podemos compor dois algoritmos para produzir um
algoritmo para L1. Denote o algoritmo de converso por AC, e denote o algoritmo para
L2 por AL2. Dada uma entrada arbitrria U1 U1 ns podemos usar AC para converter
u1 a uma entrada U2 U2; Ento usaremos AL2 para determinar se u2 pertence a L2,
isso nos dir se u1 pertence a L1. Particularizando, temos os seguintes teoremas:
Teorema 1.1
Se L1 redutvel polinomialmente a L2 e existe um algoritmo de tempo
polinomial para L2, ento teremos um algoritmo de tempo polinomial para L1.
Teorema 1.2
Se L1 redutvel polinomialmente a L2 e L2 redutvel polinomialmente a L3, ento
L1 redutvel polinomialmente a L3. A essncia do mtodo apresentado at o
momento procurar por algoritmos equivalentes quando um algoritmo eficiente no
pode ser encontrado.
Classes P e NP
Def. Um algoritmo A polinomialmente limitado se a sua complexidade tempo pior-
caso, WA(n) _ p(n) para algum polinmio p.
Def. Um problema de deciso dito pertencer classe P se existe um algoritmo
limitado polinomialmente que o soluciona.
Nota os algoritmos vistos na disciplina para ordenao, busca, reconhecimento de
padres, multiplicao de matrizes, FFT, etc., exceto empacotamento em caixas, so
limitados polinomialmente.
Dessa forma todos eles, exceto empacotamento em caixas, pertencem classe P.

Intuitivamente NP a classe de problemas, cujas solues podem ser verificadas em
tempo limitado polinomialmente.

Def. Um algoritmo de deciso no determinstico consiste de duas fases.

Fase no determinstica: escreve-se uma palavra aleatria s em algum local da memria.
Fase determinstica: executa-se um algoritmo determinstico sobre a entrada e s. O
algoritmo para com resposta sim ou no.
O nmero de passos de um algoritmo no determinstico a suma de passos nas suas
duas fases.
A sada de um algoritmo no determinstico

sim se para alguma execuo a sada e sim, e.
no se para nenhuma execuo a sada sim.

Algoritmos no determinsticos e NP
Exemplo (Colorao de Grafos) Dado um dgrafo

G = ({v1, . . . , vn}, E) e k 2 N.

Fase no determinstica: chute uma sequncia aleatria
Cl1 , . . . , Cln
de comprimento n sobre o alfabeto {C1, . . . , Ck}.
Fase determinstica:
k-colorvel = true
FOR i = 1 to n 1 DO
FOR j = i + 1 TO n DO
IF (vi , vj ) 2 E AND Cli = Clj THEN
k-colorvel false;
EXIT;
RETURN k-colorvel

NP a classe de problemas de deciso para os quais existe um algoritmo no
determinstico limitado polinomialmente.

Classes de Problemas P
Definio: a classe de complexidade P o conjunto de todos os problemas de
deciso (ou linguagens) que aceitam o tempo polinomial no pior caso. Isto , existe um

algoritmo A que, se x L, ento ao inputar x, A tem como resultado sim em um tempo
p(n), onde n o tamanho de x e p(n) polinomial. Note que a definio de P no diz
nada a respeito sobre o tempo de execuo de uma rejeio da entrada de dados, ou seja,
quando o algoritmo tem como soluo no. Alguns casos se referem ao complemento
da linguagem L, que consiste de todas as strings binrias que no esto em L.
Dado um algoritmo A que aceite a linguagem L em tempo polinomial, p(n),
pode-se construir um algoritmo de tempo polinomial que aceite o complemento de L.
Em particular, dada uma entrada de dados x, pode-se construir um algoritmo
complemento B que simplesmente executa A em p(n) passos, onde n o tamanho de x,
terminando sua execuo se A tentar executar mais de p(n) passos. Se A tiver como
soluo sim ento B tem como soluo no; se A tem como soluo no ou se A
executar ao mnimo p(n) passos sem nenhuma soluo, ento B tem como soluo
sim. Nos dois casos, o algoritmo complemento B executado em tempo polinomial.
Isso significa que, se uma linguagem L, representando um problema de deciso est em
P, ento o complemento de L tambm est em P. O algoritmo da eliminao de Gauss,
ou mtodo do escalonamento, usado para resolver sistemas lineares, um procedimento
da classe P. De fato, para resolver um sistema linear nn so necessrias (4n3+9n2-
7n)/6 operaes aritmticas, um custo aproximado de n3.
Por outro lado, o mtodo de Cramer, tambm utilizado para resolver sistemas
lineares, tem custo exponencial. Para um sistema linear nn esse mtodo executa
aproximadamente (n+1)!(e-1) multiplicaes. Para se ter uma idia desse custo, se for
usado um computador que realiza 100 milhes de multiplicaes por segundo, para
resolver um sistema linear 2020 seriam necessrios mais de 30000 anos.

Classes de Problemas NP
Os problemas NP no se referem a problemas no polinomiais (na verdade isto
uma conjectura). A leitura correta para procedimentos NP dizer que se referem a
problemas "no-determinsticos polinomiais" no tempo.
No incio dos anos sessenta foram encontrados muitos algoritmos que resistiam
a uma simplificao polinomial, isto , algoritmos que no admitiam procedimentos
anlogos na classe P. Nesta poca Steve Cook observou um fato simples e ao mesmo
tempo surpreendente: se um problema pudesse ser resolvido em tempo polinomial,

poderia-se tambm verificar se uma dada possvel soluo correta em tempo
polinomial (dize-se que o algoritmo pode ser certificado em tempo polinomial).
Um exemplo simples de como esta certificao pode ser feita o problema de
descobrir se um dado nmero composto, ou seja, se ele no primo. Suponha que se
queira descobrir se 4294967297 um nmero composto. No existe uma maneira
eficiente (rpida) de fazer isto. De fato tal tarefa pode ser realizada pela utilizao do
crivo de Eratstenes, testando os possveis divisores do nmero, o que pode demandar
um tempo excessivo de computao. Entretanto existe uma maneira sucinta de certificar
que aquele nmero composto: basta verificar que o produto de 6700417 por 641
exatamente 4294967297. Assim, se puder achar uma certificao, pode-se exibir
efetivamente sua validade. Ach-la pode ser extremamente difcil, no entanto. A
fatorao de 4294967297 foi encontrada por Leonard Euler em 1732, noventa e dois
anos aps Pierre de Fermat ter conjeturado erroneamente que tal nmero era primo.
Definio: A classe dos problemas NP aquela para as quais se pode verificar,
em tempo polinomial, se uma possvel soluo correta.
Evidentemente P C NP. De fato, se um algoritmo pode ser executado em tempo
polinomial e tiver em mos um possvel candidato S soluo, possvel executar o
programa, obter uma soluo correta C e comparar C com S para certificar que S de
fato soluo, tudo em tempo polinomial.
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. A categoria de linguagens a que refere-se so as
reconhecidas por computadores tericos chamados de Mquinas de Turing. Tais
mquinas parecem capturar completamente o sentido do termo computao.
Uma mquina de Turing pode ser pensada como uma fita infinita de papel,
dividida em pequenas casas, e um lpis/borracha especial que pode seguir instrues.
Essas instrues so bastante simples: o lpis pode ler um smbolo na fita e, analisando-
o, pode apag-lo e escrever por cima do smbolo lido e, mudando de estado, pode se
mover para a direita ou para a esquerda para analisar um novo smbolo, ou
simplesmente parar.




NP-DIFCIL

NP-difcil (ou NP-hard, ou NP-complexo) na teoria da complexidade
computacional, uma classe de problemas que so, informalmente, "Pelo menos to
difceis quanto os problemas mais difceis em NP". Um problema H NP-difcil se e
somente se, existe um problema NP-completo L que Turing-redutvel em tempo
polinomial para H (i.e., L?=?TH). Em outras palavras, L pode ser resolvido em tempo
polinomial por uma Mquina de Turing No Determinstica com um orculo para H.
Informalmente, podemos pensar em um algoritmo que pode chamar tal Mquina de
Turing No-Determinstica como uma sub-rotina para resolver H, e resolver L em
tempo polinomial, se a chamada da sub-rotina leva apenas um passo para computar.
Problemas NP-difceis podem ser de qualquer tipo: problemas de deciso, problemas de
pesquisa ou problemas de otimizao.

NP-COMPLETO

Na teoria da complexidade computacional, a classe de complexidade NP-
completo o subconjunto dos problemas de deciso em NP de tal modo que todo
problema em NP se pode reduzir, com uma reduo de tempo polinomial, a um dos
problemas NP-completo. Pode-se dizer que os problemas de NP-completo so os
problemas mais difceis de NP e muito provavelmente no formem parte da classe de
complexidade P. A razo que se se conseguisse encontrar uma maneira de resolver
qualquer problema NP-completo rapidamente (em tempo polinomial) , ento poderiam
ser utilizados algoritmos para resolver todos problemas NP rapidamente. Como
exemplo de um problema NP-completo est o problema da soma dos subconjuntos que
pode ser enunciado conforme segue: dado um conjunto S de inteiros, determine se h
algum conjunto no vazio de S cujos elementos somem zero. fcil de verificar se uma
resposta correta, mas no se conhece uma soluo significativamente mais rpida para
resolver este problema do que testar todos os subconjuntos possveis, at encontrar um
que cumpra com a condio. Na prtica, o conhecimento de NP-completude pode evitar
que se desperdice tempo tentando encontrar um algoritmo de tempo polinomial para
resolver um problema quando esse algoritmo no existe
Um problema de deciso NP-completo se:

1- C est em NP, e
2- Todo problema em NP redutvel para em tempo polinomial.

C pode ser mostrado que pertence NP demostrando que uma soluo candidata para
pode ser verificada em tempo polinomial.
Note que um problema que satisfaz a condio 2 dito ser NP-difcil, se
satisfizer a condio 1 ou no.
Uma consequncia dessa definio que se tivssemos um algoritmo de tempo
polinomial para C, podamos resolver todos os problemas NP em tempo polinomial.
-NP-difcil
To difceis quanto os problemas mais difceis em NP. Tais problemas no
precisam estar em NP, na verdade, eles no podem sequer ser problemas de
deciso.
-NP-completo
Estes so os problemas mais difceis em NP. Tais problemas so NP-difceis e
em NP.
-NP-fcil
Na maioria to difceis quanto NP, mas no necessariamente em NP, uma vez
que podem no ser problemas de deciso.
-NP-equivalente
Exatamente to difcil quanto os problemas mais difceis em NP, mas no
necessariamente em NP.

PROBLEMAS P E NP

Diviso dos problemas:
Problemas Fceis so resolvidos por algoritmos polinomiais
Problemas Difceis somente possuem algoritmos exponenciais para resolvlos.
PROBLEMAS FAMOSOS
Algoritmos Polinomiais: funo de complexidade O(p(n)), onde p(n) um
polinmio.
Exemplos:

1- Algoritmos com pesquisa binria (O(log n));

2- Pesquisa seqencial (O(n));
3- Ordenao por insero (O(n2));
4- Multiplicao de matrizes (O(n3)).
Algoritmos exponenciais: funo de complexidade O(cn), c > 1.
Exemplos:
1- Problema do caixeiro viajante (O(n!));
2- Torres de Hani (O(2n)).


TCNICAS PARA TRATAR COM
PROBLEMAS NP-COMPLETOS

Ns (muito provavelmente) no poderemos resolver um problema NP-completo precisa
e completamente com um algoritmo de tempo polinomial.
Consequncia: Assumir um compromisso entre: otimalidade, robustez, eficincia
garantida e completude da soluo.

Algoritmos de aproximao
Algoritmos probabilsticos
Tempo de execuo do caso mdio
Completude do algoritmo
(cobertura de vrtices pode ser resolvido para grafos bipartidos)
Algoritmos exponenciais que trabalham bem para pequenas entra-
das e que podem ser suficientes para o que se deseja. (backtracking)











Referncias
CORMEN, Thomas et al. Algoritmos: teoria e prtica. Rio de Janeiro: Elsevier, 2002.
cap. 34.
COOK, Stephen A. The Complexity of Theorem-Proving Procedures. University of
Toronto Papers, Canad, 1971.
TOSCANI, Laria V.; VELOSO, Paulo S. Complexidade de Algorimos. Sagra-
Luzzato, 2005.
http://www.ic.unicamp.br/~meidanis/courses/mo417/2003s1/aulas/2003-06-18.html >