MATEMÁTICA
COMPUTACIONAL
AULA 4
Prof. Luis Gonzaga de Paulo
CONVERSA INICIAL
Muitos dos conceitos que estudamos em matemática tem aplicação direta
e prática, não apenas em ambientes complexos e requintados, mas também em
coisas simples, do dia a dia. As máquinas e os autômatos que estudaremos
nesta aula são um exemplo: são frequentemente usadas para a modelagem
matemática dos mais diferentes tipos de problemas, desde analisadores de
linguagem a engines de busca, mecanismos de inferência, robôs e máquinas
dos mais diversos tipos.
Porém, em sua essência tais máquinas são fundamentais para os
ambientes de computação, pois em síntese o próprio computador é uma dessas
máquinas. O conhecimento do funcionamento dessas máquinas em nossos
estudos tem o propósito de possibilitar o uso intenso dessas ferramentas, quer
seja para a modelagem e o desenvolvimento de solução para os diversos
problemas que se apresentam para os profissionais da tecnologia, quer seja para
o estudo de questões relativas à computação, para a revisão de conceitos e o
desenvolvimento tecnológico e científico.
TEMA 1 – MÁQUINA DE ESTADOS
As máquinas de estado são uma forma matemática de abstrair
processos ou o funcionamento de equipamentos reais, sejam eletrônicos ou
mecânicos, e ainda dos softwares. Em outras palavras, as máquinas de estado
são um modelo matemático de sistemas que possuem entradas e saídas
discretas e a capacidade de representar, em um certo momento, um estado pré-
estabelecido.
As máquinas de estado também são chamadas autômatos, ou máquinas
de estado finito (FSM – Finite State Machine, em inglês). O tipo de abstração
propiciado por essas máquinas nos permite a modelagem matemática de um
vasto número de problemas. Apesar de possuir a capacidade de representar
múltiplos estados, uma FSM só pode apresentar-se em um estado por vez,
denominado estado atual, sendo esta é principal característica de uma máquina
de estados. O estado atual representa a informação relativa às entradas
passadas, e isso é necessário para que se possa determinar o comportamento
do sistema perante as próximas entradas.
Uma FSM pode ser representada por uma quíntupla (Q, ∑, δ, q0, F):
2
Q é um conjunto finito de estados;
∑ é conjunto finito de símbolos, chamado de alfabeto da FSM;
δ é a função de transição;
q0 é o estado inicial no qual qualquer entrada é processada (q0 ∈ Q);
F é um conjunto de estado/estados finais de Q (F ⊆ Q).
Figura 1 – Diagrama de representação de uma máquina de estados
A terminologia aplicada às FSM inclui os seguintes termos:
Alfabeto é um conjunto finito de símbolos. Por exemplo: ∑ = {a, b, c, d}
é um conjunto do alfabeto no qual ‘a’, ‘b’, ‘c’, e ‘d’ são símbolos.
String é uma sequência finita de símbolos obtidos de ∑. Por exemplo, a
string ‘cabcad’ é uma string válida do conjunto do alfabeto ∑ = {a, b, c,
d}.
Comprimento de uma string é o número de elementos presentes na
string, denotado por |S|. Por exemplo, se S = ‘cabcad’, |S|= 6. Se |S|= 0,
então a string é chamada string vazia, denotada por λ or ε).
Fecho de Kleene ou Operador de Kleene, ∑*, é um operador unário ou
um conjunto de símbolos ou strings ∑, dado um infinito conjunto de todas
as possíveis strings de todos os possíveis comprimentos sobre ∑ incluindo
λ. A representação: ∑* = ∑0 ∪ ∑1 ∪ ∑2 ∪……. ∑p é o conjunto de todas
as strings possíveis de comprimento p. Por exemplo, se ∑ = {a, b}, ∑* =
{λ, a, b, aa, ab, ba, bb, ………..}.
3
Fecho de Kleene / Mais, ∑+ é um conjunto infinito de possíveis strings
de todos os possíveis comprimentos sobre ∑ excluindo λ. A
representação é: ∑+ = ∑1 ∪ ∑2 ∪ ∑3 ∪……. ∑+ = ∑* − { λ }. Por exemplo,
se ∑ = { a, b }, então ∑+ = { a, b, aa, ab, ba, bb, ………..}.
Linguagem é um subconjunto de ∑* para algum alfabeto ∑, que pode ser
finito ou infinito. Por exemplo, se a linguagem L compreende todas as
strings possíveis de comprimento 2 sobre ∑ = {a, b}, então L = { ab, aa,
ba, bb}.
A base do funcionamento de uma FSM é justamente isso: considerar que
um estado armazena informações sobre as etapas anteriores, isto é, o passado
do processo. Além disso, o estado reflete as mudanças ocorridas desde a
entrada neste estado até o momento presente. Uma mudança de estado -
geralmente descrita ou especificada por uma condição que precisa ser atendida
ou ocorrer – refere-se à uma transição. Uma ação refere-se à uma atividade a
ser realizada para gerar a transição, ou mesmo à uma atividade que ocorre em
função de uma transição.
Figura 2 – Um semáforo (farol ou sinal): exemplo de uma FSM
4
Figura 2 – Um diagrama de estado de FSM de um elevador
Um diagrama de estado é a forma gráfica que utilizamos para
representar o funcionamento de uma máquina de estado, como mostrado na
Figura 3. As tabelas de transição de estado também podem representar as
FSM - máquinas de estado. Uma máquina de estados finita pode ser descrita por
uma tabela de transição de estados, que contém as informações completas
sobre as ações e os estados, para cada um dos estados, e também todas as
transições registradas ou previstas.
Tabela 1 – Estados de uma FSM
Tabela de Transição de Estados
Estado
Condição Estado A Estado B Estado C
1 ... ... ...
2 ... Estado C ...
3 ... ... ...
As máquinas de estado podem ser de dois tipos: as do tipo aceitadoras
(ou reconhecedoras), como mostrado na Figura 4, que produzem uma saída
binária, restrita a sim ou não, para informar se a entrada é aceita pela máquina
ou não, e as do tipos transdutoras, como visto na Figura 5, que produzem uma
informação na saída baseada em um estímulo ou informação de entrada e/ou
um estado utilizando ações, e que geralmente são utilizadas para aplicações de
controle.
5
Figura 4 – FSM do tipo aceitadores
Do ponto de vista matemático, uma FSM é função da relação de conjuntos
pré-determinados, e tem a seguinte definição (Gersting, 2015):
Máquina de Estado Finito M = [E, I, O, fE, fO] é uma máquina de estado
finito se E é um conjunto finito de estados, I é um conjunto finito de
símbolos de entrada (o alfabeto de entrada), O é um conjunto finito
de símbolos de saída (o alfabeto de saída) e fE, fO são funções, onde:
fE: E x I →E
e
fO : E → O
A máquina sempre começa inicializada por um estado inicial fixo e0 .
Figura 5 – FSM do tipo transdutores
Luz
Calor
Som
Efeitos Sinal de
Sensor
Físicos Saída
Posição
Efeitos
Força
Mecânicos
Velocidade
As figuras apresentadas e os exemplos utilizados até aqui tratam de um
tipo de FSM que denominamos AFD – Autômato Finito Determinístico, ou
seja, uma estrutura matemática constituída por três tipos de elementos: um
conjunto de estados, um alfabeto (com os símbolos reconhecidos como
6
entrada e saída) e um conjunto de transições. Entre os estados destacamos
um único estado inicial e um subconjunto composto dos estados finais.
Um AFD - Autômato Finito Determinístico é representado por uma
quíntupla (Q, ∑, δ, q0, F), na qual:
Q é um conjunto finito de estados;
∑ é um conjunto finito de símbolos chamado alfabeto;
δ é a função de transição, na qual δ: Q × ∑ → Q;
q0 é o estado inicial a partir do qual qualquer entrada é processada (q0 ∈
Q);
F é um conjunto de estado/estados finais de Q (F ⊆ Q).
Como já vimos, um AFD – Autômato Finito Determinístico é representado
por um dígrafo denominado diagrama de estado. Nesse dígrafo, os vértices
representam os estados, as arestas nomeadas com o alfabeto de entrada
mostram as transições, o estado inicial é definido por uma única aresta vazia, e
o estado final é indicado por um círculo duplo. Por exemplo, consideremos um
AFD como segue:
Q = {a, b, c};
∑ = {0, 1};
q0 = {a};
F = {c}.
A função de transição δ é apresentada no quadro a seguir.
Quadro 1 – Função de transição para o AFD
Próximo estado para Próximo estado para uma
Estado atual
uma entrada 0 entrada 1
a a b
b c a
c b c
Podemos representar graficamente esse AFD da seguinte forma.
7
Figura 6 – Estado do AFD proposto
Em um AFD, para cada par (estado, símbolo) há uma transição para um
único estado, o que confere um caráter determinístico ao funcionamento deste
autômato. Caso eliminemos essa restrição, ou seja, se para um determinado par
(estado, símbolo) for possível haver transições para dois ou mais estados,
passamos a denominar a FSM como AFN – Autômato Finito não
Determinístico. Ou seja, em um AFN é possível haver um conjunto com várias
operações possíveis para a mesma palavra ou símbolo de entrada em um
estado. Os componentes de um AFN são basicamente os mesmos de um AFD,
porém um AFN contempla as seguintes definições:
Um AFN pode ter mais que um estado inicial;
A função de transição apresenta, para cada par (estado, símbolo), um
conjunto de estados.
Um AFN - Autômato Finito Não-Determinístico é representado por uma
quíntupla (Q, ∑, δ, q0, F), na qual:
Q é um conjunto finito de estados;
∑ é um conjunto finito de símbolos chamado alfabeto;
δ é a função de transição, na qual δ: Q × ∑ → 2Q (2 elevado a Q deve-se
ao fato de que a transição de um estado pode para qualquer combinação
de Q);
q0 é o estado inicial a partir do qual qualquer entrada é processada (q0 ∈
Q);
F é um conjunto de estado/estados finais de Q (F ⊆ Q).
Um AFN também pode ser representado por um dígrafo, um diagrama de
estado, da mesma forma que um AFD. Para exemplificar, vamos considerar um
AFN com as seguintes características:
8
Q = {a, b, c};
∑ = {0, 1};
q0 = {a};
F = {c};
A função de transição δ é apresentada no quadro a seguir.
Quadro 2 – Função de transição para o AFD.
Próximo Estado para Próximo Estado para
Estado Atual
uma Entrada 0 uma Entrada 1
a a,b b
b c a,c
c b,c c
A representação gráfica desse AF pode ser a seguinte.
Figura 7 – Gráfico do AFN proposto
O Quadro 3 apresenta um comparativo entre um AFD e um AFN.
Quadro 1 – Comparativo entre um AFD e um AFN
AFD AFN
A transição de um estado ocorre para um único A transição de um estado pode ocorrer para
estado próximo particular, para cada símbolo vários estados seguintes, para cada símbolo de
de entrada. Por isso, é chamado entrada. Por isso, é chamado de não-
determinístico. determinístico.
Transições de strings vazias não existem. Transições de strings vazias podem ocorrer.
O retrocesso é permitido. O retrocesso nem sempre é possível.
Requer mais espaço. Requer menos espaço.
Uma string é aceita se pelo menos uma das
Uma string é aceita se passar para um estado
transições possíveis terminar em um estado
final.
final.
9
Figura 8 – Arquitetura de um AFD
fita de somente leitura
a1 a2 ... ai ... an
unidirecional
controle
+ registrador com
e
estado atual
ᵟ
Um AFD pode ser representado pela arquitetura mostrada na Figura 9:
uma máquina que opera com uma leitura sequencial – em uma fita – e em
apenas uma direção: para a direita. Esta fita contém os símbolos distribuídos em
células, sendo um único símbolo em cada célula. A máquina também tem um
registrador para armazenar o estado atual, um conjunto de instruções – a função
de transição do AFD – e uma unidade de controle.
É possível também que se possa fazer a leitura bidirecional da fita,
permitindo que a transição possa avançar ou retroceder na leitura dos símbolos.
Nesse caso, para evitar que a leitura avança para além do final, ou retroceda
para antes do começo, é necessário que existam mais duas células com
símbolos especiais < e >, que, na prática, limitam as transições: uma transição
de avanço (ou leitura da fita para a direita) para a condição < e uma transição
de retrocesso (ou leitura da fita para a esquerda) para a condição >. A Figura 9
apresenta a arquitetura dessa variação de AFD.
Figura 9 – AFD com fita bidirecional
fita de somente leitura
a1 a2 ... ai ... an
bidirecional
controle
+ registrador com
e
estado atual
ᵟ
10
Na aula prática sobre FSM, são apresentados problemas para os quais a
solução emprega os dois tipos de autômatos, e a solução proposta para eles,
assim como exercícios resolvidos que reforçam os conceitos apresentados.
Além de seu uso na matemática, na engenharia e nas tecnologias em geral, as
Máquinas de Estado são largamente empregadas na computação, quer seja na
modelagem do funcionamento de softwares (sistema ou aplicativos), quer seja
para projetar sistemas digitais compostos de hardware e software, na
Engenharia de Software, nos projetos de compiladores e de protocolos de rede,
e também no estudo da computação e das linguagens.
TEMA 2 – AUTÔMATOS DE PILHA
Apesar da sua extensa aplicação, as máquinas de estado finito – FSM, ou
autômatos finitos, não atendem à totalidade dos problemas. É o caso, por
exemplo, de aplicações para as quais é necessário usar expressões aritméticas.
Nesses casos, falta aos autômatos uma memória que permita registrar todos os
valores – ou as ocorrências dos símbolos. Para atender à essa necessidade são
utilizados os AP – Autômatos de Pilha (pushdown automata, em inglês).
Figura 10 – A arquitetura de um AP
fita de somente leitura
a1 a2 ... ai ... an
bidirecional
controle registrador com
e
+
estado atual
ᵟ b1 topo da pilha
b2
.
.
.
bn
Estes são mecanismos de grande importância para a computação, como,
por exemplo, nos compiladores de linguagem de programação, na etapa de
análise sintática de um código. Ainda, diferentemente dos autômatos finitos, um
autômato de pilha não determinístico tem uma abrangência muito superior a dos
11
AP determinísticos. Um autômato de pilha é uma máquina de estados bastante
semelhante à um AFD, porém com o adicional de uma pilha. A Figura 10
apresenta a arquitetura de um AP.
A pilha, tal como uma fita, compõe-se de células que são capazes de
receber apenas um símbolo por vez. A leitura, porém, é feita apenas na célula
do topo da pilha. No início do processo, o registrador contém o estado inicial do
AP. A fita então recebe a palavra de entrada da sua primeira célula, pois o
cabeçote de leitura está posicionado na primeira célula da fita. Neste momento,
a pilha está vazia. À medida em que a leitura da fita prossegue e as transições
resultam em um uso da pilha, um símbolo de fim de pilha (F) é inserido na pilha,
de modo a identificar esse status novamente quando a pilha for lida.
A principal diferença entre um APD – Autômato de Pilha Determinístico e
um APN – Autômato de Pilha Não-Determinístico reside no fato de que o APN
pode contemplar transições compatíveis entre si.
TEMA 3 – MÁQUINA DE MEALY
Uma máquina de Mealy é uma FSM cuja saída depende do estado atual,
bem como da entrada. Pode ser descrita por uma sêxtupla (Q, ∑, O, δ, X, q0) em
que:
Q: conjunto finito de estados;
∑: conjunto finito de símbolos denominado alfabeto de entrada;
O: conjunto finito de símbolos denominado alfabeto de saída;
δ: função de entrada de transição em que δ: Q × ∑ → Q;
X: função de saída da transição em que X: Q × ∑ → O;
q0: estado inicial a partir do qual qualquer entrada é processada (q0 ∈ Q).
Os estados de uma máquina de Mealy são mostrados no quadro a seguir.
12
Quadro 4 – Estados de uma máquina de Mealy
Próximo estado
Estado atual entrada = 0 entrada = 1
Estado Saída Estado Saída
→a b x1 c x1
b b x2 d x3
c d x3 c x1
d d x3 d x2
O diagrama de estados dessa máquina é o seguinte.
Figura 11 – Diagrama de estados de uma máquina de Mealy
TEMA 4 – MÁQUINA DE MOORE
Uma máquina de Moore é uma FSM cujas saídas dependem apenas do
estado atual. Pode ser descrita por uma sêxtupla (Q, ∑, O, δ, X, q0) em que:
Q: conjunto finito de estados;
∑: conjunto finito de símbolos denominado alfabeto de entrada;
O: conjunto finito de símbolos denominado alfabeto de saída;
δ: função de entrada de transição em que δ: Q × ∑ → Q;
X: função de saída da transição em que X: Q → O;
q0: estado inicial a partir do qual qualquer entrada é processada (q0 ∈ Q).
Os estados de uma máquina de Moore são mostrados no quadro a seguir.
13
Quadro 5 – Estados de uma máquina de Moore
Próximo estado
Estado atual Saída
Entrada = 0 Entrada = 1
→a b c x2
b b d x1
c c d x2
d d d x3
O diagrama de estados de uma máquina de Moore é o seguinte.
Figura 12 – Diagrama de estados de uma máquina de Moore
TEMA 5 – MÁQUINA DE TURING
A Máquina de Turing é um dispositivo inventado em 1936 por Alan Turing,
matemático inglês, que aceita as linguagens (conjunto recursivamente
enumerável) geradas por gramáticas tipo 0. Uma máquina de Turing é um
modelo matemático que consiste em uma fita de comprimento infinito, dividida
em células, pelas quais a entrada é dada, e de uma cabeça de leitura que lê a
fita de entrada. Um registrador de estado armazena o estado da máquina de
Turing. Depois de ler um símbolo de entrada, este é substituído por outro
símbolo, o estado interno da máquina é alterado, e a cabeça de leitura se move
uma célula, para a direita ou para a esquerda. Se a máquina atingir o estado
final, a string de entrada será aceita; caso contrário, será rejeitada.
Uma máquina de Turing pode ser formalmente descrita com uma sétupla
(Q, X, ∑, δ, q0, B, F), em que:
Q é um conjunto finito de estados;
X é o alfabeto da fita;
14
∑ é o alfabeto de entrada
δ é a função de transição δ: Q × X → Q × X × {deslocamento à esquerda,
deslocamento à direita}.
q0 é o estado inicial;
B é o símbolo de ‘Espaço em Branco’;
F é o conjunto de estados finais.
Uma comparação da máquina de Turing com outros modelos de
autômatos é bastante útil, como mostrando no quadro a seguir.
Quadro 2 – Máquina de Turing x outros autômatos
Tipo de Máquina Estrutura de Pilha de Dados Determinística?
Autômatos Finitos N/A Sim
Autômato de Pilha Último a entrar, primeiro a sair (LIFO) Não
Máquina de Turing Fita infinita Sim
Vamos à um exemplo da máquina de Turing M = (Q, X, ∑, δ, q0, B, F),
com:
Q = {q0, q1, q2, qf}
X = {a, b}
∑ = {1}
q0 = {q0}
B = espaço em branco
F = {qf }
A transição de estados δ é dada por:
Simbolo do Alfabeto Estado atual ‘q0’ Estado atual ‘q1’ Estado atual ‘q2’
da Fita
a 1Rq1 1Lq0 1Lqf
b 1Lq2 1Rq1 1Rqf
Em uma máquina de Turing, a complexidade do tempo refere-se à medida
do número de vezes que a fita se move quando a máquina é inicializada para
alguns símbolos de entrada, e a complexidade do espaço é o número de células
da fita gravadas. A complexidade do tempo pode ser representada por T (n) = O
15
(n log n). A complexidade do espaço da máquina de Turing pode ser
representada por S (n) = O (n).
Quanto à linguagem, uma máquina de Turing aceita uma linguagem se
entrar em um estado final para qualquer string de entrada escrita. Uma
linguagem é dita recursivamente enumerável (gerada pela gramática Tipo 0) se
for aceita por uma máquina de Turing. Uma MT decide por uma linguagem se o
aceita e entra em um estado de rejeição para qualquer entrada que não esteja
nessa linguagem. Uma linguagem é recursiva se for decidida por uma máquina
de Turing. Podem haver alguns casos em que uma máquina de Turing não para.
Então essa máquina de Turing aceita a linguagem, mas não a decide.
Vamos ver questões elementares da máquina de Turing com o auxílio dos
dois exemplos a seguir. Primeiramente, vamos tratar de uma máquina de Turing
que possa reconhecer todas as entradas com uma string na qual o número de
letras ‘a’ seja par. Essa máquina de Turing M pode ser construída com os
seguintes passos:
Seja q1 o estado inicial;
Se M está em q1; ao ler ‘a’, entra no estado q2 e escreve B (espaço em
branco);
Se M está em q2; ao ler ‘a’, entra no estado q1 e escreve B (espaço em
branco);
Dos movimentos apresentados, nós podemos verificar que M entra no
estado q1 se ler um número par de ‘a’s, e entra no estado q2 se ler um
número ímpar de ‘a’s. Portanto q2 é o único estado de aceitação.
Deste modo:
M = {{q1, q2}, {1}, {1, B}, δ, q1, B, {q2}}
Em que δ é dado por:
Símbolo do
Estado atual ‘q1’ Estado atual ‘q2’
alfabeto da fita
a BRq2 BRq1
No segundo exemplo, projetamos uma máquina de Turing que lê uma
string representando um número binário e apaga todos os 0s iniciais da string.
No entanto, se a string for composta apenas por 0s, ela manterá um 0. Vamos
supor que a string de entrada seja delimitada por um espaço em branco, B, em
16
cada extremidade da cadeia. Então nossa máquina de Turing M pode ser
construída pelos seguintes movimentos:
Seja q0 o estado inicial;
Se M está em q0, ao ler 0, move à direita, entra no estado q1 e apaga o 0.
Ao ler 1, entra no estado q2 e move à direita.
Se M está em q1,ao ler 0, move à direita 0, ou seja, troca os 0’s por B’s.
Ao atingir o 1 mais à esquerda, entra em q2 e move à direita. Se encontra
B, ou seja, a string é composta apenas de 0’s, move à esquerda e entra
no estado q3.
Se M está em q2, lendo tanto 0 ou 1, move à direita. Se encontrar B, move
à esquerda e entra em q4. Isto valida que a string contém apenas 0’s e
1’s.
Se M está em q3, troca ‘B’ por ‘0’, move à esquerda e atinge o estado
final qf.
Se M está em q4, ao ler tanto 0 ou 1, move à esquerda. Ao alcançar o
início da string, ou seja, ler ‘B’, atinge o estado final qf.
Portanto:
M = {{q0, q1, q2, q3, q4, qf}, {0,1, B}, {1, B}, δ, q0, B, {qf}}
Em que δ é dado por:
Símbolo do Estado Estado Estado Estado Estado
alfabeto da fita atual ‘q0’ atual ‘q1’ atual ‘q2’ atual ‘q3’ atual ‘q4’
0 BRq1 BRq1 ORq2 - OLq4
1 1Rq2 1Rq2 1Rq2 - 1Lq4
B BRq1 BLq3 BLq4 OLqf BRqf
FINALIZANDO
As máquinas de estado fazem parte de um poderoso arsenal para o
desenvolvimento de soluções com base na formulação matemática do problema
e suas possíveis soluções. Por serem processos empregados desde a origem
da computação, com um forte embasamento matemático, podem causar uma
primeira impressão de complexidade. Entretanto, o uso constante e a sua
equiparação aos componentes essenciais dos computadores – os circuitos
17
digitais de lógica e aritmética binária – fornece um precioso conhecimento para
o estudo de problemas e o projeto de soluções computacionais, com a vantagem
de poder-se utilizar a modelagem matemática em sua plenitude, valendo-se
principalmente das provas dos modelos formais, o que, em termos de otimização
do uso de tempo e de recursos escassos, pode ser a diferença entre o sucesso
e o fracasso do projeto.
18
REFERÊNCIAS
BONAFINI, F. C. Matemática e estatística. São Paulo: Pearson Education do
Brasil, 2014.
GERSTING, J. L. Fundamentos matemáticos para a ciência da computação:
um tratamento moderno de matemática discreta. Rio de Janeiro: LTC, 2015.
MACEDO, L. R. D.; CASTANHEIRA, N. P.; ROCHA, A. Tópicos de matemática
aplicada. Curitiba: InterSaberes, 2013.
STEIN, C.; DRYSDALE R. L.; BOGART, K. Matemática discreta para ciência
da computação. São Paulo: Pearson Education do Brasil, 2013.
VIEIRA, M. J. Introdução aos Fundamentos da computação: linguagens e
máquinas. São Paulo: Pioneira Thomson Learning, 2005.
WALPOLE, R. E. et al. Probabilidade & estatística para engenharia e
ciências. São Paulo: Pearson Prentice Hall, 2009.
19