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.