Buscar

CONTEUDO ASPECTOS TEÓRICOS

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 170 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 170 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 170 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ASPECTOS TEÓRICOS DA COMPUTAÇÃO
TURMA: CIÊNCIAS DA COMPUTAÇÃO
Professor: Rogério Gião
ATC - INTRODUÇÃO
A teoria da computação encontra-se entre os campos das Ciências da
Computação e a matemática, onde a partir de um dado problema é
estudado como ele pode ser solucionado (computado) em
determinado modelo da computação, ou seja, analisa os modelos
computacionais e sua referente capacidade de computar relacionando
quais os problemas podem ser resolvidos por cada modelo.
ATC - INTRODUÇÃO
As linguagens formais surgiram por volta do século XX, década de 50,
com o objetivo de distanciar as linguagens naturais humanas e a
linguagens dos computadores, formou-se então as linguagens de
programação.
Uma linguagem (L) é um conjunto finito de sentenças de comprimento
finito, que são construídas considerando determinado alfabeto
composto por um conjunto finito de símbolos. (CHOMSKY, 1959)
ATC - INTRODUÇÃO
Linguagem Regular
Pode ser expressa por expressões regulares e pertence ao nível 3 na
hierarquia. Conjunto de palavras que necessita apenas de memória
finita para ser corrigida sintaticamente e a estrutura delas segue um
padrão.
Todas linguagens finitas são regulares e podem ser reconhecidas por
autômatos finitos.
É uma restrição sobre a forma das produções, pode-se criar uma nova
classe de gramáticas de grande importância no estudo dos
compiladores por possuírem propriedades adequadas para a obtenção
de reconhecedores simples.
ATC - INTRODUÇÃO
Linguagem Livre de Contexto
Palavras que podem ter seus padrões estruturais sequenciais.
Pertence ao nível 2 na hierarquia, é produzida por alguma gramática
livre de contexto e é reconhecida por autômatos com pilha.
São aquelas em que é levantado o condicionamento das substituições
impostas pelas regras definidas pelas produções. Este condicionamento
é eliminado impondo às produções uma restrição adicional, que
restringe as produções à forma geral.
ATC - INTRODUÇÃO
Linguagens Sensíveis ao Contexto
Encontra-se no nível 1 na hierarquia e é reconhecida por autômatos
lineares limitados (Turing limitada).
Se as regras de substituição forem sujeitas à restrição de que nenhuma
substituição possa reduzir o comprimento da forma sentencial à qual a
substituição é aplicada, cria-se uma classe chamada sensíveis ao
contexto
ATC - INTRODUÇÃO
Gramática com Estrutura de Frase - Recursivamente Enumerável
Pertence ao nível 0 na hierarquia e pode ser reconhecida por
Máquinas de Turing.
Aquelas às quais nenhuma limitação é imposta.
O universo das linguagens que se podem definir através dos
mecanismos gerativos definidos pela gramática corresponde
exatamente ao conjunto das linguagens que esta classe de gramática é
capaz de gerar.
ATC – HIERARQUIA DE CHOMSKY
Hierarquia de Chomsky foi uma classificação desenvolvida por Noan
Chomsky em 1959. A categorização possui 4 níveis, onde os níveis 2 e 3
que são os dois últimos são os amplamente utilizados na definição de
linguagem de programação e na implementação de interpretadores e
compiladores.
Mais especificamente, o nível 2 é utilizado em analise sintática e o
nível 3 em analise léxica.
ATC – HIERARQUIA DE CHOMSKY
Possui a característica de exibir o mérito de agrupar as linguagens em
classes, de tal forma que elas possam ser hierarquizadas segundo a sua
complexidade relativa.
Basicamente a hierarquia é um arranjo de gramáticas formais onde são
divididas em 4 níveis, 0 até 3, e cada nível da classificação descreve o
nível de liberdade da linguagem.
ATC – HIERARQUIA DE CHOMSKY
Representação da Hierarquia de Chomsky
ATC – HIERARQUIA DE CHOMSKY
Gramática Tipo 0
As gramáticas classificas com esse nível são conhecidas como
‘Gramáticas irrestritas’, são aquelas que não possuem limitações.
Inclui todas as linguagens formais e gera exatamente o grupo com
todas as linguagens que podem ser identificadas pela Máquina de
Turing.
ATC – HIERARQUIA DE CHOMSKY
Gramática Tipo 1
As "Gramáticas sensíveis ao contexto" estão sujeitas a regra de
substituição.
Esse grupo gramatical forma o conjunto que é reconhecido por
autômatos lineares limitados (uma máquina de Turing limitada).
ATC – HIERARQUIA DE CHOMSKY
Gramática Tipo 2
As gramáticas deste tipo são as ‘Gramáticas livres de contexto’.
Estas são a base teórica para a maioria das linguagens de programação
e são definidas por uma regra que especifica as substituições que
podem ser feitas neste tipo de gramática. São reconhecidas pelos
chamados autômatos com pilha.
ATC – HIERARQUIA DE CHOMSKY
Gramática Tipo 3
Nas gramáticas de tipo 3 temos as chamadas "Gramáticas Regulares"
que são reconhecidas pelos autômatos de estados finitos.
Neste nível as linguagens possuem regras bem restritas o que torna
fácil o seu reconhecimento.
ATC – HIERARQUIA DE CHOMSKY
Pelo fato de as linguagens serem classificadas na hierarquia de
Chomsky de acordo com as limitações impostas nas regras de produção
das gramáticas, ao se descer na hierarquia de Chomsky, mais
flexibilidade é promovida por parte das gramáticas, de modo que toda
linguagem regular é uma linguagem livre de contexto, toda linguagem
livre de contexto é uma linguagem sensível ao contexto e toda
linguagem sensível ao contexto é uma linguagem de nível 0.
ATC – HIERARQUIA DE CHOMSKY
Teoria dos Autômatos
ATC – HIERARQUIA DE CHOMSKY
Teoria dos Autômatos:
É o estudo das máquinas abstratas ou autômatos, bem como
problemas computacionais que podem ser resolvidos usando esses
objetos.
A palavra autômato vem do grego e significa “autuação” (em tradução
livre), isto é, sem influência externa.
Representação de assuntos
Relacionados.
ATC – HIERARQUIA DE CHOMSKY
Linguagem Formal:
Entende-se por linguagem formal estudo de modelos matemáticos que
possibilitam a especificação e o reconhecimento de linguagens (no
sentido amplo da palavra), suas classificações, estruturas,
propriedades, características e inter-relacionamentos .
ATC – HIERARQUIA DE CHOMSKY
Linguagem Formal:
A importância dessa teoria na ciência da computação é dupla: ela tanto
apoia outros aspectos teóricos da ciência da computação
(decidibilidade, computabilidade, complexidade computacional, por
exemplo), como fundamenta diversas aplicações computacionais tais
como processamento de linguagens, reconhecimento de padrões,
modelagem de sistemas.
ATC – HIERARQUIA DE CHOMSKY
Gramática Formal:
Em teoria das linguagens formais, uma gramática formal (algumas
vezes simplesmente chamada de gramática) é um conjunto de regras
de produção de cadeias em uma linguagem formal, ou seja, um objeto
que permite especificar uma linguagem ou língua. As regras descrevem
como formar cadeias ― a partir do alfabeto da linguagem ― que são
válidas de acordo com a sintaxe da linguagem.
Uma gramática não descreve significado das cadeias ou o que pode ser
feito com elas em um contexto ― apenas suas formas.
ATC – HIERARQUIA DE CHOMSKY
Em uma Linguagem de Programação (Java, C#, por exemplo) ocorrem
três componentes da Hierarquia de Chomsky: a componente regular, a
livre de contexto e a dependente de contexto.
O compilador, que é o software que traduz a Linguagem de
Programação de alto nível para a Linguagem de Máquina, emprega
algoritmos advindos do estudo das Linguagens Regulares e Livres de
Contexto.
ATC – HIERARQUIA DE CHOMSKY
A análise de cada palavra de um programa escrito em uma Linguagem
de Programação qualquer, denominada Análise Léxica, usa os
algoritmos obtidos do estudo das Linguagens Regulares.
Estes algoritmos são a realização do modelo computacional
denominado Máquina de Estados Finitos.
ATC – HIERARQUIA DE CHOMSKY
Análise Léxica
É o processo de analisar a entrada de linhas de caracteres (tal como o
código-fonte de um programa de computador) e produzir uma
sequência de símbolos chamado "símbolos léxicos" (lexical tokens), ou
somente "símbolos" (tokens), que podem ser manipulados mais
facilmente por um leitor de saída.
Um Token em computação éum segmento de texto ou símbolo que
pode ser manipulado por um analisador sintático, que fornece um
significado ao texto; em outras palavras, é um conjunto de caracteres
(de um alfabeto, por exemplo) com um significado coletivo.
ATC – HIERARQUIA DE CHOMSKY
Análise Léxica
Tokens são os padrões que ocorrem em uma string, por exemplo: em
uma data, 29/03/1991, poderia utilizar dois tokens para dividir a string
em três partes, utilizando a barra / como padrão.
Desse modo, qualquer data que for inserida poderá ser dividida e
analisada separadamente em dia, mês e ano.
O mesmo pode ser feito com expressões regulares, mas o método de
tokens utiliza muito menos processamento, e, portanto, é mais rápido,
apesar de não ser tão robusto.
ATC – HIERARQUIA DE CHOMSKY
Análise Léxica
A Análise Léxica é a forma de verificar determinado alfabeto.
Quando analisamos uma palavra, podemos definir através da análise
léxica se existe ou não algum caractere que não faz parte do nosso
alfabeto, ou um alfabeto inventado por nós.
O analisador léxico é a primeira etapa de um compilador, logo após virá
a análise sintática.
ATC – HIERARQUIA DE CHOMSKY
A análise de cada comando (if, while, atribuição) e demais estruturas
sintáticas (classes, declarações de variáveis, etc.) de um programa
desenvolvido em uma Linguagem de Programação, a Análise Sintática,
emprega algoritmos advindos de estudo das Linguagens Livres de
Contexto.
ATC – HIERARQUIA DE CHOMSKY
A componente Dependente de Contexto em uma Linguagem de
Programação pode ser identificada na concordância entre a declaração
de tipos das variáveis de uma variável, e uso das mesmas, na
concordância entre o número de parâmetros na declaração de um
método de uma classe e o número de argumentos no uso do método
de um objeto, em sobrecarga de métodos, etc.
ATC – HIERARQUIA DE CHOMSKY
Análise Sintática
Em ciência da computação e linguística, análise sintática (também
conhecida pelo termo em inglês parsing) é o processo de analisar uma
sequência de entrada (lida de um arquivo de computador ou do
teclado, por exemplo) para determinar sua estrutura gramatical
segundo uma determinada gramática formal.
Essa análise faz parte de um compilador, junto com a análise léxica e
análise semântica.
ATC – HIERARQUIA DE CHOMSKY
Análise Sintática
A análise sintática transforma um texto na entrada em uma estrutura
de dados, em geral uma árvore, o que é conveniente para
processamento posterior e captura a hierarquia implícita desta
entrada.
Através da análise léxica é obtido um grupo de tokens, para que o
analisador sintático use um conjunto de regras para construir uma
árvore sintática da estrutura.
ATC – HIERARQUIA DE CHOMSKY
Análise Sintática
Em termos práticos, por exemplo, pode também ser usada para
decompor um texto em unidades estruturais para serem organizadas
dentro de um bloco.
A vasta maioria dos analisadores sintáticos implementados em
compiladores aceitam alguma linguagem livre de contexto para fazer a
análise.
MÁQUINA DE ESTADOS FINITOS
Definição
As máquinas de estados finitos são máquinas abstratas que capturam
as partes essenciais de algumas máquinas concretas.
Essas últimas vão desde máquinas de vender jornais e de vender
refrigerantes, passando por relógios digitais e elevadores, até
programas de computador, como alguns procedimentos de editores de
textos e de compiladores.
MÁQUINA DE ESTADOS FINITOS
Definição
Existem, basicamente, dois tipos de máquinas de estados finitos: os
transdutores e os reconhecedores (ou aceitadores) de linguagens.
Os transdutores são máquinas com entrada e saída, e os
reconhecedores são máquinas com apenas duas saídas possíveis;
geralmente uma delas significa “aceitação” da entrada, e a outra,
“rejeição” da entrada.
MÁQUINA DE ESTADOS FINITOS
Definição
Uma característica fundamental de uma máquina de estados finitos é
que sua memória é limitada e exclusivamente organizada em torno do
conceito de “estado”.
MÁQUINA DE ESTADOS FINITOS
Definição
Uma máquina de estados é um modelo matemático usado para
representar programas.
• Conjunto de estados.
• Regras de transição entre estados.
• Estado atual.
MÁQUINA DE ESTADOS FINITOS
Representação Clássica
MÁQUINA DE ESTADOS FINITOS
Exemplo
Um exemplo bem simples de uma FSM é um interruptor de luz.
MÁQUINA DE ESTADOS FINITOS
Em um sistema computacional normalmente uma FSM não é tão
simples assim, visto que geralmente os agentes podem ter um
conjunto muito maior de estados.
MÁQUINA DE ESTADOS FINITOS
Exemplo:
Jogo Pac Man
Os fantasmas Inky, Pinky, Blinky e Clyde do jogo Pac-man são
implementados via FSM.
Os fantasmas tem 3 comportamentos:
• Caçar (Chase)
• Fugir (Evade)
• Dispersar (Scatter)
MÁQUINA DE ESTADOS FINITOS
Exemplo:
MÁQUINA DE TURING
Definição:
Trata-se de um dispositivo imaginário embasado por uma teoria
revolucionária do seu autor, o britânico Alan Mathison Turing,
concebida aos 24 anos de idade.
A máquina de Turing formou a estrutura básica para fundamentar a
ciência da computação moderna e a computabilidade.
Foi responsável anos depois, pelo reconhecimento da comunidade
científica, declarando Turing com o título simbólico de “pai da
computação”.
MÁQUINA DE TURING
A teoria foi publicada pela primeira vez em 1936, num artigo intitulado
"On Computable Numbers, with an Application on the
Entscheidungsproblem".
Apesar da máquina de Turing não ter sido implementada fisicamente,
na totalidade pelo seu autor, o processo computacional foi
matematicamente demostrado e provado no artigo.
MÁQUINA DE TURING
Turing explicitou um dispositivo lógico que ele chamou de "automatic
machine" (ou “a-machine”), capaz de ler, escrever e apagar símbolos
binários em uma fita de comprimento ilimitado e dividida por
quadrados de igual tamanho. Uma cabeça de leitura/gravação se
moveria em qualquer direção ao longo da fita, um quadrado
por vez, e uma unidade de controle poderia interpretar uma lista de
instruções simples, movendo-se para a direita ou esquerda. A regra
executada determina o que se convencionou chamar de estado da
máquina.
MÁQUINA DE TURING
Representação da Máquina de Turing
Fita:
Usada simultaneamente como dispositivo de entrada, de saída e de
memória de trabalho;
É finita à esquerda e infinita (tão grande quanto necessário) à direita,
sendo dividida em células, cada uma das quais armazenando um
símbolo.
MÁQUINA DE TURING
O conceito de máquina de Turing é semelhante ao de uma fórmula ou
equação. Assim, há uma infinidade de possíveis máquinas de Turing,
cada uma correspondendo a um método definido ou algoritmo.
Turing propôs que cada algoritmo, formalizado como um conjunto
finito de instruções bem definidas, pudesse ser interpretado e
executado por um processo mecânico.
MÁQUINA DE TURING
Formalmente a máquina de Turing pode ser definida como uma
máquina que contém:
• Um conjunto finito de estados Q com um estado inicial distinto,
• Um conjunto finito de símbolos Σ.
MÁQUINA DE TURING
A interpretação e execução dos algoritmos são realizadas por estados e
uma função de transição determina o novo conteúdo da fita. Deste
modo, por restrição imposta ao algoritmo, pode-se alterar o conteúdo
de apenas um quadrado por vez ou movimentar a cabeça, no máximo
uma célula em qualquer direção.
É permitida também a utilização de qualquer conjunto finito de
símbolos para o alfabeto Σ, mesmo que a definição original tenha
insistido em Σ = {0,1}.
Esta mudança não tem impacto sobre a definição do conjunto de
funções computáveis pela máquina.
MÁQUINA DE TURING
Símbolos de uma MT
Os símbolos podem pertencer:
Inicialmente, a palavra a ser processada ocupa as células mais à
esquerda, após o marcador de início de fita, ficando as demais com
branco.
MÁQUINA DE TURING
Unidade de Controle
Reflete o estado corrente da máquina.
• Possui um número finito e predefinido de estados.
• Possui uma unidade de leitura e gravação (cabeça da fita),a qual
acessa uma célula da fita de cada vez.
• A cabeça da fita lê o símbolo de uma célula de cada vez e grava um
novo símbolo. Após a leitura/gravação (a gravação é realizada na
mesma célula de leitura), a cabeça move-se uma célula para a
direita ou esquerda.
MÁQUINA DE TURING
Programa ou Função de Transição.
• O programa comanda as leituras e gravações, o sentido de
movimento da cabeça e define o estado da máquina.
• Programa é uma função que, dependendo do estado corrente da
máquina e do símbolo lido, determina o símbolo a ser gravado, o
sentido do movimento da cabeça e o novo estado.
MÁQUINA DE TURING
Símbolos
MÁQUINA DE TURING
Função de Transição.
A Função de Transição será definida da seguinte forma:
• Um estado que lê um símbolo indo para outro estado onde escreve
outro símbolo e nos informa a direção que deve ser seguida.
MÁQUINA DE TURING
Modelo Formal
MÁQUINA DE TURING
Modelo Formal
MÁQUINA DE TURING
Modelo Formal
MÁQUINA DE TURING
Modelo Formal
MÁQUINA DE TURING
Exemplo 1
MÁQUINA DE TURING
Exemplo 2
MÁQUINA DE TURING
Linguagem Recursivamente Enumerável
Definição:
Em matemática, lógica e ciência da computação, uma linguagem
recursivamente enumerável é um tipo de Linguagem formal que
também é chamada de linguagem Turing-reconhecível.
MÁQUINA DE TURING
Linguagem Recursivamente Enumerável
Existem três equivalentes definições importantes para o conceito de
uma linguagem recursivamente enumerável:
1. Uma linguagem recursivamente enumerável formal é um
subconjunto recursivamente enumerável no conjunto de todas as
palavras possíveis sob o alfabeto da linguagem.
MÁQUINA DE TURING
Linguagem Recursivamente Enumerável
2. Uma linguagem recursivamente enumerável é uma linguagem
formal para a qual existe uma máquina de Turing que irá enumerar
todas as cadeias válidas da linguagem. Note que, se a linguagem é
infinita, o algoritmo de enumeração fornecido pode ser escolhido
de forma que evite repetições, uma vez que podemos testar se a
cadeia produzida para o número n é já é produzida para um
número que é inferior a n. Se ela já é produzida, use a saída da
entrada n+1 (recursivamente), mas mais uma vez, teste se é uma
cadeia nova.
MÁQUINA DE TURING
Linguagem Recursivamente Enumerável
3. Uma linguagem recursivamente enumerável é uma linguagem
formal para a qual existe uma máquina de Turing que irá parar e
aceitar quando se roda com qualquer cadeia da linguagem na
entrada e pode parar e rejeitar ou entrar em loop quando se roda
com qualquer cadeia que não é da linguagem. Esta é a diferença
entre linguagem recursiva, que exige que a máquina de Turing
sempre pare.
MÁQUINA DE TURING
Linguagem Recursivamente Enumerável
MÁQUINA DE TURING
Linguagem Recursivamente Enumerável
MÁQUINA DE TURING
Linguagem Recursiva
MÁQUINA DE TURING
Linguagem Recursiva
MÁQUINA DE TURING
Hipótese de Turing – Church
A tese de Turing- Chuch diz respeito à noção de um método mecânico e
efetivo no contexto da Lógica e Matemática. Efetivo e seu sinônimo
mecânico, são termos destas disciplinas. Não apresentam o significado
do nosso dia-a-dia.
Um método, ou procedimento, M, que é empregado para se obter um
resultado desejado é denominado “efetivo” ou mecânico.
MÁQUINA DE TURING
Hipótese de Turing – Church
Assim M:
- Deve ser descrito em um número finito de instruções exatas. (Cada
instrução sendo expressa por um número finito de símbolos);
- Se M não apresentar erros, deve produzir o resultado desejado em
um número finito de etapas;
- M pode ser realizado por um ser humano sem o auxílio de uma
máquina, ou seja, empregando apenas “lápis e papel”;
- O método M não deve exigir nenhuma inferência e nem mesmo
inventividade do ser humano que o executa.
MÁQUINA DE TURING
Hipótese de Turing – Church
O que é um algoritmo?
“Informalmente, um algoritmo é qualquer procedimento
computacional que recebe como entrada um ou mais valores e produz
como saída um ou mais valores. Um algoritmo é portanto uma
sequência etapas computacionais que transformam valores de entrada
para valores de saída” .
MÁQUINA DE TURING
Hipótese de Turing – Church
"As máquinas de Turing são versões formais de algoritmos e nenhum
procedimento computacional é considerado um algoritmo a não ser
que possa ser apresentado na forma de uma máquina de Turing"
MÁQUINA DE TURING
Hipótese de Turing – Church
Estabelece-se assim, a equivalência entre algoritmos e a Máquina de
Turing
Hipótese de Turing – Church: “Uma função da teoria dos números é
computável por um algoritmo se, e somente se, for computável por
Turing.”
Este enunciado da hipótese de Turing – Chuch é contemplado para a
computação dos números inteiros.
A máquina de Turing pode executar cálculos de números inteiros.
MÁQUINA DE TURING
Exemplo:
MÁQUINA DE TURING
Exemplo:
MÁQUINA DE TURING
Máquinas equivalentes à Máquina de Turing
Há provas formais que demonstram que o dispositivo da MT com fita
infinita possui exatamente o poder computacional de qualquer outra
versão estendida, tais como as seguintes:
- Múltiplas trilhas;
- Múltiplas fitas;
- Múltiplos cursores;
- Fita ilimitada em ambos os sentidos;
MÁQUINA DE TURING
Máquinas equivalentes à Máquina de Turing
- Transições que deslocam o cursor um número variável de posições;
- Transições sem leitura ou gravação de símbolos;
- Máquinas de Turing Multidimensionais;
- Máquinas de Turing com uma estrutura de memória auxiliar
organizada em pilha.
MÁQUINA DE TURING
Máquinas de Turing Não- Determinísticas
Nas máquinas de Turing, a função de transição g remete para o não
determinismo inerente aos dispositivos aceitadores apresentados.
Em outras palavras: dada uma mesma combinação de estado corrente
e de símbolo na fita de trabalho, é possível especificar múltiplas
transições.
MÁQUINA DE TURING
Máquina de Turing – Exemplo
Máquinas de Turing que aceita as seguintes linguagens
L = {w | w possui o mesmo número de a’s e b’s}
Resolução: 
M=({q0, q1, q2, q3, q4, q5}, {a,b}, {A,B }, δ, q0, □, {q5}, φ) 
MÁQUINA DE TURING
Máquina de Turing – Exemplo
MÁQUINA DE TURING
Máquina de Turing – Exemplo
Operação: 
- Se a partir do estado inicial (q0) é lido da fita o caractere “a” este é 
escrito “A” e a unidade de controle se desloca para direita até 
encontrar um “b” correspondente e escrever “B” no lugar deste, 
identificando um par de “a e b”. A partir deste ponto a unidade de 
controle se desloca para a esquerda até encontrar o “A” já marcado e o 
processo se reinicia. 
MÁQUINA DE TURING
Máquina de Turing – Exemplo
Operação
- Outro caminho possível a partir do estado inicial é ler o caractere “b”, 
escrever “B” e deslocar a unidade de controle para a direita até 
encontrar o “a” que formará o par e escrever “A”, de forma análoga ao 
outro caminho a unidade de controle se desloca para a esquerda até 
encontrar um “B” marcado e o processo se reinicia. 
Fim da operação: o processo termina quando a entrada for uma 
palavra vazia ou quando for encontrados todos os pares de a’s e b’s e o 
próximo caractere a ser lido for branco chegando ao estado final q5 
reconhecendo a palavra pertencente a linguagem. 
MÁQUINA DE TURING
Máquina de Turing – Simulador
Um software bastante conhecido como simulador de uma Máquina de
Turing é o JFLAP Version 7.1
http://www.jflap.org/
MÁQUINA DE TURING
Máquinas de Turing Universais
• Uma máquina de Turing Universal é uma máquina de Turing capaz
de simular qualquer outra apropriadamente codificada.
• “Processa programas que são codificações de máquinas de Turing.”
(Ramos, Vega e Neto, 2009).
• Simula a máquina descrita e produz como resultado o mesmo
resultado que a máquina simulada produziria.
• É universal, pois é capaz de executar qualquer algoritmo.
MÁQUINA DE TURING
Problema Solucionável (ou decidível)
Um problema é dito Solucionável ou Totalmente Solucionável se existe
um algoritmo que solucione o problema tal que sempre para qualquerentrada, com uma resposta afirmativa (aceita) ou negativa (rejeita).
MÁQUINA DE TURING
Problema Não-Solucionável (Não decidível)
Um problema é dito Não-Solucionável se não existe um algoritmo que
solucione o problema tal que sempre para, qualquer que seja a
entrada.
MÁQUINA DE TURING
Problema Parcialmente Solucionável ou Computável
Um problema é dito Parcialmente Solucionável ou Computável se
existe um algoritmo que solucione o problema tal que pare quando a
resposta é afirmativa (aceita).
Entretanto quando a resposta esperada for negativa, o algoritmo pode
parar (rejeita) ou permanecer processando indefinidamente.
MÁQUINA DE TURING
Problema Completamente Insolúvel
Um problema é dito Completamente Insolúvel ou Não-Computável se
não existe um algoritmo que solucione o problema tal que pare
quando a resposta é afirmativa.
É importante observar que alguns problemas não-solucionáveis são
parcialmente solucionáveis. Ainda, existem problemas não-
solucionáveis que possuem solução parcial.
MÁQUINA DE TURING
Problema Completamente Insolúvel
A Classe dos Problemas Solucionáveis é equivalente à Classe das
Linguagens Recursivas.
A Classe dos Problemas Parcialmente Solucionáveis é equivalente à
Classes das Linguagens Recursivamente Enumeráveis.
MÁQUINA DE TURING
Problema da Parada
O problema da parada é um problema de decisão sobre as
propriedades de programas de computadores em um determinado
modelo Turing-completo de computação, por exemplo todos os
programas que podem ser escritos em uma linguagem de programação
que é geralmente o suficiente para ser equivalente a uma máquina de
Turing.
O problema é determinar para uma dada entrada se o programa irá
parar com ela.
MÁQUINA DE TURING
Problema da Parada
Um problema de decisão é uma questão sobre um sistema formal com
uma resposta do tipo sim-ou-não.
Por exemplo, o problema: "dados dois números x e y, y é divisível por
x?" é um problema de decisão. Ou ainda: "Dado um número inteiro x, x
é um número primo?". A resposta para esses problemas pode ser 'sim'
ou 'não', e depende dos valores que as variáveis assumem em cada
instância do problema.
MÁQUINA DE TURING
Problema da Parada
Um problema de decisão também pode ser formalizado como o
problema de verificar se uma determinada cadeia de caracteres
pertence ou não a um conjunto de cadeias de caracteres, também
chamado de linguagem formal. O conjunto contém exatamente as
cadeias para as quais a resposta à pergunta é 'sim'.
MÁQUINA DE TURING
Problema da Parada
Métodos usados para resolver problemas de decisão são chamados de
procedimentos ou algoritmos.
Um algoritmo para o problema anterior explicaria em quais situações y
é divisível por x, dados x e y.
Um problema de decisão que pode ser resolvido por algum algoritmo é
chamado de problema de decisão decidível.
MÁQUINA DE TURING
Problema da Parada
Nesta área de trabalho abstrata não há limitações de memória ou
tempo necessário para a execução de um programa, pois poderão ser
necessários tempo e espaço arbitrários para o programa parar.
MÁQUINA DE TURING
Problema da Parada
A questão é se o programa simplesmente poderá parar com uma certa
entrada.
Por exemplo, em pseudocódigo, o programa:
enquanto Verdadeiro: continue
Não para, pelo contrário, entra em loop infinito. Por outro lado, o
programa:
imprimir "Hello World!"
Para muito rapidamente.
MÁQUINA DE TURING
Problema da Parada
Um programa mais complexo pode ser mais difícil de se analisar.
O programa pode rodar por um tempo fixo e se ele não parar, não há
um jeito de saber se o programa irá parar eventualmente ou se ele irá
continuar rodando para sempre.
Turing provou que não há um algoritmo que pode ser aplicado a
qualquer programa arbitrário, com uma entrada, para decidir se o
programa para ou não com esta entrada.
MÁQUINA DE TURING
Problema da Parada
A definição impõe que para uma dada entrada numérica de uma MT,
que possui um índice qualquer, a mesma irá parar para a condição
onde a entrada é igual ao índice pertencente ao estado da máquina. O
conjunto de entradas numéricas deve pertencer ao conjunto de
números naturais definidos para a máquina.
Quando isso acontece a MT para e indica através de uma determinada
sequência numérica.
Essa indicação pode ser através de uma sequência de valores 1, por
exemplo.
MÁQUINA DE TURING
Problemas Indecidíveis
Um problema indecidível é um problema de decisão em que é
impossível construir um algoritmo que sempre responde corretamente
sim ou não.
Um problema de decisão é qualquer questão arbitrária de sim-ou-não
sobre um conjunto infinito de entradas.
Por causa disto, é comum definir o problema de decisão de maneira
equivalente como: o conjunto de entradas para o qual o problema
retorna sim.
Estas entradas podem ser números naturais, mas também podem ser
outros valores de outros tipos, como cadeias de uma linguagem formal.
MÁQUINA DE TURING
Problemas Indecidíveis
Na teoria da computabilidade, o problema da parada é um problema
de decisão que pode ser estabelecido como:
Dada a descrição de um programa e uma entrada finita, decida se um
programa termina de executar ou se ele executará para sempre.
MÁQUINA DE TURING
Problemas Indecidíveis
Alan Turing que um algoritmo genérico, sendo executado sobre uma
máquina de Turing, que resolve o problema da parada para todos os
pares de entrada do programa possíveis necessariamente não pode
existir.
Consequentemente, o problema da parada é indecidível para
máquinas de Turing.
MÁQUINA DE TURING
Problemas Indecidíveis
Problemas indecidíveis podem estar relacionados a diferentes tópicos,
tais como lógica, máquinas abstratas ou topologia.
Observe que, como existem incontáveis problemas indecidíveis,
qualquer lista é, necessariamente, incompleta.
MÁQUINA DE TURING
Problemas Indecidíveis
É um exemplo de problema não solucionável:
a) Não existem problemas não solucionáveis.
b) Minimização de um autômato finito.
c) Detector universal de loops.
d) Reconhecimento de linguagens recursivas.
e) Tratamento de não determinismos em linguagens regulares.
Resposta: a alternativa correta é a c). O detector universal de loops, diz
respeito ao Problema da Parada.
MÁQUINA DE TURING
Complexidade Computacional
A teoria da complexidade computacional é um ramo que se concentra
em classificar problemas computacionais de acordo com sua
dificuldade inerente, e relacionar essas classes entre si.
Neste contexto, um problema computacional é entendido como uma
tarefa que é, em princípio, passível de ser resolvida por um
computador (o que basicamente significa que o problema pode ser
descrito por um conjunto de instruções matemáticas).
MÁQUINA DE TURING
Complexidade Computacional
Informalmente, um problema computacional consiste de instâncias do
problema e soluções para essas instâncias do problema.
Por exemplo, o teste de primalidade é o problema de determinar se um
dado número é primo ou não.
As instâncias deste problema são números naturais, e a solução para
uma instância é sim ou não, dependendo se o número é primo ou não.
MÁQUINA DE TURING
Complexidade Computacional
Um problema é considerado como inerentemente difícil se a sua
solução requer recursos significativos, qualquer que seja o algoritmo
usado.
A teoria formaliza esta intuição através da introdução de modelos
matemáticos de computação para estudar estes problemas e
quantificar os recursos necessários para resolvê-los, tais como tempo e
armazenamento.
MÁQUINA DE TURING
Complexidade Computacional
Outras medidas de complexidade também são utilizadas, tais como a
quantidade de comunicação (usada em complexidade de
comunicação), o número de portas em um circuito (usado na
complexidade de circuito) e o número de processadores (usados em
computação paralela).
Um dos papéis da teoria da complexidade computacional é determinar
os limites práticos do que os computadores podem e não podem fazer.
MÁQUINA DE TURINGComplexidade Computacional
Um modelo de computação é a definição de um conjunto de
operações que podem ser usadas numa computação e seus respectivos
custos.
Somente assumindo certo modelo de computação é possível analisar
os recursos computacionais requeridos, como tempo de execução e
espaço de armazenamento, ou discutir as limitações de algoritmos ou
computadores.
Na área de análise de algoritmos, é comum especificar um modelo de
computação em termos de operações primitivas, cada uma com um
custo unitário associado.
MÁQUINA DE TURING
Complexidade Computacional
Um modelo de computação é a definição de um conjunto de
operações que podem ser usadas numa computação e seus respectivos
custos.
Somente assumindo certo modelo de computação é possível analisar
os recursos computacionais requeridos, como tempo de execução e
espaço de armazenamento, ou discutir as limitações de algoritmos ou
computadores.
Na área de análise de algoritmos, é comum especificar um modelo de
computação em termos de operações primitivas, cada uma com um
custo unitário associado.
MÁQUINA DE TURING
Complexidade Computacional
Um problema computacional pode ser visto como uma coleção infinita
de instâncias em conjunto com uma solução para cada instância.
A sequência de entrada para um problema computacional é referido
como uma instância do problema, e não deve ser confundido com o
problema em si.
Na teoria da complexidade computacional, um problema se refere à
questão abstrata para ser resolvido.
Em contraste, uma instância deste problema é uma expressão
concreta, que pode servir como entrada para um problema de decisão.
MÁQUINA DE TURING
Classificação dos Problemas
Problema de Otimização
É um problema em que cada solução possível tem um valor associado e
desejamos encontrar a melhor solução com relação a esse valor.
Dentre as soluções possíveis, identificar qual é a melhor.
MÁQUINA DE TURING
Classificação dos Problemas
Problema de Otimização
Exemplo: Dado um grafo e dois vértices U e V, encontrar o caminho de
U até V que tenha o menor número de arestas (menor caminho)?
Neste problema procura-se encontrar o melhor caminho dentre
algumas opções possíveis de solução, por esse motivo ele se classifica
como um problema de otimização.
MÁQUINA DE TURING
Classificação dos Problemas
Problema de Decisão
São problemas cuja a resposta será sempre do tipo SIM ou NÃO.
Existe uma solução para um dados problema?
MÁQUINA DE TURING
Classificação dos Problemas
Exemplo:
Dado o grafo abaixo, verificar se existe uma trilha fechada que passa
por todas as arestas.
1 2
MÁQUINA DE TURING
Classificação dos Problemas
Verifica-se que o grafo 1 possui um caminho que passa por todas as
arestas enquanto que o grafo 2 não possui um caminho que consegue
passar por todas.
Essa á definição do que conhecemos como grafo Euleriano.
Euler demonstrou que um grafo conexo possui um ciclo euleriano, se e
somente se, ele não possui vértices de grau ímpar.
MÁQUINA DE TURING
Classificação dos Problemas
Um Caminho Euleriano é um caminho em um grafo que visita toda
aresta exatamente uma vez.
Com caso especial, um Circuito Euleriano é um caminho Euleriano que
começa e termina no mesmo vértice.
O que se constata somente no grafo 1 do exemplo.
MÁQUINA DE TURING
Classificação dos Problemas
Exemplo: Problema do grafo hamiltoniano
Um caminho hamiltoniano é um caminho que permite passar por
todos os vértices de um grafo G, não repetindo nenhum, ou seja,
passar por todos uma e uma só vez por cada. Caso esse caminho seja
possível descrever um ciclo, este é denominado ciclo hamiltoniano (ou
circuito hamiltoniano) em G.
MÁQUINA DE TURING
Classificação dos Problemas
Exemplo: Problema do grafo hamiltoniano
Dado o grafo abaixo, determinar se existe um circuito hamiltoniano.
Podemos verificar que ambos os exemplos se classificam como
problemas de decisão onde o objetivo é se obter uma resposta SIM ou
NÃO.
MÁQUINA DE TURING
Problemas Classe P e NP
Existe uma preocupação constante em definir se um problema é de
Otimização ou Decisão.
A Teoria da Complexidade não se aplica diretamente a problemas de
Otimização e sim a Problemas de Decisão.
MÁQUINA DE TURING
Problemas Classe P
Formada por problemas de decisão tratáveis, isto é, que podem ser
resolvidos por um algoritmo polinomial.
Exemplo: O problema do grafo euleriano pertence a classe P.
Esse tipo de problema é classificado dessa forma já que podemos
elaborar um algoritmo que defina se todos os vértices do grafo são de
grau par, não restando dúvida em relação a sua classificação.
MÁQUINA DE TURING
Problemas Classe NP (não determinístico em tempo polinomial)
Formada por problemas de decisão que possuem um verificador
polinomial para a resposta SIM.
NP denota o conjunto de linguagens que podem ser aceitas em tempo
polinomial por uma máquina de Turing não determinística.
Para classificação desse tipo de problema precisamos determinar o
verificador polinomial para se obter a resposta SIM a um determinado
questionamento.
MÁQUINA DE TURING
Problemas Classe NP (não determinístico em tempo polinomial)
Um problema de decisão está em NP se existe um algoritmo A tal que:
- Para qualquer instância X do problema com resposta SIM, existe um
certificado Y, tal que A(X,Y) devolve SIM.
- A consome tempo polinomial em |X|.
MÁQUINA DE TURING
Problemas Classe NP (não determinístico em tempo polinomial)
Exemplo: Problema do grafo hamiltoniano.
Dado uma instância cuja resposta é SIM, ou seja, dado um grafo que é
hamiltoniano, qual é o certificado de que ele é hamiltoniano?
Isso pode ser verificado em tempo polinomial?
MÁQUINA DE TURING
Problemas Classe NP (não determinístico em tempo polinomial)
Exemplo: Problema do grafo hamiltoniano.
Dado uma instância cuja resposta é SIM, ou seja, dado um grafo que é
hamiltoniano, qual é o certificado de que ele é hamiltoniano?
Verificar se o circuito passa por todos os vértices.
Circuito hamiltoniano <V1, V2,..., VN> Esse é o próprio certificado
Isso pode ser verificado em tempo polinomial?
Sim, pois existe uma passagem por todos os vértices e sequência.
Podemos concluir que o problema está na classe NP
MÁQUINA DE TURING
Problemas Classe P = NP
Computacionalmente até os tempos atuais não se conseguiu
comprovar a equivalência entre problemas do tipo P e NP.
MÁQUINA DE TURING
Redução entre Problemas
Uma forma comum de resolver um problema A é transformá-lo em um
outro problema B, cuja solução é conhecida e converter a solução de B
para uma solução de A.
Dado dois problemas A e B, uma redução de A para B (A≤B) é um
algoritmo polinomial que resolve A utilizando B.
MÁQUINA DE TURING
Redução entre Problemas
Exemplo:
A seleção de k-ésimo mínimo pode ser reduzido ao problema da
ordenação.
Encontrar, por exemplo, o terceiro mínimo de um certo vetor.
• Utiliza-se então o algoritmo de ordenação para acertar o vetor em
uma determinada ordem.
• Então encontra-se o terceiro elemento desse vetor ordenado.
MÁQUINA DE TURING
Redução entre Problemas
Se um problema A se reduz a outro problema B, então A não é mais
difícil de resolver do que B.
Afirmativa 1: Se A≤B e B P então A P
Se A pode ser reduzido a B e B faz parte da classe P então A também
faz parte da classe P.
Afirmativa 2: Se A≤B e B≤C então A≤C
Se A pode ser reduzido a B e B pode ser reduzido a C então A pode ser
reduzido a C
MÁQUINA DE TURING
Problema NP-Completo
Um problema NP-completo é um subconjunto de NP, o conjunto de
todos os problemas de decisão os quais suas soluções podem ser
verificadas em tempo polinomial.
Um problema p em NP também está em NPC Se e somente se todos os
outros problemas em NP podem ser transformados em p em tempo
polinomial.
MÁQUINA DE TURING
Problema NP-Completo
Um problema de decisão P é NP-completo se:
1. P está em NP, e
2. Todo problema em NP é redutível para P em tempo polinomial.
MÁQUINA DE TURING
Problema Caixeiro Viajante
Suponhaque um caixeiro viajante tenha de visitar n cidades diferentes,
iniciando e encerrando sua viagem na primeira cidade.
Suponha, também, que não importa a ordem com que as cidades são
visitadas e que de cada uma delas pode-se ir diretamente a qualquer
outra.
O problema do caixeiro viajante consiste em descobrir a rota que torna
mínima a viagem total.
MÁQUINA DE TURING
Problema Caixeiro Viajante
Exemplificando o caso n = 4:
se tivermos quatro cidades A, B, C e D, uma rota que o caixeiro deve
considerar poderia ser:
saia de A e daí vá para B, dessa vá para C, e daí vá para D e então volte
a A.
Quais são as outras possibilidades?
MÁQUINA DE TURING
Problema Caixeiro Viajante
É muito fácil ver que existem seis rotas possíveis:
• ABCDA
• ABDCA
• ACBDA
• ACDBA
• ADBCA
• ADCBA
MÁQUINA DE TURING
Problema Caixeiro Viajante
O problema do caixeiro é um clássico exemplo de problema de
otimização combinatória.
A primeira coisa que podemos pensar para resolver esse tipo de
problema é reduzí-lo a um problema de enumeração: achamos todas
as rotas possíveis e, usando um computador, calculamos o
comprimento de cada uma delas e então vemos qual a menor.
MÁQUINA DE TURING
Problema Caixeiro Viajante
Para acharmos o número R(n) de rotas para o caso de n cidades, basta
fazer um raciocínio combinatório simples e clássico.
De modo semelhante, para o caso de n cidades, como a primeira é fixa,
o leitor não terá nenhuma dificuldade em ver que o número total de
escolhas que podemos fazer é (n-1) x (n-2) x ... x 2 x 1. De modo que,
usando a notação de fatorial: R(n) = (n-1)!.
MÁQUINA DE TURING
Problema Caixeiro Viajante
Assim que nossa estratégia reducionista consiste em gerar cada uma
dessas R(n) = (n-1)! rotas, calcular o comprimento total das viagens de
cada rota e ver qual delas tem o menor comprimento total.
Trabalho que não necessariamente possa ser facilmente resolvido de
forma computacional.
MÁQUINA DE TURING
Problema Caixeiro Viajante
Suponhamos temos um muito veloz computador, capaz de fazer 1
bilhão de adições por segundo. Isso parece uma velocidade imensa,
capaz de tudo.
Com efeito, no caso de 20 cidades, o computador precisa apenas de 19
adições para dizer qual o comprimento de uma rota e então será capaz
de calcular / 19 = 53 milhões de rotas por segundo.
MÁQUINA DE TURING
Problema Caixeiro Viajante
O problema é que a quantidade ( n - 1 )! cresce com uma velocidade
alarmante, sendo que muito rapidamente o computador torna-se
incapaz de executar o que lhe pedimos.
O crescimento é mostrado na tabela abaixo.
MÁQUINA DE TURING
Problema Caixeiro Viajante
Observe que o aumento no valor do n provoca uma muito lenta
diminuição na velocidade com que o computador calcula o tempo de
cada rota (ela diminui apenas de um sexto ao n aumentar de 5 para
25), mas provoca um imensamente grande aumento no tempo total de
cálculo.
Em outras palavras: a inviabilidade computacional é devida à presença
da fatorial na medida do esforço computacional do método da
redução.
MÁQUINA DE TURING
Problema Caixeiro Viajante
Com efeito, se essa complexidade fosse expressa em termos de um
polinómio em n o nosso computador seria perfeitamente capaz de
suportar o aumento do n.
Confira isso na seguinte tabela que corresponde a um esforço
computacional polinomial R( n ) = :
MÁQUINA DE TURING
Problema Caixeiro Viajante
A existência ou não de um método polinomial para resolver o
problema do caixeiro viajante é um dos grandes problemas em aberto
da Matemática.
Costuma-se resumir essas propriedades do problema do caixeiro
dizendo que ele pertence à categoria dos problemas NP - completos.
MÁQUINA DE TURING
Problema do Particionamento
Na ciência da computação, o problema da partição é a tarefa de
decidir se um determinado multiconjunto S de números inteiros
positivos pode ser particionado em dois subconjuntos de S1 e
S2 , tais que a soma dos números em S1 é igual à soma dos
números em S2.
Embora o problema da partição seja NP-completo, existe uma
solução com programação dinâmica com tempo pseudo-
polinomial e há uma heurística que resolve o problema, em
muitos casos, de forma otimizada, ou aproximadamente.
MÁQUINA DE TURING
Problema do Particionamento
Por esta razão, ele tem sido chamado de "o problema NP-difícil
mais fácil".
Há uma versão otimizada do problema da partição, que é
particionar o multiconjunto S em dois subconjuntos S1, S2 , tais
que a diferença entre a soma dos elementos de S1 e a soma
dos elementos de S2 é minimizada.
MÁQUINA DE TURING
Problema do Particionamento
A versão de otimização é NP-difícil, mas pode ser resolvida de
forma eficiente na prática
Exemplo:
Dado S = {3,1,1,2,2,1}, uma solução válida para o problema da
partição é formada pelos dois conjuntos S1 = {1,1,1,2} e S2 =
{2,3}.
MÁQUINA DE TURING
Resumo
Problemas intratáveis ou difíceis são comuns na natureza e nas
áreas do conhecimento.
• Problemas podem ser classificados em:
– “fáceis”: resolvidos por algoritmos polinomiais.
– “difíceis”: os algoritmos conhecidos para resolvê-los são
exponenciais.
MÁQUINA DE TURING
Resumo
• Complexidade de tempo da maioria dos problemas é polinomial
ou exponencial.
• Polinomial: função de complexidade é O(p(n)), onde p(n) é um
polinômio.
– Exemplos: pesquisa binária (O(log n)), pesquisa sequencial
(O(n)), ordenação por inserção (O( )), e multiplicação de
matrizes (O( )).
MÁQUINA DE TURING
Resumo
• Exponencial: função de complexidade é O( ), c > 1.
– Exemplo: Problema do Caixeiro Viajante (PCV) (O(n!)).
– Mesmo problemas de tamanho pequeno a moderado não
podem ser resolvidos por algoritmos não-polinomiais.
MÁQUINA DE TURING
Problema do Particionamento
Ambos os conjuntos a soma é de 5, e eles são partições de S.
Note que esta solução não é única. S1 = {3,1,1} e S2 = {2,2,1} é
outra solução.
Nem todos os multiconjuntos de números inteiros positivos tem
uma partição em duas metades, com igual soma. Um exemplo
de um conjunto S = {2,5}.
MÁQUINA DE TURING
Satisfabilidade Booleana
O problema de satisfatibilidade booleana (SAT) é um problema de
decisão, cuja instancia é uma expressão booleana escrita somente com
operadores AND, OR, NOT, variáveis, e parênteses.
A questão é: dada uma expressão, será que há alguma atribuição de
valores VERDADEIROS e FALSOS para as variáveis que torne a expressão
inteira verdadeira?
MÁQUINA DE TURING
Satisfabilidade Booleana
Uma fórmula da lógica proposicional é dita satisfatível- ou seja,
avaliada como VERDADEIRA - se for possível atribuir valores lógicos a
suas variáveis de tal maneira que eles tornem a fórmula verdadeira.
A classe de fórmulas satisfatíveis proposicionais é NP-completa.
MÁQUINA DE TURING
Problema da Mochila
Consiste na escolha de itens de um conjunto S segundo um limite de
capacidade do sistema b, normalmente dados por peso ou tamanho.
Deve-se preencher a mochila de forma a obter o máximo valor de
utilidade.
Cada item possui um peso e um valor
MÁQUINA DE TURING
Problema da Mochila
• Objetivo de maximizar a utilização da mochila.
• Restrição do tamanho e / ou peso
Exemplo: Considere uma mochila com capacidade para 15kg e cinco
itens para colocar nela.
Deseja-se maximizar a soma dos valores dos itens adicionados a
mochila. Item Valor Peso
A 4 12
B 2 2
C 1 1
D 2 1
E 10 4
MÁQUINA DE TURING
Problema da Mochila
Max Z = 8
Limitações: 5 7
, {0,1} - todas as variáveis devem assumir
valores 0 e 1
MÁQUINA DE TURING
Problema da Mochila
Algoritmo de Força Bruta
Compara todas as possibilidades de preenchimento da mochila que
não violem a restrição de capacidade e retorna a melhor solução
encontrada.
Este algoritmo funciona quando o número de possibilidades é
pequeno.
MÁQUINA DE TURING
Problema da Mochila
Problema NP-difícil: tempo de resolução cresce exponencialmente com
a dimensão.
Conforme o número de objetos aumenta, o problema cresce de forma
a ser impossível gerar e analisar todasas possíveis soluções em tempo
aceitável.
MÁQUINA DE TURING
Problema da Mochila
Para que a heurística tenha melhor desempenho, calcula-se o valor de
utilidade de cada objeto do conjunto como:
/
Dessa forma conseguimos avaliar o valor por quilo de cada objeto
tendo uma visão melhor do que é mais valioso a ser carregado.
A cada interação objetiva-se analisar se cabe mais um objeto na
mochila de acordo com o valor de utilidade.
MÁQUINA DE TURING
Problema da Mochila
Enquanto existir objeto no conjunto S que caiba na mochila:
• Escolha desses objetos, aquele de maior valor de utilidade
Algoritmo Guloso
Item Valor Peso Vu
A 4 12 0,333
B 2 2 1
C 1 1 1
D 2 1 2
E 10 4 2,5
MÁQUINA DE TURING
Problema da Mochila
Algoritmo Guloso
MochilaA
B
C
D
E Item Valor Peso Vu
A 4 12 0,333
B 2 2 1
C 1 1 1
D 2 1 2
E 10 4 2,5
MÁQUINA DE TURING
Problema da Mochila
Algoritmo Guloso
Capacidade Disponível: 11
MochilaA
B
C
D
E Item Valor Peso Vu
A 4 12 0,333
B 2 2 1
C 1 1 1
D 2 1 2
E 10 4 2,5
MÁQUINA DE TURING
Problema da Mochila
Algoritmo Guloso
Capacidade Disponível: 8
MochilaA
B
C
D
E Item Valor Peso Vu
A 4 12 0,333
B 2 2 1
C 1 1 1
D 2 1 2
E 10 4 2,5
MÁQUINA DE TURING
Problema da Mochila
Algoritmo Guloso
Capacidade Disponível: 7
A não pode ser inserida devido a limitação de peso.
MochilaA
B
C
D
E Item Valor Peso Vu
A 4 12 0,333
B 2 2 1
C 1 1 1
D 2 1 2
E 10 4 2,5
MÁQUINA DE TURING
Problema da Mochila
Algoritmo Guloso
Valor total da mochila: $ 15,00
Existirá solução melhor com o objeto A?
MochilaA
B
C
D
E
MÁQUINA DE TURING
Problema da Mochila
Neste caso, outros modelos mostraram a mesma solução, portanto
para este problema muito simples esse algoritmo se mostrou eficiente.
Mas não temos a garantia de ter sempre o mesmo resultado, ou o
ótimo como retorno.
MÁQUINA DE TURING
Problema da Mochila
O problema da mochila é um problema de optimização combinatória.
O nome dá-se devido ao modelo de uma situação em que é necessário
preencher uma mochila com objetos de diferentes pesos e valores.
A formulação do problema é extremamente simples, porém sua
solução é mais complexa.
Algumas soluções podem ser aplicadas para resolvê-lo, porém nem
todos podem apresentar um resultado ótimo.
MÁQUINA DE TURING
Teorema de Cook
Na teoria da complexidade computacional o teorema de Cook afirma
que o problema de satisfatibilidade booleana é NP-completo.
Isto é, qualquer problema em NP pode ser reduzido em tempo
polinomial por uma máquina de Turing determinística para o problema
de determinar se uma fórmula booleana é satisfatível.
O problema de satisfatibilidade booliana é o problema de determinar
se existe uma determinada valoração para as variáveis de uma
determinada fórmula booliana tal que esta valoração satisfaça esta
fórmula em questão.
MÁQUINA DE TURING
Teorema de Cook
Uma importante consequência desse teorema é que se existe um
algoritmo de tempo polinomial para resolver a satisfatibilidade, então
existe um algoritmo de tempo polinomial para resolver todos os
problemas em NP.
Crucialmente, o mesmo acontece para qualquer problema NP-
completo.
MÁQUINA DE TURING
Teorema de Cook
Definição:
• Um problema de decisão está em NP se pode ser resolvido por um
algoritmo não determinístico em tempo polinomial.
• Um caso do problema booleano da satisfatibilidade é uma expressão
booleana que combina variáveis booleanas usando operadores
booleanos.
• Uma expressão é satisfatível se existe alguma atribuição de valores
as variáveis que faz toda a expressão verdadeira.
MÁQUINA DE TURING
Teorema de Cook
Conceito
Dado qualquer problema de decisão em NP, construir uma Máquina de
Turing não determinística que o resolva em tempo polinomial.
Então, para cada entrada nessa máquina, construir uma expressão
booleana tal que a entrada é passada para a máquina, a máquina roda
corretamente, sempre que a máquina dá a resposta "sim".
MÁQUINA DE TURING
Teorema de Cook
Conceito
Então a expressão pode ser satisfeita se e somente se existe um forma
da máquina rodar corretamente e a resposta ser "sim", então a
satisfatibilidade da expressão construída é equivalente a perguntar se a
máquina vai responder "sim".
MÁQUINA DE TURING
Teorema de Godel
Os teoremas da incompletude de Gödel são dois teoremas da lógica
matemática que estabelecem limitações inerentes a quase todos os
sistemas axiomáticos, exceto aos mais triviais.
Sistema axiomático:
Na matemática, um sistema axiomático, é qualquer conjunto de
axiomas que podem ser ligados em conjunção para logicamente
derivar teoremas. Uma teoria matemática consiste em um sistema
axiomático e todos os seus teoremas. Um sistema axiomático que é
completamente descrito é um tipo especial de sistema formal. Uma
prova formal é uma versão completa de uma prova matemática dentro
de um sistema formal.
MÁQUINA DE TURING
Teorema de Godel
Axiomas:
Na lógica tradicional, um axioma ou postulado é uma sentença ou
proposição que não é provada ou demonstrada e é considerada como
óbvia ou como um consenso inicial necessário para a construção ou
aceitação de uma teoria. Por essa razão, é aceito como verdade e serve
como ponto inicial para dedução de outras verdades (dependentes de
teoria).
MÁQUINA DE TURING
Teorema de Godel
O primeiro teorema da incompletude afirma que nenhum sistema
consistente de axiomas, cujos teoremas podem ser listados por um
“procedimento efetivo” (e.g., um programa de computador que pode
ser qualquer tipo de algoritmo), é capaz de provar todas as verdades
sobre as relações dos números naturais (aritmética). Para qualquer um
desses sistemas, sempre haverá afirmações sobre os números naturais
que são verdadeiras, mas que não podem ser provadas dentro do
sistema.
MÁQUINA DE TURING
Teorema de Godel
O segundo teorema da incompletude, uma extensão do primeiro,
mostra que tal sistema não pode demonstrar sua própria consistência.
Teorema 1: "Qualquer teoria axiomática recursivamente enumerável e
capaz de expressar algumas verdades básicas de aritmética não pode
ser, ao mesmo tempo, completa e consistente. Ou seja, em uma teoria
consistente, sempre há proposições que não podem ser demonstradas
nem verdadeiras, nem falsas."
MÁQUINA DE TURING
Teorema de Godel
Teorema 2: "Uma teoria, recursivamente enumerável e capaz de
expressar verdades básicas da aritmética e alguns enunciados da teoria
da prova, pode provar sua própria consistência se, e somente se, for
inconsistente."

Outros materiais