Uploaded by Kathe Isabelle

Aula10 MT-Introdução

advertisement
Teoria da Computação
Aula 10 – Máquinas de Turing - Introdução
Universidade Federal de Pelotas
Centro de Desenvolvimento Tecnológico
Curso de Ciência da Computação
Curso de Engenharia da Computação
Objetivos desta aula




Introduzir o conceito de Máquinas de Turing.
Apresentar o funcionamento das Máquinas de Turing,
demostrando estratégias para o reconhecimento de
linguagens.
Caracterizar a representação de Máquinas de Turing por
meio de diagramas de estado.
Exemplificar Máquinas de Turing para o reconhecimento de
linguagens.
Formalização de Algoritmo

Algoritmo é método efetivo para determinar se uma
propriedade é válida ou não para um elemento de uma
classe de entrada.
Formalização de Algoritmo

Algoritmo é método efetivo para determinar se uma
propriedade é válida ou não para um elemento de uma
classe de entrada.
Definição Intuitiva
(não-formal)
Formalização de Algoritmo

Algoritmo é método efetivo para determinar se uma
propriedade é válida ou não para um elemento de uma
classe de entrada.
Definição Intuitiva
(não-formal)

Consequentemente, qualquer afirmação sobre a nãosolucionabilidade de um problema é questionável.
Formalização de Algoritmo

Conceito de programa, como introduzido anteriormente,
satisfaz à noção intuitiva de algoritmo.
Formalização de Algoritmo

Conceito de programa, como introduzido anteriormente,
satisfaz à noção intuitiva de algoritmo.
OBJETIVO
Caracterizar a natureza de algoritmo com uma definição
formal, para poder negar a existência de um algoritmo para
resolver um problema particular.
Máquina de Turing



Provavelmente é o modelo mais utilizado para formalizar o
conceito algoritmo.
Proposto em 1936 por Alan Turing (10 anos antes do
primeiro computador digital).
O ponto de partida de Turing foi analisar a situação na qual
uma pessoa, equipada com um instrumento de escrita e um
apagador, realiza cálculos em uma folha de papel
quadriculada.
Máquina de Turing

Duas abordagens para se estudar:
Como modelos
reconhecedores de Linguagens
Como modelos processadores
de Funções
Máquina de Turing  Autômatos
Máquinas
de Turing
Autômatos
de pilha
Autômatos
finitos
Máquina de Turing  Autômatos
Autômatos
Finitos
Memória
Finita
Autômatos
de Pilha
Máquinas
de Turing
Memória
infinita
Memória
infinita
Acesso
restrito
Acesso
irrestrito
Máquina de Turing  Autômatos
Possui fita infinita.
 A máquina pode ler da fita e escrever na fita.
 O cabeçote pode se mover para a direita e para a
esquerda.
 Condições de parada:

–
–
–
Função indefinida
Movimento inválido (mover à esquerda do início da fita)
Estado final (parada imediata)
Esquema da Máquina de Turing
Exemplo


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
0
1
2
3
4
5
6
7
8
9
10
11

0
1
0
1
#
0
1
0
1


Controle
Exemplo: Estratégia

0
1
0
1
#
0
1
0
1


