12

Click here to load reader

Classes de Problemas P e NP

Embed Size (px)

DESCRIPTION

Classes de Problemas P e NP

Citation preview

Page 1: Classes de Problemas P e NP

CENTRO UNIVERSITÁRIO DA FEI

ORLANDO DA SILVA JUNIOR

CLASSES DE PROBLEMAS P E NP

São Bernardo do Campo

2010

Page 2: Classes de Problemas P e NP

SUMÁRIO

1 INTRODUÇÃO ..................................................................................................................... 3

2 TEMPO POLINOMIAL ....................................................................................................... 4

2.1 Algoritmos determinísticos .................................................................................................. 4

2.2 Algoritmos não-determinísticos ........................................................................................... 5

2.3 Abstração .............................................................................................................................. 5

3 PROBLEMAS POLINOMIAIS ........................................................................................... 6

3.1 Averiguação de um problema polinomial ............................................................................ 6

3.2 Classe de problemas complexos P ........................................................................................ 6

4 PROBLEMAS NÃO-POLINOMIAIS ................................................................................. 8

4.1 Problemas NP-Completos .................................................................................................... 8

4.2 Demonstração pelo teorema de Cook ................................................................................. 10

REFERÊNCIAS ....................................................................................................................... 9

Page 3: Classes de Problemas P e NP

3

1 INTRODUÇÃO

A maior parte dos problemas computacionais podem ser resolvidos com

algoritmos polinomiais, ou seja, o pior caso de um algoritmo desta natureza ainda é

solucionável computacionalmente. Os algoritmos que solucionam o problema do

quadrado perfeito, de uma equação de segundo grau ou do caminho mais curto em um

grafo pertencem a essa categoria.

Algoritmos intratáveis são aqueles cujo tempo não é polinomial. Soluções para

problemas deste tipo são dificilmente encontradas em tempo hábil. Todavia, a solução

pode existir e não ser polinomial. Neste caso, o problema é classificado como não-

polinomial.

O tempo polinomial de uma solução indica se o problema pode ser resolvido em

tempo útil, ou seja, se um computador qualquer pode tratar o problema e encontrar sua

solução. Problemas não-polinomiais, em geral, necessitam que supercomputadores

sejam utilizados para que suas instâncias sejam resolvidas. Embora uma solução ótima

possa ser encontrada, o tempo para consegui-la pode ser inestimável.

Page 4: Classes de Problemas P e NP

4

2 TEMPO POLINOMIAL

A discussão de problemas das classes P e NP envolve também a discussão do

tempo polinomial da solução do problema. É consenso entre os pesquisadores dizer que

qualquer solução de difícil problema pode ser encontrada. Até mesmo mais de uma

solução. Todavia, todos os problemas estudados na classe NP não possuem tempo

polinomial satisfatório, o que dificulta encontrar, na prática, a solução para o problema

estudado.

Três argumentos sustentam a controvérsia de que problemas NP podem ser

considerados tratáveis (CORMEN et al, 2002):

Não existem problemas de tão alto grau. Embora problemas de alto grau

sejam considerados, não são conhecidos problemas cujas soluções atinjam

tão alto grau que não possam ser resolvidos computacionalmente. Ademais,

alto grau de tempo polinomial indica que um tempo polinomial menor pode

ser encontrado;

O mesmo tempo polinomial pode ser utilizado em diversas classes de

problemas. Dado um problema qualquer com um tempo polinomial

satisfatório, esse mesmo tempo pode ser utilizado como resolução de outro

problema qualquer em um computador distinto;

Os problemas polinomiais fecham-se em operações matemáticas básicas.

Alguns algoritmos tem propriedades de fechamento que utilizam operações

de soma, subtração, multiplicação, divisão ou composição para encontrar a

solução trivial do problema.

2.1 Algoritmos polinomiais determinísticos

No modelo formal algorítmico, a eficiência de um algoritmo é uma função de

um numero de bits utilizados para codificar a entrada utilizando um razoável esquema

de codificação (SEDGEWICK, 1990).

Por determinístico entende-se o tempo que o algoritmo leva para ser

solucionado. Neste caso, o algoritmo deve ser solucionado necessariamente, e não

apenas hipoteticamente, sendo especializado a arquiteturas de hardware.

Algoritmos polinomiais determinísticos pertencem à classe P de complexidade

de algoritmos. A classe P é o conjunto de todos os problemas que podem ser resolvidos

Page 5: Classes de Problemas P e NP

5

por algoritmos determinísticos em tempo polinomial; em outras palavras, a classe

complexa P abrange todas as soluções para os problemas que podem ser resolvidos e

são considerados tratáveis, conforme a definição do capítulo 1.

2.2. Algoritmos polinomiais não-determinísticos

