Caro Crom,
 
---------------------------------------------------------------------------
 
    Existem problemas de decis�o bem definidos que n�o podem ser resolvidos por 
algoritmos. Podemos, portanto, classificar todos os problemas computacionais em duas 
categorias: aqueles que podem ser resolvidos por algoritmos e aqueles que n�o podem. 
Com os grandes avan�os da tecnologia da computa��o das �ltimas d�cadas, � razo�vel 
esperar que todos os problemas do primeiro tipo possam ser resolvidos de uma maneira 
satisfat�ria. Infelizmente, a pr�tica da computa��o revela que muitos problemas, 
apesar de sol�veis a princ�pio, n�o podem ser resolvidos em qualquer sentido pr�tico 
por computadores devido �s excessiva exig�ncias de tempo.
 
    Suponha, por exemplo, que sua tarefa � escalonar a visita de um caixeiro viajante 
a 10 escrit�rios regionais. Voc� recebe um mapa com as 10 cidades e as dist�ncias em 
kil�metros e lhe pedem para produzir um intiner�rio que minimiza a dist�ncia total 
percorrida. Esse �, claramente, o tipo de tarefa em que voc� utilizaria um computador 
para resolver. E, de um ponto de vista te�rico, o problema � certamente sol�vel. Se h� 
n cidades para visitar, o n�mero de itiner�rios poss�veis � finito - para ser presciso 
(n-1)!. Portanto, pode-se facilmente conceder um algoritmo que sistematicamente 
examina todos os intiner�rios a fim de localizar o mais curto.
 
    Mas ainda h� um mal-estar com rela��o a esse algoritmo. H� muitas viagens a serem 
examinadas. Para nosso modesto problema de 10 cidades, ter�amos de examinar 9! = 
362.880 itinar�rios. Com alguma paci�ncia, isso pode ser realizado por um computador, 
mas e se tiv�ssemos 40 cidades a visitar? O n�mero de itiner�rios seria agora 
gigantesco: 39!, o que � mais que 10^45. Mesmo que pud�ssemos examinar 10^15 viagens 
por segundo - um passo que � muito r�pido mesmo para o mais poderoso supercomputador 
existente ou projetado - o tempo exigido para completar esse c�lculo seria v�rios 
bilh�es de ciclo de vida do universo!
 
    Evidentemente, o fato de um problema ser sol�vel na teoria n�o imediatamente 
implica que ele possa ser resolvido de maneira realista na pr�tica. A quest�o �: quais 
algoritmos devemos considerar como praticamente vi�vel?
 
    Como o exemplo do PROBLEMA DO CAIXEIRO VIAJANTE revela, o par�metro limitador � o 
tempo ou n�mero de passos exigidos pelo algoritmo em um entrada. O algoritmo (n-1)! 
para o problema do caixeiro viajante foi demasiado irreal simplemente por causa do 
excessivo crescimento exponencial de suas exig�ncias de tempo (� f�cil ver que a 
fun��o (n-1)! cresce ainda mais r�pido que 2^n). Em contraste, um algoritmo com uma 
taxa de crescimento polinomial seria obviamente muito mais atraente.
 
    Parece que, a fim de capturar a no��o de "algotitmo praticamente vi�vel", devemos 
limitar nossos dispositivos computacionais para somente executar um n�mero de passo 
que � limitado por um polin�mio no comprimento de entrada [da� a import�ncia da 
descoberta dos cientistas da Computa��o indianos]. A classe de todas as linguagens 
polinomialmente decid�veis � denotada por P [P do ingl�s polinomial] e a classe de 
todas as linguagens que n�o pertecem a P � denotada por NP [NP do ingl�s 
no-polinomial]. Isso justifica o t�tulo do artigo dos cientistas: PRIMES IN P.
 
    Em que medida a classe P captura a no��o intuitiva de "problema satisfatoriamente 
vi�vel"? Com que amplitude se aceita a tese de que algoritmos polinomiais s�o 
precisamente ou empiricamente vi�veis? � razo�vel dizer que, embora seja a �nica 
proposta s�ria nessa �rea, ela pode ser desafiada em v�rios terrenos. Por exemplo, 
pode-se argumentar que um algoritmo com exig�ncias de tempo n^100 ou mesmo 
(10^100)n^2, n�o � "praticamente vi�vel", embora tenha um tempo polinomial. Al�m 
disso, um algoritmo com exig�ncias de tempo n^(log(log(n)) pode ser considerado 
perfeitamente vi�vel na pr�tica, a despeito do fato de que seu crescimento n�o � 
limitado por qualquer polin�mio. O argumento emp�rico em defesa de nossa tese � que 
tais limites extremos de tempo, embora teoricamente poss�veis, raramente ocorrem na 
pr�tica: algoritmos polinomiais, que surgem em pr�ticas computacionais, geralmente t�m 
pequenos expoentes e coeficientes costantes agrad�veis, enquanto algoritmos n�o 
polinomiais s�o em geral exponenciais e, portanto, de utliza��o bastante limitada na 
pr�tica.
 
    De acordo com o documento "Primes in P", os autores apresentam um algoritmo que 
decide se um dado n�mero n � primo ou composto [dei uma lida r�pida] com uma 
complexidade computacional O([log(n)]^6), podendo futuramente chegar a O([log(n)]^3), 
desde que se prove a conjectura de Bhattacharjee-Pandey.
 
---------------------------------------------------------------------------
 
Notas: 
 
     1) Este texto acima foi, essencialmente, retirado do cap�tulo 6, se��es 6.1 e 
6.2, do livro ELEMENTOS DE TEORIA DA COMPUTA��O [Trad. Edson Furmankiewicz] de Harry 
R. Lewis e Christos H. Papadimitriou, 2� Edi��o, Bookman, Porto Alegre, 2000. 
 
     2) Os acr�scimos e as supress�es por mim feitas objetivaram apenas tornar a 
leitura mais adequada aos prop�sitos da mensagem.
 
     3) Citem sempre a refer�ncia, qualquer que seja o texto. Respeitem os direitos 
autorais.
 
---------------------------------------------------------------------------
 
Obrigado,
Edilon Ribeiro   
 
        

        -----Mensagem original----- 
        De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] 
        Enviada: dom 25/8/2002 15:15 
        Para: [EMAIL PROTECTED] 
        Cc: 
        Assunto: Re: [obm-l] Numeros primos - solu��o
        
        
        O que significa: " Em tempo polinomial ", como foi citado no texto sobre a 
f�rmula dos matem�ticos hindus, para numeros primos????
                  Um abra�o 
                      Crom 

Attachment: winmail.dat
Description: application/ms-tnef

Responder a