Introdução: conceitos e ideias
Uma máquina de Turing pode ser descrita informalmente na figura de um dispositivo que consiste em:
Uma fita que é dividida em células, uma adjacente à outra. Cada célula contém um símbolo de algum alfabeto finito. O alfabeto contém um símbolo especial branco (representado como * ) e um ou mais símbolos adicionais. Assume-se que a fita é arbitrariamente extensível para a esquerda e para a direita, isto é, a máquina de Turing possui tanta fita quanto é necessário para a computação. Assume-se também que células que ainda não foram escritas estão preenchidas com o símbolo branco.
Um cabeçote, que pode ler e escrever símbolos na fita e mover-se para a esquerda ou para a direita.
Um registrador de estados, que armazena o estado da máquina de Turing. O número de estados diferentes é sempre finito e há um estado especial denominado estado inicial com o qual o registrador de estado é inicializado.
Uma tabela de ação (ou função de transição) que diz à máquina que símbolo escrever, como mover o cabeçote ( ←,→) e qual será seu novo estado, dados o símbolo que ele acabou de ler na fita e o estado em que se encontra. Se não houver entrada alguma na tabela para a combinação atual de símbolo e estado então a máquina para.
A importância dessa máquina simples não está em poder ser ou não construída ou em sua eficiência, mas no fato de que até hoje ninguém conseguiu definir uma máquina capaz de computar funções que essa não possa.
Considere uma máquina que necessita de 5 estados de operação, chamados de {\(s_1\), \(s_2\), \(s_3\), \(s_4\), \(s_5\)} e que possua 4 ações.
Leia o símbolo sob a cabeça1
Escreva o símbolo de saída decidida pelo estado
Mova a fita para a esquerda ou para a direita decidido pelo estado
Mude para o seguinte estado decidida pelo estado atual
Estado Atual | Símbolo na Fita | Operação na Fita | Movimento | Próximo Estado |
---|---|---|---|---|
\(s_1\) | 1 | \(\oplus\) | \(\rightarrow\) | \(s_2\) |
\(s_1\) | 1 | 1 | \(\rightarrow\) | \(s_2\) |
\(s_2\) | \(\oplus\) | \(\oplus\) | \(\rightarrow\) | \(s_3\) |
\(s_2\) | \(\oplus\) | 1 | \(\leftarrow\) | \(s_4\) |
\(s_3\) | 1 | 1 | \(\rightarrow\) | \(s_3\) |
\(s_3\) | 1 | 1 | \(\leftarrow\) | \(s_4\) |
\(s_4\) | \(\oplus\) | \(\oplus\) | \(\leftarrow\) | \(s_5\) |
\(s_4\) | 1 | 1 | \(\leftarrow\) | \(s_5\) |
\(s_5\) | \(\oplus\) | 1 | \(\rightarrow\) | \(s_1\) |
Na Alemanha entre 1926-1938 o engenheiro Konrad Zuse desenvolve o primeiro computador programável efetivamente. Sua construção foi concluída 7 anos antes do ENIAC. O Z1 possuía:
O Z1 comportava 8 instruções dividida em 3 grupos:
Entrada e saída:
Lu – para carregar um valor decimal a partir do dispositivo de entrada.
Ld – para enviar um valor decimal ao dispositivo de saída.
Leitura e escrita na memória:
Pr z – para colocar o conteúdo da célula de memória z em R1 se estivesse vago ou R2 caso R1 estivesse ocupado.
Ps z – para colocar o conteúdo do registrador R1 na célula de memória z.
Quatro instruções aritméticas:
Ls1 – para adicionar dois números nos registradores R1 e R2.
Ls2 – para subtrair dois números nos registradores R1 e R2.
Lm – para multiplicar dois números nos registradores R1 e R2.
Li – para dividir dois números nos registradores R1 e R2
Pouco tempo depois foi desenvolvida uma nova versão, o Z3. Ele foi o primeiro computador de lógica digital e totalmente programável do mundo. Ele contava 2600 relés e um clock de 5-10Hz. O código dos programas eram armazenados em fitas magnéticas.
De uma maneira ampla a eficiência pode ser entendida como a razão entre output e input
\[ \text{Eficiência} = \frac{\text{Output}}{\text{Input}} \]
Exemplo de input
Tamanho arquivo (bytes)
Consumo de energia KW/h
Número de repetições ou de replicações
Núcleos de processamento
Número de passos ou processo
Quantidade de dimensões ou total de argumentos
Taxa de frequência de pacotes
Custo monetário
Temperatura
Tempo
Os parâmetros de output são mais dependentes das particularidades do caso em específico. Em geral podemos citar:
Tamanho arquivo (bytes)
Erro ou precisão
Total de fluxo de dados ou consumido