Em oposição à definição de determinístico, por algoritmo não-determinístico

entende-se o conjunto de soluções distintas segundo uma mesma entrada. Em outras

palavras, um algoritmo não-determinístico possui diversas soluções para um mesmo

problema; todavia, não é possível conhecer previamente o resultado que será fornecido

pela aplicação do algoritmo.

Os algoritmos não-determinísticos pertencem à classe NP de problemas

algoritmicamente complexos. A classe NP é o conjunto de todos os problemas que

podem ser resolvidos por um algoritmo não-determinístico em tempo polinomial

(SEDGEWICK, 1990).

2.3 Abstração

Para o propósito de compreender como funcionam os problemas de classes P e

NP, convém definir o que é um problema.

Um problema abstrato (CORMEN et al., 2002) é uma relação binária sobre um

conjunto de instâncias de problemas e um conjunto de soluções de problemas. Como

esta definição está restrita a problemas de decisão, estes podem ser vistos como

problemas abstratos que têm a função de mapear o conjunto das instâncias para o

conjunto de soluções, denotando em cada solução particular o seu caráter de

solubilidade.

O algoritmo do menor caminho em um grafo resolve um problema de decisão:

dado um grafo não-orientado com mais de dois vértices, deseja-se encontrar o caminho

de um vértice ao outro que percorra a menor quantidade de arestas. Embora seja

também um problema de otimização, o algoritmo do menor caminho averigua se tal

caminho que conecta dois vértices, de fato, existe. Este, pois, é o caráter que o define

como também sendo um problema de decisão.

Page 6: Classes de Problemas P e NP

6

3 PROBLEMAS POLINOMIAIS

Problemas polinomiais são aqueles que podem ser solucionados em tempo

polinomial. Um algoritmo que resolve um dado problema é polinomial se o seu

consumo de tempo é limitado por uma função polinomial dos tamanhos das instâncias

do problema (FEOFILOFF, 2010).

3.1 Averiguação de um problema polinomial

Dada a definição acima, pode-se dizer que um algoritmo de tempo polinomial é

definido por suas entradas. Matematicamente, um algoritmo polinomial é assim

definido onde seu tempo é O(p(n)), onde p é alguma função polinomial e n é o tamanho

da entrada. Qualquer algoritmo cuja função de complexidade de tempo pode não ser tão

limitada é chamado de algoritmo de tempo exponencial. (GAREY; JOHNSON, 1979).

Através da máquina de Turing, foi possível dizer com maior precisão o que é um

algoritmo e como o problema resolvido por esse algoritmo é considerado computável. É

cientificamente válido dizer que um problema é computável se é resolvido pela máquina

de Turing. Satisfeita essa condição, anos depois da descoberta da existência de tal

máquina, necessitou-se saber o quão eficiente um algoritmo o é.

Sabe-se que um algoritmo deve ser computável e eficiente. Segundo as

definições apresentadas até agora, pode-se dizer que um algoritmo é eficiente se é

também polinomial (TOSCANI; VELOSO, 2002).

Todavia, para expressar a eficiência de um algoritmo, é computacionalmente

válido se utilizar de uma linguagem que verifique o algoritmo, que, por sua vez,

também é um algoritmo. Esse algoritmo que verifica a linguagem é chamado de

algoritmo de verificação.

3.2 Classe de problemas complexos P

Identificar problemas de caráter polinomial é mais simples que caracterizar um

que não seja. Um algoritmo que cresce a O(n300

) é considerado polinomial, já que sua

função não pertence ao conjunto de funções exponenciais. Embora o tempo apresentado

como exemplo possa parecer enorme quando comparado com outros algoritmos cujo

tempo é bastante inferior, uma função que possua essa taxa de crescimento, em termos

Page 7: Classes de Problemas P e NP

7

algorítmicos, é classificada como tendo tempo polinomial aceitável. Todavida,

dificilmente existirá na prática um algoritmo que implemente uma solução em O(n300

).

A maior parte dos algoritmos existentes pertencem à classe P, como o HeapSort

e o QuickSort, que possuem Θ(nlog2n), e o BubbleSort, que possui complexidade

temporal O(n2). É possível demonstrar facilmente que esses algoritmos fazem parte da

classe P através de suas notações assintóticas.

Page 8: Classes de Problemas P e NP

8

4 PROBLEMAS NÃO-POLINOMIAIS

Conforme descrito no capítulo 2.2, problemas polinomiais pertencem à classe de

complexidade NP e estão relacionados a algoritmos que podem ser verificados em

tempo polinomial. Neste caso, o tempo polinomial é não-determinístico, fazendo revés

com os algoritmos mais comuns e utilizados, que são determinísticos. Mais

