Trabalho 04
Trabalho 04
Trabalho 04
INTRODUO CINCIA DA
COMPUTAO - COM06850- 2012-II
CINCIA DA COMPUTAO
GRUPO 5
Teoria da Computao
Primeiro, apresentaremos uma linguagem que chamamos linguagem
simples, a fim demostrar que o numero mnimo de instrues necessrias para
resolver qualquer problema solvel por um computador trs. Segundo,
explicaremos que outra ferramenta, chamada maquina de Turing tambm pode
resolver um problema que pode ser resolvido por nossa linguagem simples.
Terceiro, provaremos que nenhum programa pode informar se o outro para ou no
(se o programa termina ou ira executar para sempre), e essa terceira prova, mostra
por si prpria que existem problemas que no podem ser solucionado por um
computador.
- As linguagens simples:
Nessa linguagem o nico tipo de dados utilizado so nmeros inteiros no
negativos para poder demonstrar algumas ideias da teoria da computao.
Definimos linguagens do computador apenas com trs instrues:
Instruo de incremento: Aumentar de 1 o valor de certa varivel.
Imagine que um programa trabalhe com uma varivel denominada X e que se
deseje aumentar de 1 o valor dessa varivel ou seja incr(x): X = X + 1;
Instruo de decremento: Esta operao o inverso daquela
denominada incremento. Trata-se de retirar 1 do valor de uma varivel. Ento, de
modo anlogo operao de incremento tem-se decr(x): X = X - 1
Instruo de lao: Trata-se de uma tcnica que permite repetir as
mesmas instrues vrias vezes ate alcanar o valor desejado da varivel.
- A importncia da linguagem simples
Embora no seja to eficiente quanto outras linguagens sofisticadas, to
importante quanto, pois a partir dela possvel simular instrues que so
encontradas em algumas linguagens populares com apenas as trs instrues da
linguagem simples.
MACRO
[argumentos]
corpo
- Entrada e sada
Na linguagem simples, meramente para provar alguns teoremas da
cincia da computao simulamos a sada assumindo que a ultima varivel utilizada
o que deveria ser impresso.
Mquina de Turing
A Mquina de Turing(MT) pode ser descrita como um modelo matemtico
do processo de computao. Sua estrutura simples proposital, uma vez que Turing
pretendia, com sua definio, chegar a um modelo que fosse universalmente aceito.
Atualmente h diversos modelos na literatura, mas que seguem o mesmo princpio.
A MT o principal modelo usado para o estudo do que ou no
computvel. De acordo com a tese de Church, todos os modelos razoveis de
procedimento so equivalentes, e a MT se revelou simples e flexvel o suficiente
para permitir todas as demonstraes dos resultados principais. Pode-se usar uma
MT como aceitador ou reconhecedor, ou ainda como a implementao de um
procedimento mais geral, que transforma uma cadeia de entrada em uma cadeia de
sada.
Uma Mquina de Turing feita de trs componentes: fita, controlador
cabeotes de leitura/gravao.
Uma definio para a Mquina de Turing pode ser: Uma mquina de
Turing M uma tupla M = < K, , , , i, F >, onde K um conjunto (finito, no
vazio) de estados, o alfabeto (finito) de smbolos da fita, o alfabeto de
smbolos de entrada, a funo de transio, i K o estado inicial, e F K o
conjunto de estados finais. A funo de transio d um mapeamento : K K
{L, R}. Quando tivermos (q, a) = (p, b, R), a MT M, quando est no estado q, e
l o smbolo a na fita, escreve o smbolo b na mesma posio em que a estava
escrito, move-se para a direita uma clula, e passa para o estado p. (Idem, para a
esquerda no caso de (q, a) = (p, b, L) ). Por simplicidade, podemos deixar alguns
valores de indefinidos, de maneira que deve ser entendida como uma funo
parcial. Atingida uma situao em que o estado , o smbolo lido a, e (q, a)
indefinido, dizemos que a mquina para. Poderamos, se desejado, definir mquinas
de Turing que sempre param quando atingem um estado final, e que nunca param
em um estado no final. Mas sempre que esta propriedade for desejada, podemos
alterar uma MT introduzindo um estado adicional, no final, do qual a mquina
nunca mais sai.
Tese de Church-Turing
J dizia a tese de Church-Turing: Se existe um algoritmo para fazer a
tarefa de manipulao de smbolos, existe uma mquina de Turing para realiza-la. A
tese consiste em tentar provar que qualquer tarefa de manipulao de smbolos,
pode ser executada em uma mquina de Turing, caso a tarefa no puder ser
calculada na mquina de Turing, a mesma no pode ser calculada. Essa tese pode
ser provada matematicamente, apesar de que nunca poder ser provada, existem
fortes argumentos em seu favor. Como por exemplo, no foi encontrado nenhum
algoritmo que no possa ser simulado utilizando uma mquina de Turing, e foi
demonstrado que todos os modelos computacionais que tm sido comprovados so
equivalentes ao modelo dessa mquina.
Numeros de Godel
Na cincia da computao, um numero sem sinal pode ser associado a cada
programa que poder ser descrito em linguagem especifica, geralmente chamado
de numero de Godel, em homenagem ao matemtico austraco Kurt Godel.
Vantagens de uso do numero de Godel: Os programas podem ser utilizados
como um nico item de dados como entrada para outros programas. A Identificao
de um programa pode ser feita por apenas uma representao de um nico numero
inteiro. O uso de numerao pode ser utilizado para provar que certos problemas
no podem ser solucionados pelo computador, mostrando que o nmero total de
problemas no mundo maior do que problemas em programas.
Vrios mtodos foram criados para numerao de programas, um modo de
transformao simples para numerar programas escritos em linguagens simples na
tabela abaixo.
Smbolo
Cdigo
Smbolo
Cdigo
Hexadecimal
Hexadecimal
Incr
Decr
while
Representao de um Programa
Ao utilizar a tabela, podemos representar qualquer programa escrito na
linguagem simples por um nico numero inteiro positivo, basta seguir algumas
etapas.
1. Substituir a partir da tabela, cada smbolo hexadecimal correspondente.
2. Interpretar o nmero hexadecimal resultante como um nmero inteiro
sem sinal.
Ex:
Qual numero de Godel para o programa incr(X)?
A soluo basta substituir cada smbolo pelo seu correspondente cdigo
hexadecimal.
Incr X (AF)16 ---- 175
A representao do programa em numero de Godel ser 175.
Interpretao de um nmero de Godel
Para interpretar um numero de Godel em um programa, basta seguir as
seguintes instrues:
1. Converta o nmero para hexadecimal
2. Interprete cada dgito hexadecimal como um smbolo utilizando a
tabela.
Ex:
Interprete 3058 como um programa.
Basta modificar o numero para hexadecimal e substituir cada dgito pelo
correspondente smbolo.
3508 (BF2)16 decr X 2 decr (X2)
O Problema da Parada
Quase todo o programa escrito de em uma linguagem de programao
envolve alguma forma de repetio, laos ou funes recursivas. Uma construo
com base em repetio pode nunca parar; ou seja, possvel que um programa seja
executado para sempre se tiver um lao infinito. A existncia desse programa
poderia economizar muito tempo dos programadores. Executar um programa sem
saber se ele ir ou no parar um trabalho muito difcil. Mas, agora j pode ser
comprovado que um tal programa no pode existir, o que um grande
desapontamento para os programadores.
O Problema da Parada No Pode Ser Resolvido
Em vez de afirmar que o programa de teste no existe, e nunca poder
existir, o cientista da computao diz: o problema da parada no solvel.
Prova: Assumimos que o programa existe, e ento, mostramos que essa
existncia cria uma contradio; portanto ela no pode existir.
Etapa 1
Assumimos que um programa, chamado teste, existe.
Etapa 2
Criamos outro programa, chamado Estranho, que composto de duas
partes: uma cpia de teste no incio, e um lao vazio.
Etapa 3
Tendo escrito o programa Estranho, testamos consigo mesmo como
entrada.
nmeros naturais m e n.
Divisor comum grande: Dados nmeros naturais m, n e k, encontrar um
divisor comum de m e n que seja maior que k ou constatar que tal divisor no
existe.
Subsequncia crescente mxima:
ou
constatar que no h
caminho algum de r a s.
Caminho mximo:
cobertura com menos que k vrtices ou constatar que tal cobertura no existe.
(Observe que h uma relao ntima entre o problema do ciclo
hamiltoniano e o problema do ciclo longo. H relaes anlogas entre vrios outros
pares de problemas.)
Algoritmos Polinomiais
Dizemos que um algoritmo resolve um dado problema se, ao receber
qualquer instncia do problema, devolve uma soluo da instncia ou diz que a
instncia no tem soluo.
(Cuidado:
no
futuro.)
computacionalmente intratveis.
Problemas
desse
tipo
so
considerados
A Classe NP de Problemas
O status de muitos problemas desconhecido:
problema polinomial ou no.
no se sabe se o
Diremos que um
Ademais, a
Considere, por
exemplo, o problema do ciclo mximo. Por um lado, parece que deveramos aceitar
o problema como "razovel" uma vez que o problema do ciclo longo "razovel".
Por outro lado, o problema no parece "razovel" pois no est claro como verificar
se um dado ciclo mximo, ou seja, se no existe ciclo mais longo. Para contornar
essas dificuldades, preciso restringir nossa ateno a problemas "de deciso" e
trocar o conceito de "soluo" pelo de "certificado".)
A Questo "P = NP?"
No difcil entender que a classe NP inclui a classe P, ou seja, que todo
problema polinomial "razovel".
ciclo
pequena,mochila.
hamiltoniano,
ciclo
longo,
clique
grande,
cobertura
Todas as
contm o vrtice r mas no contm o vrtice s. Suponha ainda que nenhuma aresta
liga um vrtice de R a um vrtice fora de R. Se um tal R existe, claro que no
existe caminho de r a s. Assim, um tal R um certificado de inexistncia de soluo
para a instncia em discusso. (Toda instncia sem soluo tem um tal certificado.)
Cada um desses exemplos mostra que o correspondente problema est
na classe coNP.
Referncias Bibliogrficas
[1] FOROUZAN, Behrouz; MOSHARRAF, Firouz. Fundamentos da Cincia da
Computao, traduo da 2 edio internacional.
[2] http://www.ime.usp.br