1
• Posiciona o cabeçote no primeiro símbolo da palavra
2
• Percorrer a fita em zig-zag, verificando se as correspondentes posições na primeira e segunda
metades (delimitadas pelo símbolo #) contêm os mesmos símbolos; Marcar com X os símbolos
já verificados.
• Se os símbolos não coincidem ou o # não é encontrado, a palavra deve ser rejeitada.
3
• Quando todos os símbolos da primeira metade já tiverem sido marcados, verificar se todos os
símbolos da segunda metade também foram marcados.
• Caso afirmativo, a palavra deve ser aceita, caso contrário deve ser rejeitada.
Posicionar no início da
palavra
• Lê e escreve o símbolo do início da
fita e move para a direita.
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
0
1
2
3
4
5
6
7
8
9
10
11

0
1
0
1
#
0
1
0
1


Controle
Posicionar no início da
palavra
• Lê e escreve o símbolo do início da
fita e move para a direita.
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
0
1
2
3
4
5
6
7
8
9
10
11

0
1
0
1
#
0
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

0
1
0
1
#
0
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
0
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
0
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
0
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
0
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
0
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
0
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
1
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
0
1
#
X
1
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
0
1
#
X
X
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
0
1
#
X
X
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
1
#
X
X
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
1
#
X
X
0
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
1
#
X
X
X
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
1
#
X
X
X
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
X
#
X
X
X
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
X
#
X
X
X
1


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
X
#
X
X
X
X


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
X
#
X
X
X
X


Controle
Zig-Zag procurando
correspondentes
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira metade
e marque-o;
• Retorna para a primeira metade até
encontrar 1º símbolo não marcado.
Se não encontrar, passa para a
próxima etapa;
• Reinicia o processo.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
X
#
X
X
X
X


Controle
Conferir se os símbolos
da segunda metade
foram todos lidos
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Percorre a fita para a direita lendo o
# e X’s até encontrar o primeiro
branco ();
• Se encontrar, palavra é aceita, caso
contrário é rejeitada.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
X
#
X
X
X
X


Controle
Conferir se os símbolos
da segunda metade
foram todos lidos
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Percorre a fita para a direita lendo o
# e X’s até encontrar o primeiro
branco ();
• Se encontrar, palavra é aceita, caso
contrário é rejeitada.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
X
#
X
X
X
X


Controle
Conferir se os símbolos
da segunda metade
foram todos lidos
Exemplo: Estratégia


• Percorre a fita para a direita lendo o
# e X’s até encontrar o primeiro
branco ();
• Se encontrar, palavra é aceita, caso
contrário é rejeitada.
Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
X
#
X
X
X
X


Controle
Conferir se os símbolos
da segunda metade
foram todos lidos
Exemplo: Estratégia


Linguagem 𝐿 = {𝑤#𝑤 | 𝑤 ∈ {0,1}∗ }
Reconhecimento da palavra 0101#0101
• Percorre a fita para a direita lendo o
# e X’s até encontrar o primeiro
branco ();
• Se encontrar, palavra é aceita, caso
contrário é rejeitada.
0
1
2
3
4
5
6
7
8
9
10
11

X
X
X
X
#
X
X
X
X


Palavra
Controle
Aceita
Diagrama de estados (Grafo)
estado corrente
novo estado
símbolo lido
sentido do movimento
símbolo gravado
Diagrama de estados (Grafo)
estado corrente
novo estado
símbolo lido
sentido do movimento
símbolo gravado
Exemplo: Diagrama de estados
• Lê e escreve o símbolo do início
da fita e move para a direita.
Exemplo: Diagrama de estados

0
1
0
1
#
0
1
0
1


• Lê e escreve o símbolo do início
da fita e move para a direita.
Exemplo: Diagrama de estados

0
1
0
1
#
0
1
0
1


• Lê e escreve o símbolo do início
da fita e move para a direita.
Exemplo: Diagrama de estados

0
Está no primeiro
símbolo da palavra
1
0
1
#
0
1
0
1


Exemplo: Diagrama de estados

0
Está no primeiro
símbolo da palavra
1
0
1
#
0
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
1
0
1
Marcou um 0 na
primeira metade
Marcou um 1 na
primeira metade
#
0
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
1
0
1
Marcou um 0 na
primeira metade
Marcou um 1 na
primeira metade
#
0
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
1
0
1
Marcou um 0 na
primeira metade e
lê 0’s e 1’s até #
Marcou um 1 na
primeira metade e
lê 0’s e 1’s até #
#
0
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
1
0
1
Marcou um 0 na
primeira metade e
lê 0’s e 1’s até #
Marcou um 1 na
primeira metade e
lê 0’s e 1’s até #
#
0
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
1
0
1
#
0
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Iniciou a
segunda metade
Iniciou a
segunda metade
Exemplo: Diagrama de estados

X
1
0
1
#
0
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Iniciou a
segunda metade
e lê X’s até 0
Iniciou a
segunda metade
e lê X’s até 1
Exemplo: Diagrama de estados

X
1
0
1
#
0
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Iniciou a
segunda metade
e lê X’s até 0
Iniciou a
segunda metade
e lê X’s até 1
Exemplo: Diagrama de estados

X
1
0
1
#
X
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Marcou o símbolo da
segunda metade e volta
para primeira metade
Exemplo: Diagrama de estados

X
1
0
1
#
X
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Marcou o símbolo da
segunda metade e volta
para primeira metade
Exemplo: Diagrama de estados

X
1
0
1
#
X
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Marcou o símbolo da
segunda metade e volta
para primeira metade
Exemplo: Diagrama de estados

X
1
0
1
Final da primeira
metade e volta até
encontrar um X
#
X
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
1
0
1
Final da primeira
metade e volta até
encontrar um X
#
X
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
Está no primeiro
símbolo não marcado
da primeira metade
1
0
1
#
X
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
Está no primeiro
símbolo não marcado
da primeira metade
1
0
1
#
X
1
0
1


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
Está no primeiro
símbolo não marcado
da primeira metade
X
X
X
#
X
X
X
X


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
Está no primeiro
símbolo não marcado
da primeira metade
X
X
X
#
X
X
X
X


• Marque o símbolo corrente;
• Percorra até o 1º símbolo não
marcado da segunda metade,
verifique se ele corresponde ao
símbolo marcado na primeira
metade e marque-o;
• Retorna para a primeira metade
até encontrar 1º símbolo não
marcado. Se não encontrar, passa
para a próxima etapa;
• Reinicia o processo.
Exemplo: Diagrama de estados

X
Está no primeiro
símbolo não marcado
da primeira metade
X
X
X
#
X
X
X
X


• Percorre a fita para a direita lendo
o # e X’s até encontrar o primeiro
branco ();
• Se encontrar, palavra é aceita,
caso contrário é rejeitada.
Exemplo: Diagrama de estados

X
Leu toda a primeira
metade e percorre a
fita até o 
X
X
X
#
X
X
X
X


• Percorre a fita para a direita lendo
o # e X’s até encontrar o primeiro
branco ();
• Se encontrar, palavra é aceita,
caso contrário é rejeitada.
Exemplo: Diagrama de estados

X
Leu toda a primeira
metade e percorre a
fita até o 
X
X
X
#
X
X
X
X


• Percorre a fita para a direita lendo
o # e X’s até encontrar o primeiro
branco ();
• Se encontrar, palavra é aceita,
caso contrário é rejeitada.
Exemplo: Diagrama de estados

X
X
Estado final
X
X
#
X
X
X
X


• Percorre a fita para a direita lendo
o # e X’s até encontrar o primeiro
branco ();
• Se encontrar, palavra é aceita,
caso contrário é rejeitada.
Indicadores

Você é capaz de:
–
–
–
–
explicar qual a importância das máquinas de Turing para a área de
Teoria da Computação?
compreender o funcionamento das máquinas de Turing,
identificando seus diferentes componentes?
compreender e estabelecer estratégias para o uso de máquinas de
Turing para o reconhecimento de uma determinada linguagem?
definir uma máquina de Turing através de diagrama de estados para
aceitar uma linguagem?
Tarefa

Resolver os exercícios 1 e 2 da Lista de Exercícios 5.
Download