especificamente, a classe NP é a classe de linguagens que podem ser verificadas (cf.

cap. 3.1) em tempo polinomial.

A relação entre P e NP é um problema ainda em aberto na ciência da

computação. Embora se saiba que P ⊆ NP, a maioria dos pesquisadores desacredita que

P = NP.

A primeira relação é explicada da seguinte forma: dada uma linguagem L que

pertence a NP quando existe um algoritmo de tempo polinomial de duas entradas A e

uma constante c, é possível conhecer um algoritmo de verificação de dois argumentos

que ignore todo e qualquer certificado e aceite as cadeias de entrada contidas em L

(CORMEN et al., 2002).

A segunda relação apresentada é bastante divergente na ciência da computação.

Por muitos pesquisadores acreditarem mais que P ≠ NP do que P = NP, uma outra classe

de problemas passou a ser estudada, a classe de linguagens NP-Completas.

4.1 Problemas NP-Completos

Alguns autores afirmam que a classe NP-Completo de algoritmos tem uma

propriedade bastante interessante intrínseca a ela (CORMEN et al., 2002 e TOSCANI;

VELOSO, 2002), a confirmar a existência de um tempo polinomial para qualquer

problema da classe NP. Em outras palavras, P = NP.

Page 9: Classes de Problemas P e NP

9

Figura 1 - Relação de conjuntos entre a complexidade dos problemas

É comum, no processo de solução de um problema a, reduzi-lo a outro problema

b. Isto significa que dada uma instância de a, deve-se construir uma instância de b, tal

que a solução da instância de a determine a solução da instância de b correspondente.

As reduções deste tipo que preservam a complexidade polinomial são chamadas de

reduções polinomiais.

Para que ocorra a redução polinomial de uma linguagem L1 para uma linguagem

L2, há uma função f que satisfaz as seguintes condições:

Existe um programa para a máquina determinística de Turing de

complexidade polinomial que computa f;

Para todo x pertencente ao conjunto de instâncias de L1, x também

pertence a L1 de modo que f(x) pertença a L2.

Se existe uma redução polinomial de L1 em L2, diz-se que L1 é redutível a L2.

Page 10: Classes de Problemas P e NP

10

Figura 2 - Modelo gráfico da máquina de Turing

4.2 Demonstração pelo Teorema de Cook

O primeiro problema a ser considerado NP-Completo foi provado pelo cientista

americano Stephen Cook, em 1971. Cook deu uma prova do que é satisfatoriamente

algo NP-Completo ao dizer que se existe um algoritmo de tempo polinomial que

satisfaça as condições em NP-Completo, então todos os problemas em NP podem ser

solucionados em tempo polinomial (COOK, 1971).

Para demonstrar a complexidade do tipo NP-Completo, Cook demonstra, através

de um modelo da máquina de Turing, que é possível resolver qualquer problema em

NP. Por uma demonstração totalmente matemática, o cientista adicionou o não-

determinismo à máquina a fim de que ela pudesse solucionar qualquer problema em NP.

Em seguida, definiu todas as características que a máquina deveria ter para que

resolvesse os problemas. A maneira como a máquina executaria as instruções também

foi colocada à prova no artigo, já que a solubilidade do problema estaria descrita em

fórmulas matemáticas. Cook finaliza sua demonstração afirmando que a solução para a

satisfabilidade (SAT – Boolean Satisfiability Problem) do problema corresponderia

essencialmente à simulação da máquina em execução.

Page 11: Classes de Problemas P e NP

11

A solução gerada pela máquina cria uma instância do problema (cf. cap. 4.1),

tornando-o, assim, característico da classe de complexidade NP-Completo, conforme a

definição.

Page 12: Classes de Problemas P e NP

12

REFERÊNCIAS

FEOFILOFF, Paulo. Introdução informal à complexidade de problemas. In: Análise de

Algoritmos. Disponível em: <http://www.ime.usp.br/~pf/algoritmos/aulas/hpsrt.html>.

Acesso em: 16 mai 2010.

COOK, Stephen A. The Complexity of Theorem-Proving Procedures. University of

Toronto Papers, Canadá, 1971.

CORMEN, Thomas et al. Algoritmos: teoria e prática. Rio de Janeiro: Elsevier, 2002.

cap. 34.

GAREY, M. R.; JOHNSON, D. Computers and Intractability - A Guide to the

Theory of NP-Completeness. USA: W. H. Freeman, 1979.

SEDGEWICK, Robert. Algorithms in C. USA: Addison-Wesley, 1990.

TOSCANI, Laira V.; VELOSO, Paulo A. S. Complexidade de Algoritmos: análise,

projeto e métodos. Porto Alegre: Editora Sagra Luzzatto, 2002. cap. 6. pag. 171-195.