Estrutura de Dados

Introdução: conceitos e ideias

Prof. Yuri Maluf

Máquina de Turing

Uma máquina de Turing pode ser descrita informalmente na figura de um dispositivo que consiste em:

  1. 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.

  2. Um cabeçote, que pode ler e escrever símbolos na fita e mover-se para a esquerda ou para a direita.

Máquina de Turing

  1. 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.

  2. 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.

Exemplo - Máquina de Turing

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.

  1. Leia o símbolo sob a cabeça1

  2. Escreva o símbolo de saída decidida pelo estado

  3. Mova a fita para a esquerda ou para a direita decidido pelo estado

  4. Mude para o seguinte estado decidida pelo estado atual

Exemplo

Máquina de Turing para Cópia de Sequência de 1’s
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\)

Exemplo

Algoritmo

Algoritmo

Background

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:

  • um clock 1Hz (4Hz no teoria) sendo capaz de realizar as quatro operações aritméticas.

  • dois registradores internos, R1 e R2.

  • programação com cartões perfurados em uma fita com capacidade de representar 8 bits.

Konrad Zuse o desenvolvedor do Z1 junto a uma réplica de sua invensão

Konrad Zuse o desenvolvedor do Z1 junto a uma réplica de sua invensão

Background

O Z1 comportava 8 instruções dividida em 3 grupos:

  1. Entrada e saída:

    1. Lu – para carregar um valor decimal a partir do dispositivo de entrada.

    2. Ld – para enviar um valor decimal ao dispositivo de saída.

  2. Leitura e escrita na memória:

    1. 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.

    2. Ps z – para colocar o conteúdo do registrador R1 na célula de memória z.

  3. Quatro instruções aritméticas:

    1. Ls1 – para adicionar dois números nos registradores R1 e R2.

    2. Ls2 – para subtrair dois números nos registradores R1 e R2.

    3. Lm – para multiplicar dois números nos registradores R1 e R2.

    4. 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.

Algoritmo

Diagrama Genérico de Algoritmo

Diagrama Genérico de Algoritmo

Eficiência

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

Exter

Departamento