Vous êtes sur la page 1sur 15

Utilizao de Mquina de Turing aplicada a um problema de comparao

de Listas de Palavras
Vincius Jurinic Cassol
1
Lucelene Lopes
1
Aline Duarte Riva
1
Resumo: Este tutorial apresenta duas abordagens distintas para a construo de duas mquinas de
Turing dedicadas a uma mesma aplicao: a comparao de listas de palavras. Ambas as mquinas
foram implementadas no software Visual Turing e recebem como entrada duas listas de palavras
sobre um alfabeto denido, gerando como sada uma lista com apenas as palavras presentes em
ambas. O propsito deste artigo ilustrar o desenvolvimento de mquinas de Turing de uma forma
pedaggica para que estudantes de computao e reas relacionadas possam ter um exemplo prtico
e relativamente complexo desta forma de processamento.
Palavras-chave: Comparao de Lista de Palavras, Mquina de Turing, Visual Turing.
Abstract: This tutorial presents two different approaches to build two distinct Turing machines to
a same application: a comparison between two lists of words. Both machines were implemented in
Visual Turing software and they receive as input two lists of words over a given alphabet in order to
deliver an output list with only the words present in the two input lists. The purpose of this paper
is to illustrate the Turing machine development process in a pedagogical way to allow students of
computer science and related areas the contact with a rather complex practical example of such
processing style.
Keywords: Comparison of Word List, Turing Machine, Visual Turing.
1 Introduo
Alan Mathison Turing nasceu em 23 de junho de 1912 em Londres. Em abril de 1936 concluiu a ideia que
hoje conhecida como mquina de Turing, sendo publicada no nal deste mesmo ano no artigo On computable
numbers, with an application to the Entscheidungsproblem [1]. Como o ttulo sugere, era apenas uma aplicao
da nova ideia de computabilidade matemtica, especicando o conjunto de aes disponvel em sua mquina.
A ao da mquina de Turing determinada pela congurao e pelo smbolo em que ela se encontra no
momento da vericao [2]. A ao dividida em trs passos: 1) apaga ou imprime um smbolo especicado; 2)
move-se para esquerda ou direita; 3) muda para uma congurao nova.
Uma ao completa denida por Turing como uma tabela de comportamento, ou seja, cada tabela de
comportamento uma mquina de Turing diferente [4]. A tese de Turing de que, mesmo sendo cada ao restrita
em sua forma, um conjunto de aes pode compor todas as operaes matemticas possveis, sugerindo que todas
as operaes da mente humana poderiam ser desempenhada por computadores.
Para Turing,com sua mquina era possvel fazer o trabalho do calculador humano, indicando haver pos-
sibilidade de mquinas computacionais serem construdas da unio da matemtica e lgica em processadores de
smbolos. Durante a II Guerra Mundial, Turing trabalhou no Departamento de Comunicao da Gr-Bretanha na
tentativa de quebrar cdigos da comunicao alem, que eram produzidos por um tipo de computador denominado
Enigma. Logo aps, Turing foi para os EUA para estabelecer cdigos seguros para comunicaes entre transa-
tlnticos aliados. Quando terminou a guerra, Turing aliou-se ao National Physical Laboratory para desenvolver o
1
Programa de Ps-Graduao em Cincia da Computao, PUCRS, Porto Alegre, Brasil
{vinicius.cassol, aline.riva}@acad.pucrs.br, lucelene.lopes@pucrs.br
doi: 10.5335/rbca.2010.013
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 66
ACE (automatic computing engine), um computador totalmente ingls. Contudo, com a demora do processo de
construo, decepcionado e deprimido, Turing mudou-se para Manchester e, durante uma crise, cometeu o suicdio
comendo uma ma com cianureto de potssio em 7 junho de 1954.
A mquina de Turing aceita na comunidade cientca para formalizao de algoritmo [4]. Apesar de ser
um mecanismo simples, formaliza o processo de um humano que realiza clculos, utilizando para tanto um sistema
de escrita e um apagador. Assim, realiza tarefas de qualquer computador com propsito geral. Formalmente, a
mquina de Turing similar aos computadores atuais, tendo como base uma ta, uma unidade de controle e um
programa [3].
Como referido anteriormente, a mquina constituda de trs partes:
Fita: Utilizada como compartimento de entrada, de sada e como dispositivo de memria de trabalho;
Unidade de Controle: Mostra o estado em que a mquina se encontra. Composta por um agente de leitura
e gravao (cabea da ta), o qual percorre uma clula da ta por vez, movimentando-se em dois sentidos
(esquerda ou direita);
Programa ou Funo de Transio: Funo que dene e comanda as leituras, as gravaes e em qual sentido
se movimenta a unidade de controle (cabea da mquina).
Figura 1. Descrio genrica de mquina de Turing [5].
A Figura 1 apresenta o exemplo de uma ta da mquina de Turing, sendo, esquerda, seu movimento nito
e, direita, pode ser innito. A ta dividida em clulas, cada contendo um smbolo, que geralmente pertence a
um alfabeto de entrada, a um alfabeto auxiliar, ou pode ser branco ou marcador de incio de ta [5].
Este trabalho tem por objetivo apresentar a soluo para um determinado problema computacional pelo do
uso do formalismo de mquina de Turing. O problema escolhido o de anlise de duas listas de palavras para
determinar quais esto presentes em ambas as listas, ou seja, a interseco dessas listas. Adicionalmente, aps
determinar quais so as palavras presentes em ambas as listas, a mquina conta o nmero de palavras presentes em
ambas, ou seja, calcula a cardinalidade da interseco entre as listas.
O presente artigo est organizado da seguinte forma: a prxima seo apresenta uma breve denio do
software Visual Turing 2.0 utilizado para implementar a mquina de Turing proposta; a seo 3 detalha o problema
e apresenta uma tentativa inicial de implementao da mquina proposta atravs de uma abordagem simplista;
em sequncia, a seo 4 apresenta a verdadeira implementao que soluciona o problema proposto e a seo 5
apresenta a execuo detalhada de um exemplo prtico de aplicao da mquina descrita na seo 4; nalmente, a
concluso sumariza os resultados deste trabalho e sugere possveis extenses ao mesmo.
2 Visual Turing 2.0
Para o desenvolvimento do presente trabalho utilizou-se o Visual Turing 2.0 [6]. Trata-se de uma ferramenta
open-source que permite a criao de mquinas de Turing. Para sua escolha considerou-se o fato de se tratar de
uma ferramenta gratuita e de fcil manejo, o que facilita a implementao do trabalho. Destaca-se, porm, que
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 67
se encontram disponveis outras ferramentas para desenvolvimento de mquinas de Turing, como, por exemplo, o
JFLAP
2
.
Considerando-se o Visual Turing, observa-se que a ferramenta permite a implementao da mquina de
Turing, em que possvel a denio de smbolos, relacionamentos e instrues entre os smbolos, bem como
outras mquinas j implementadas. Alm disso, esta ferramenta permite que seja denida uma ta, de tamanho
innito, onde cada posio contm um smbolo a ser vericado durante a execuo da mquina de Turing. A
mquina de Turing, por sua vez, durante a execuo, percorre a ta para a esquerda ou direita, conforme denio,
e pode ou no escrever na posio da ta em que se encontra.
2.1 Edio de Mquinas de Turing
A rea de trabalho do Visual Turing pode ser observada na Figura 2, onde se apresenta uma mquina simples
que apenas l uma letra do alfabeto {a, b} e escreve a letra contrria (escreve a se ler b, ou escreve b se ler a).
Figura 2. Exemplo do Visual Turing 2.0 que muda uma nica letra.
Na Figura 2, a janela marcada com a letra B apresenta as primitivas da mquina de Turing, contendo
todos os smbolos, componentes, instrues e outras mquinas que podem compor a mquina que est sendo
desenvolvida. Na janela marcada com a letra A, encontra-se o painel de edio, onde os componentes escolhidos
em B podem ser trabalhados e conectados a m de formar a mquina desejada.
Nesse painel, o estado inicial da mquina (primeira instruo) indicado por uma instruo com borda
dupla (neste caso a instruo move-se direita: R ). De cada instruo um conjunto de arcos indica as possveis
prximas instrues, podendo ser anotados por letras que indicam quando sero o caminho adotado. De acordo
com a letra apontada pela cabea da ta, um dos arcos ser escolhido. No exemplo apresentado, a mquina inicia
na instruo v para a direita. Caso a cabea da ta aponte para a letra a, a mquina executa a instruo b , que
escreve a letra b nesta posio. Caso a cabea da ta aponte para a letra b, a mquina vai para a instruo a , que
escreve a letra a. Independentemente do caminho ou da letra apontada pela cabea da ta, a mquina segue aps
para a instruo L , que vai para a esquerda e retorna a cabea da ta para a posio original.
Completando a identicao das janelas na Figura 2, a janela marcada com a letra C contm a ta com os
smbolos que sero utilizados durante a execuo da mquina.
Como mencionado anteriormente, uma mquina de Turing previamente denida pode ser usada como parte
de outra mquina. Esta possibilidade visa atender modelagem de problemas complexos, na qual se faz necessria
2
http://www.jap.org.
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 68
a diviso do problema em mdulos, sendo que o resultado de um processo executado por uma mquina pode ser
utilizado nas condies da mquina atual.
Outras inovaes no Visual Turing 2.0 so a existncia de dois recursos inexistentes na denio original de
mquina de Turing, que facilitam a utilizao sem criar qualquer restrio ou aumento do poder computacional do
formalismo. Trata-se da instruo no faz nada ? , que serve para centralizar uxos de uma mquina desenhada,
ou apenas para ler a letra apontada pela cabea da ta; e da denio da aplicao repetida de diversas instrues
idnticas. Por exemplo, a Figura 3 apresenta uma mquina simples que utiliza estes recursos adicionais. Trata-
se de uma mquina que troca as letras em posies mpares de uma palavra at encontrar o nal desta palavra,
indicado por uma sequncia das letras que representam como branco (em Visual Turing 2.0: #).
Figura 3. Exemplo do Visual Turing 2.0 que muda letras mpares de uma palavra.
Esta mquina inicia movendo a cabea da ta para a esquerda e, em seguida, move a cabea da ta duas
vezes para a direita; dessa forma inicia o processo na primeira letra da palavra. Mais uma vez, caso encontre a
letra a, muda-a para b, e vice-versa. Realizada esta troca, vai para a instruo no faz nada, que serve apenas para
reunir os uxos e voltar para a instruo que avana duplamente para a direita. Esta mquina encerra naturalmente
seu processamento quando a palavra terminar, pois, caso encontre na cabea da ta a letra # aps a instruo que
vai duplamente direita no existe arco com esta anotao; portanto, a mquina encerra sua execuo.
2.2 Execuo de Mquina de Turing
Aps o desenvolvimento da mquina desejada, tambm possvel execut-la atravs do Visual Turing 2.0.
A mquina ser executada com a velocidade padro de 100 instrues por segundo, a qual pode ser alterada, caso
desejado, pressionando-se F7 durante a execuo. Dentre outras caractersticas, possvel pausar e reiniciar a
execuo, bem como executar a mquina manualmente, acompanhando a execuo passo a passo.
3 Problema de Comparao de Lista e Soluo Simplista
O problema a ser resolvido por este trabalho, atravs de uma Mquina de Turing, a comparao de duas
listas com o objetivo de manter as palavras escritas na primeira lista que se encontram presentes na segunda lista.
As palavras so compostas pelo alfabeto a e b, no ultrapassando a quantidade de trs caracteres para cada palavra.
Para a marcao de nal das duas listas na ta utilizaram-se os caracteres #z#. Para esta comparao, a mquina
l cada um dos elementos da primeira lista e compara com todos os elementos da segunda lista com o objetivo de
apagar, ou seja, preencher com # os elementos da primeira lista que no aparecem na segunda.
3.1 Formato de Entrada
O formato de entrada so duas listas de palavras. Nesta verso, as palavras so, necessariamente, de 1, 2 ou
3 letras sobre um alfabeto a,b.
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 69
Os caracteres #z# (smbolos de controle) so utilizados para sinalizar o nal de uma lista. Logo, na ta da
mquina ca a #<primeira lista de palavras separada por #>#z#<segunda lista de palavras>#z#. Por exemplo,
dado as duas listas a seguir, a comparao dessas listas tem como interseco as palavras aba, bbb e a.
aba ba bbb a e aa bbb b aba a bab
3.2 Formato de Sada
No formato de sada, somente a interseco das duas listas (palavras presentes emambas listas) permanecem
na primeira lista, sendo as demais palavras apagadas com #. Por exemplo, dadas como entrada duas listas de
palavras, a sada tambmsero duas listas de palavras, sendo que a primeira lista possui a cardinalidade do conjunto
interseco.
Entra: #aba#ba#bbb#a#z#aa#bbb#b#aba#a#bab#z#
Sai: #aba####bbb#a#z#aa#bbb#b#aba#a#bab#z#
3.3 Algoritmo de Soluo Simplista
Algoritmo 1: Processo Geral da Abordagem Simplista
1 Para todas as palavras p da primeira lista
2 Reconhece a palavra p
3 Marca o m da palavra p e vai para o incio da prxima lista
4 Para todas palavras q da segunda lista
5 Se p = q ento
6 Aceita a palavra p (desmarca o m da palavra p)
7 Interrompe a busca na segunda lista
8 Se chegou at ao m da segunda lista sem que p fosse igual a q
9 Recusa a palavra p (retorna na primeira lista e apaga a palavra p)
A implementao prtica do processo descrito no algoritmo 1 feita por meio de uma mquina de Turing
apresentada na Figura 4. Nesta mquina, o alfabeto composto pelas letras a e b, alm dos smbolos de controle #
e z.
Esta mquina tem por funo reconhecer repetidamente as palavras da primeira lista (linhas 1 e 2 do Algo-
ritmo 1) e chamar outras mquinas para executar as demais tarefas. Uma vez reconhecida a palavra da primeira
lista, so chamadas duas mquinas de Turing:
uma submquina genrica marca_e_vai, que marca a palavra reconhecida e vai para o incio da segunda
lista; e
uma submquina especca busca_*, que busca encontrar na segunda lista a palavra reconhecida na primeira.
3.3.1 Submquina genrica marca_e_vai
A linha 3 do algoritmo 1 implementada pela mquina de Turing genrica representada na Figura 5, onde a
palavra reconhecida marcada com o smbolo z no nal e o leitor da mquina posicionado no incio da segunda
lista, ou seja, aps a sequncia de smbolos #z#. Esta mquina escreve o smbolo z e depois avana para a direita
at encontrar o smbolo z (que marca o m da primeira lista) e, em seguida, anda mais uma posio para a direita,
lendo o smbolo #, posicionando o leitor no incio da segunda lista.
3.3.2 Mquinas especcas de reconhecimento de palavras
De acordo com a palavra reconhecida no processo geral (mquina da Figura 4), aps chamar a submquina
marca_e_vai, uma submquina de Turing especca chamada para vericar as palavras da segunda lista, at
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 70
Figura 4. Principal mquina de Turing responsvel por reconhecer repetidamente as palavras da primeira lista e
chamar outras mquinas de Turing auxiliares ao processo.
Figura 5. Mquina de Turing responsvel por marcar o nal da palavra reconhecida na primeira lista e posicionar
o leitor da mquina aps a sequncia #z#.
encontrar a palavra reconhecida (neste caso aceita esta palavra), ou encontrar o m da lista (neste caso recusa a
palavra).
A Figura 6 apresenta todas as mquinas que buscam as possveis 14 palavras que podem ser reconhecidas.
Basicamente, essas mquinas buscam a sequncia com a palavra encontrada seguida do smbolo # e, caso no
encontrem, avanam para a prxima palavra da lista (at o smbolo #), onde tentam novamente encontrar esta
sequncia. Caso encontre a sequncia, a mquina aceita palavra chamada e a busca nalizada. Caso a
sequncia no seja encontrada at o nal da segunda lista, ou seja, at encontrar a sequncia #z#, a mquina
rejeita palavra acionada.
3.4 Problemas da soluo simplista
Ainda que funcione de forma adequada, a soluo simplista tem um grave problema para ser generalizada
e tratar palavras em um alfabeto maior do que apenas duas letras (a e b) e com um nmero qualquer de letras (no
apenas 1, 2 ou 3 letras em cada palavra). Na verdade, o funcionamento desta mquina simplista est baseado em
fazer um reconhecedor para cada palavra possvel e, portanto, dicilmente pode ser generalizado.
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 71
busca a busca b busca aa
busca ab busca ba busca bb
busca aaa busca aab busca aba
busca abb busca baa busca bab
busca bba busca bbb
Figura 6. Mquinas de Turing responsveis por buscar na segunda lista cada uma das possveis palavras
reconhecidas na primeira lista at encontr-la ou at encontrar o m da segunda lista.
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 72
Nesse sentido, esta abordagem foi abandonada. Em vista disso, uma soluo mais genrica e que possa ser
generalizada para outros alfabetos com um nmero virtualmente innito de palavras proposta na prxima seo.
4 Soluo Sosticada
O algoritmo bsico da soluo proposta segue a mesma linha de raciocnio do algoritmo anterior, no sentido
de que repete as tarefas de analisar cada uma das palavras da primeira lista, tentando encontr-las por passagens
repetidas pelas palavras da segunda lista. No entanto, as semelhanas das duas abordagens terminam neste ponto.
Nesta nova abordagem a comparao das palavras se faz letra a letra, com a cabea da ta indo e voltando repetidas
vezes de uma lista para a outra. O novo processo geral de funcionamento descrito pelo algoritmo 2.
Algoritmo 2: Processo Geral da Soluo Proposta
1 Para todas as palavras p da primeira lista
2 Para todas as palavras q da segunda lista
3 Para todas as letras m de p e n de q
4 Se m de p igual a n de q
5 Continua (avana as letras m e n)
6 Seno
7 Vai para a prxima palavra da segunda lista
8 Se chegou at ao m das letras de p e q
9 Aceita a palavra p e passa para a prxima palavra da primeira lista
10 Se chegou ao m da segunda lista sem que p fosse igual a q
11 Rejeita a palavra p e passa para a prxima palavra da primeira lista
12 Apaga a segunda lista
13 Contabiliza o nmero de palavras
4.1 Diferenas da soluo simplista
A primeira diferena nesta nova soluo uma mudana no formato de entrada que agora marca
com a sequncia #z# tambm o incio da primeira lista. Com isso, a mesma lista exemplo, que antes era:
#aab#bbb#bba#z#bba#aab#z#, passa a ser representada por: #z#aab#bbb#bba#z#bba#aab#z#.
Tambm possvel com esta segunda soluo tratar palavras que tenham mais do que trs letras, pois faz a
comparao de palavras letra a letra conforme descrito no algoritmo 2. Outra diferena que agora foram includos
dois novos smbolos para representar verses alteradas das letras a e b, que so os smbolos g, que representa
um a reconhecido, e h, que representa um b reconhecido.
Altima diferena que esta nova soluo completa o objetivo do trabalho, pois, aps identicar as palavras
presentes nas duas listas, calcula a cardinalidade da interseco das listas. Essa alterao muda um pouco o formato
de sada, que agora traz, antes das palavras encontradas em ambas as listas, dois novos smbolos, resultantes do
clculo da interseco (em binrio do tamanho desta lista). Os dois novos smbolos (g e h) so reaproveitados para
representar em binrio o nmero de palavras restantes na interseco das listas. Para isso utiliza-se g como o valor
zero e h como o valor um. Por exemplo, a sequncia de smbolos hgh equivale ao nmero binrio 101, ou seja, 5
em decimal.
O resultado nal que para uma entrada:
#z#aa#bbbb#bba#z#bba#aab#bbbb#b#aaa#bb#z#
teremos como sada:
hg#z####bbbb#bba#z#
onde, hg representa o nmero de palavras na interseco (10 em binrio, 2 em decimal), seguido das
palavras bbbb e bba, que estavam presentes nas duas listas.
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 73
4.2 Implementao
A implementao do algoritmo 2 (a soluo proposta) feita pela mquina de Turing apresentada na Fi-
gura 7. Nesta mquina, faz-se uso das seguintes submquinas:
inicial, que inicializa as listas marcando a primeira palavra de cada uma das listas;
prox_let, que posiciona a cabea da ta na prxima letra da palavra que est sendo analisada na segunda
lista;
prox_pal, que pula para a prxima palavra da segunda lista;
volta_pal, que retorna para a letra a ser vericada da palavra da primeira lista que est sendo analisada;
reinicia_pal, que retorna para a primeira letra da palavra da primeira lista que est sendo analisada;
aceita_pal, que marca como aceita a palavra da primeira lista encontrada na segunda lista e marca a prxima
palavra da primeira lista;
recusa_pal, que apaga a palavra da primeira lista que no foi encontrada na segunda lista;
nal, que apaga a segunda lista aps todas as palavras da primeira lista terem sido procuradas; e
contabil, que conta quantas palavras da primeira lista foram aceitas, isto , a cardinalidade da interseco
das listas.
Figura 7. Mquina de Turing que implementa a soluo proposta no algoritmo 2.
4.2.1 Submquina inicial
A submquina inicial (Figura 8) percorre toda a primeira lista (at encontrar o seu m, marcado pelo
smbolo z). Os primeiros trs movimentos da cabea da ta para a direita servem para pular a sequncia #z# no
incio da lista. Encontrado este smbolo, avana-se a cabea da ta e, na sequncia, troca-se o smbolo # por um
smbolo z, que marca ento a primeira letra da primeira palavra da segunda lista.
Depois disso a submquina move, repetidamente, a cabea da ta para a esquerda at encontrar, novamente,
o smbolo z, que marca a separao entre as listas, e continua movendo a cabea da ta para a esquerda at
encontrar novamente um smbolo z que marca o incio da primeira lista. A cabea da ta move-se novamente para
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 74
Figura 8. Submquina responsvel por marcar a primeira letra das primeiras palavras da primeira e segunda listas.
a direita e troca o smbolo # por um smbolo z que marca ento a primeira letra da primeira palavra da primeira
lista. Finalmente, a cabea da ta avana para a direita e a comparao da primeira palavra da primeira lista com a
primeira palavra da segunda lista poder comear.
4.2.2 Submquina prox_let
Esta submquina (Figura 9) avana a cabea da ta at a prxima letra a ser vericada na palavra que est
sendo analisada na segunda lista. O funcionamento desta submquina consiste em mover a cabea da ta para a
direita at encontrar o nal da primeira lista (smbolo z). Em seguida, o avano da cabea da ta continua at
encontrar a ltima letra da palavra da segunda lista que est sendo analisada, ou seja, at encontrar a ltima letra
que vem aps a marcao da palavra (smbolo z) ou uma letra j analisada (smbolos g ou h).
Figura 9. Submquina responsvel por posicionar a cabea da ta na prxima letra da palavra que est sendo
analisada na segunda lista.
4.2.3 Submquina prox_pal
A submquina prox_pal (Figura 10) tem como objetivo pular para a prxima palavra da segunda lista, ou
seja, desmarcar a palavra atual, revertendo suas letras analisadas de g e h para a e b, e marcar a prxima palavra
da lista. Esse procedimento feito movendo a cabea da ta para a esquerda trocando os smbolos g por a e h por
b at encontrar o incio da palavra marcada pelo smbolo z. Este smbolo revertido para # para desmarcar esta
palavra, e a cabea da ta avana para a direita at o m da palavra marcado pelo smbolo #. Este substitudo
pelo smbolo z para marcar a prxima palavra da lista.
4.2.4 Submquina volta_pal
Esta submquina retorna cabea da ta para aps a ltima letra j vericada na palavra da primeira lista
que est sendo analisada. O funcionamento da submquina volta_pal consiste em mover a cabea da ta at o
incio da palavra da segunda lista sendo analisada (indicado pelo smbolo z). Aps, a submquina continua at
o incio da segunda lista (indicado novamente pelo smbolo z) e segue at encontrar a ltima letra j vericada
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 75
Figura 10. Submquina responsvel por pular para a prxima palavra da segunda lista.
da palavra da primeira lista analisada (smbolos g ou h) ou o seu incio (indicado pelo smbolo z). Finalmente, a
cabea da ta avana para a direita para posicionar na prxima letra a analisar.
Figura 11. Submquina responsvel por retornar para a letra a ser vericada da palavra da primeira lista.
4.2.5 Submquina reinicia_pal
Esta submquina (Figura 12) reverte as letras j vericadas da palavra da primeira lista que est sendo
analisada e reposiciona a cabea da ta na primeira letra desta palavra. Isso feito retornando a cabea da ta at o
incio da palavra da segunda lista analisada (marcado pelo smbolo z), o incio da segunda lista (marcado de novo
pelo smbolo z). A partir da, continua-se movendo a cabea da ta para a esquerda, trocando-se os smbolos g por
a e h por b at encontrar o incio da palavra da primeira lista que est sendo analisada.
Figura 12. Submquina responsvel por retornar para a primeira letra da palavra da primeira lista.
4.2.6 Submquina aceita_pal
A submquina ilustrada na Figura 13 chamada quando uma palavra foi encontrada na primeira e na
segunda lista. Esta submquina deve reverter as letras vericadas das palavras na primeira e na segunda lista,
alm de indicar a prxima palavra da primeira lista e a primeira palavra da segunda lista. Assim, esta submquina
prepara a ta para que a prxima palavra da primeira lista possa ser procurada.
Conforme indicado na Figura 13, as quatro tarefas a serem executadas so (1) reverter as letras da palavra
da segunda lista que estava sendo analisada, ou seja, mover a cabea da ta para a esquerda trocando g e h por a
e b at encontrar o smbolo z, que deve ser trocado pelo smbolo #; (2) continuar movendo a cabea da ta para a
esquerda at o incio da segunda lista, onde o smbolo z deve ser escrito para marcar a primeira palavra da segunda
lista; (3) reverter as letras da palavra da primeira lista que estava sendo analisada, ou seja, mover a cabea da ta
para a esquerda trocando g e h por a e b at encontrar o smbolo z, que deve ser trocado pelo smbolo #; (4) mover
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 76
a cabea da ta para a direita at o nal desta palavra que estava sendo analisada e foi aceita, ou seja, avanar at
o prximo smbolo #, que deve ser trocado pelo smbolo z para apontar para a prxima palavra da primeira lista.
Figura 13. Submquina responsvel por marcar como aceita a palavra da primeira lista encontrada na segunda
lista, marcar a prxima palavra da primeira lista e a primeira palavra da segunda lista.
4.2.7 Submquina recusa_pal
A submquina recusa_pal, apresentada na Figura 14, faz uma tarefa semelhante submquina aceita_pal,
porm neste caso, ao invs de aceitar a palavra da primeira lista que estava sendo analisada, a palavra recusada,
ou seja, apagada da primeira lista. Assim, esta submquina tambm volta ao incio da segunda lista, ou seja,
move a cabea da ta para a esquerda at encontrar o smbolo z e aponta novamente para a primeira palavra da
segunda lista, escrevendo mais um smbolo z. Em seguida, a submquina continua movendo a cabea da ta para
a esquerda at chegar palavra que estava sendo analisada (prximo smbolo z) e comea a apagar todas as letras
desta palavra, ou seja, escreve o smbolo # at encontrar, avanando para a direita, um smbolo #. Finalmente, este
smbolo # substitudo pelo smbolo z, que indica a prxima palavra da primeira lista a analisar.
Figura 14. Submquina responsvel por apagar a palavra da primeira lista que no foi encontrada na segunda.
4.2.8 Submquina nal
Esta submquina (Figura 15) chamada quando todas as palavras da primeira lista foram analisadas e
aceitas ou recusadas. A execuo da submquina nal apaga toda a segunda lista, ou seja, escreve o smbolo # e
avana a cabea da ta at encontrar o nal da segunda lista (o prximo smbolo z). Depois, move a cabea da ta
para a esquerda at o incio da primeira lista, ou seja, at encontrar o segundo smbolo z.
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 77
Figura 15. Submquina responsvel por apagar a segunda lista, aps a procura das palavras da primeira lista.
4.2.9 Submquina contabil
Aps determinar as palavras componentes da interseco das duas listas, a submquina contabil (Figura 16)
conta o nmero de palavras que foram aceitas, ou seja, as palavras que no foram apagadas. Esta mquina avana
a cabea da ta para a direita e a cada nova palavra encontrada, ou seja, cada vez que uma letra a ou b encon-
trada aps um smbolo #, uma submquina chamada mais_um executada para incrementar um contador binrio.
Finalmente, a cabea da ta retorna para o incio da lista.
Figura 16. Submquina responsvel por contar quantas palavras da primeira lista foram aceitas, isto , a
cardinalidade da interseco das listas.
4.2.10 Submquina mais_um
Esta submquina (Figura 17) faz um incremento em um contador binrio que marca onde est a cabea da
lista com o smbolo z. Em seguida, recua a esquerda at uma posio aps o incio da lista e soma mais a um
contador binrio. Finalmente, retorna ao ponto original marcado pelo smbolo z e transforma-o novamente em #.
Neste contador, um dgito 0 (representado pelo smbolo g) incrementado, ou seja, transformado em dgito 1
(representado pelo smbolo h); j um dgito 1 incrementado sendo transformado em 0, mas o dgito da esquerda
deve ser, por sua vez, tambm incrementado.
Figura 17. Submquina responsvel por somar mais um em um contador binrio esquerda da lista de aceitos.
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 78
5 Exemplos de Aplicao
A Tabela 1 apresenta um exemplo de utilizao com uma descrio detalhada de diversos passos. Neste
exemplo recebem-se como entrada as listas:
aa bbbb ba bba e aab bbbb b aaa bb
A interseco dessas listas possui apenas uma palavra: a palavra bbbb.
Tabela 1. Descrio passo a passo do primeiro exemplo de utilizao.
Fita de Entrada
Aps a execuo da submquina inicial apontando para as palavras aa e aab
Aps reconhecer a primeira letra da palavra aa e aps a execuo da submquina prox_pal
Aps validar a primeira letra de aa e aps a execuo da submquina volta_pal
Aps reconhecer a segunda letra da palavra aa e aps a execuo da submquina prox_pal
Aps validar a segunda letra de aa e aps a execuo da submquina volta_pal
Aps reconhecer o m da palavra aa e aps a execuo da submquina prox_pal, aguardando #
Aps a execuo da submquina prox_pal (agora apontando para bbbb)
Aps a execuo da submquina reinicia_pal que reverte a palavra aa
. . .
Aps a execuo da ltima chamada da submquina prox_pal para a palavra aa
Aps a execuo da submquina recusa_pal que apaga a palavra aa e aponta para as palavras bbbb e aab
. . .
Aps reconhecer completamente a palavra bbbb em ambas as listas, aguardando #
Aps executar a submquina aceita_pal para a palavra bbbb e apontar para as palavras a e aab
. . .
Aps analisar todas as palavras da primeira lista
Aps executar a submquina nal deixando apenas a primeira lista com a palavra bbbb
Aps executar a submquina contabil contando apenas uma palavra (nmero binrio 1 - h)
Um outro exemplo de utilizao a comparao das listas:
a ab aaa abab bbbb bb b ba baa e ab abab bb baa a
Este segundo exemplo tem como interseco as cinco palavras da segunda lista:
ab abab bb baa a
O resultado da execuo na Tabela 2 mostra exatamente esse resultado, com a indicao do nmero binrio
101 (5 em decimal) com os smbolos hgh e, em seguida as, palavras da interseco.
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 79
Tabela 2. Descrio do resultado nal do segundo exemplo de utilizao.
Fita de Entrada
Fita de Sada
6 Concluso
A primeira mquina implementada uma soluo limitada que necessita que todas as palavras tratveis es-
tejam representadas nas instrues que identicam as palavras. Por isso esta soluo dilmente pode ser estendida
para um alfabeto maior.
A segunda soluo apresentada uma mquina bastante exvel, que pode ser estendida para um alfabeto
maior do que apenas as letras a e b; tem como vantagem tambm o fato de que palavras de qualquer tamanho
podem ser tratadas. Alm disso, junto com a possibilidade de visualizar as palavras na interseco, a mquina
implementada mostra a cardinalidade do conjunto de interseco, o que facilita a interpretao do resultado quando
as listas possuirem um nmero grande de palavras.
A nica limitao de uso desta mquina o tempo de execuo em listas grandes. O problema proposto
uma operao complexa, que muitas vezes lenta, mesmo utilizando linguagens de programao. Logo, a demora
de execuo para listas grandes na mquina de Turing proposta no deve ser um problema de implementao, mas
uma caracterstica do prprio problema escolhido.
Referncias
[1] TURING, A. M. On computable numbers, with an application to the entscheidungsproblem. Proc. London
Math. Soc., vol. 2, no. 42, pp. 230-265, 1936.
[2] HERKEN, R. The universal Turing machine: a half-century survey. 2nd edition. Oxford Science, 1995.
[3] COHEN, D. I. A. Introduction to computer theory. 2nd edition. John Wiley & Sons, Inc, 1996.
[4] HODGES, A. Alan Turing: one of The Great Philosophers. Phoenix, London, 1997.
[5] MENEZES, P. F. B.; DIVERIO, T. A. Teoria da Computao: Mquinas Universais e Computabilidade.
2.ed. Porto Alegre: Sagra Luzzatto, 2003.
[6] Visual Turing Machine. On-line. Disponvel em: http://sourceforge.net/projects/visualturing/. Acesso em:
23/04/2010.
Revista Brasileira de Computao Aplicada (ISSN 2176-6649), Passo Fundo, v. 2, n. 2, p. 66-80, set. 2010 80

Vous aimerez peut-être aussi