Problemas Algoritmicos

Documentos relacionados
Teoria da Computação. Computabilidade e complexidade computacional

Decidibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02)

Agenda. Complexidade Não Determinista A classe NP. A classe Co-NP Reduções de tempo polinomial. Definida por. Exemplos em:

Marcos Castilho. DInf/UFPR. 16 de maio de 2019

Complexidade de Tempo

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados.

AFNs, Operações Regulares e Expressões Regulares

Apostila 06. Objetivos: Estudar a Computabilidade Estudar a Decidibilidade Estudar a Redutibilidade

Máquinas de Turing - Computabilidade

Complexidade computacional

I.2 Introdução a Teoria da Computação

Lema do Bombeamento Linguagens Livres de Contexto

Linguagens Formais e Problemas de Decisão

Técnicas Inteligência Artificial

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 25

Faculdade de Computação

Problemas Computáveis

SCC-5832 Teoria da Computação

Lema do Bombeamento Motivação

Compiladores - Autômatos

Propriedades das Linguagens Livres do Contexto

Lema do Bombeamento para Linguagens Livres do Contexto

Complexidade de Algoritmos. Edson Prestes

Análise e Projeto de Algoritmos

Automatocom Pilha Pushdown Automaton

Análise e Síntese de Algoritmos

INE5317 Linguagens Formais e Compiladores AULA 3: Introdução a Teoria da Computação

Gramáticas Sensíveis ao Contexto (GSC) Linguagens Sensíveis ao Contexto (LSC) Autômatos Linearmente Limitados (ALL)

Análise e Síntese de Algoritmos. Problemas NP-Completos CLRS, Cap. 34

ECO026 TEORIA DA COMPUTAÇÃO. Prof: Rafael Santos Site:

Redutibilidade. Mário S. Alvim Fundamentos de Teoria da Computação (FTC) DCC-UFMG (2018/02)

Técnicas Inteligência Artificial

Curso de Engenharia de Computação - UTFPR Teoria da Computação - Prof. Celso Kaestner Lista de exercícios

Modelos Universais de Computação

LINGUAGENS FORMAIS E AUTÔMATOS

Aula 10: Tratabilidade

Máquinas de Turing 3

SCC Introdução à Teoria da Computação

SCC Teoria da Computação e Linguagens Formais

Procedimentos e Algorítmos Programas e Linguagens de Programação Tese de Church-Turing Formas de Representação de Linguagens

Terceira Lista de Exercícios 2004/2...

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Linguagens Formais e Autômatos. Apresentação do Plano de Ensino

Curso: Ciência da Computação Turma: 6ª Série. Teoria da Computação. Aula 4. Autômatos Finitos

Introdução à Programação Aula 02. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Análise e Complexidade de Algoritmos

14.1 Linguagens decidíveis ou Turing reconhecíveis

Computabilidade e Complexidade (ENG10014)

Aula 01. Murilo V. G. da Silva DINF/UFPR

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Complexidade de Algoritmos

Aula 10: Decidibilidade

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Teoria da Computação. Computabilidade

Complexidade de Algoritmos. Edson Prestes

INTRATABILIDADE e NP-COMPLETUDE

PCC104 - Projeto e Análise de Algoritmos

TEORIA DE COMPLEXIDADE

Gramáticas Livres de Contexto

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Propriedades de Fecho de Linguagens Regulares.

Teoria Ingênua dos Conjuntos (naive set theory)

Notas sobre Sequências e Cardinalidade (1)

Linguagens Formais e Autômatos. Autômatos Finitos Determinísticos (AFD)

Linguagens Não-Regulares

Introdução Maquinas de Turing universais O problema da parada. Indecidibilidade. Rodrigo Gabriel Ferreira Soares DEINFO - UFRPE.

Linguagens recursivamente enumeráveis

Análise de Algoritmos

Capítulo 8: O problema da parada. Decidibilidade e computabilidade. José Lucas Rangel Introdução.

Compiladores - Gramáticas

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Aula 18. Cap O Problema da Parada

Complexidade computacional

Algoritmos Combinatórios: Introdução

Prof. Dr. Marcos Castilho. Departamento de Informática/UFPR. 22 de Fevereiro de 2018

Teoria da Computação

Linguagens Formais e Autômatos Apresentação da Disciplina

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Linguagens Formais e Autômatos. Apresentação do Plano de Ensino

Aula 3: Autômatos Finitos

Aula 10: Decidibilidade

Aula 3: Autômatos Finitos

Computabilidade e Complexidade (ENG10014)

SCC Capítulo 3 Linguagens Sensíveis ao Contexto e Autômatos Limitados Linearmente

CAL ( ) MIEIC/FEUP Estruturas de Dados ( )

Compiladores - Gramáticas

Teoria da Computação. Computabilidade e complexidade computacional

Linguagens Formais e Autômatos 02/2015. LFA Aula 02. introdução 28/09/2015. Celso Olivete Júnior.

LINGUAGENS FORMAIS E AUTÔMATOS

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida

Compiladores Aula 4. Celso Olivete Júnior.

Problemas NP-Completos Bolas Mágicas

Departamento de Ciência de Computadores - FCUP Primeiro Teste de Inteligência Artificial / Sistemas Inteligentes (Duração: 2 horas)

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Draft-v0.1. Máquinas de Turing Máquinas de Turing

Faculdade de Computação

Segunda Lista de Exercícios 2004/2...

Autômato com pilha. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz

2. DISCIPLINA REQUISITO (RECOMENDAÇÃO) 3. INDICAÇÃO DE CONJUNTO (BCC) Obrigatória TEORIA: 60 LABORATÓRIO: 30

Máquinas de Turing 1

Linguagens Formais e Autômatos. Apresentação do Plano de Ensino

Transcrição:

Problemas Algoritmicos 1

O que pode ser computado? Chegamos a um importante ponto do curso. Vamos agora estudar uma das questões mais fundamentais em Ciência da Computação: Qual seria o limite do poder computacional de uma máquina? Fato importante: É possível dar exemplos precisos de problemas que estão além da capacidade de computação. 3

Problemas de Decisão Um problema de decisão é uma questão com um conjunto finito de parâmetros e que, para valores específicos desses parâmetros, tem resposta sim ou não. EX: - A soma de 3 e 5 é igual a 8? - A soma de x e y é igual a z? O primeiro problema acima não tem parâmetros (e, portanto, tem um única instância) O segundo problema tem 3 parâmetros e tem infinitas instâncias, cada uma correspondente a uma tripla de valores para x, y e z. 4

Um PD pode ser visto como um conjunto de questões, uma para cada possível combinação de valores dos parâmetros do problema. Cada uma dessas questões tem resposta sim ou não, e é chamada uma instância do problema. 5

Problemas de Decisão Do ponto de vista da Ciência da Computação, qualquer problema cujo conjunto de instâncias é finito não tem muito interesse, pois pode sempre ser resolvido por meio de um algoritmo que simplesmente obtém a resposta para cada instância do problema diretamente de uma tabela que armazena a solução para cada uma das instâncias. 6

Problemas de Decisão como Linguagens Para estudar o que significa um problema de decisão ser solúvel computacionalmente, precisamos de um método para padronizar tais problemas e tornálos fáceis de serem entendidos por um computador. A solução é representar cada instância como um string: Ex: Uma instância para o problema z é a soma de x e y, seria o string 2+2=4? Q: Podemos agora definir teoricamente o que significa um problema ser solúvel computacionalmente. Como você definiria isso? 7

Problemas de Decisão como Linguagens A: Um problema de decisão P é solúvel se existe um programa de computador, cujas possíveis entradas são instâncias desse problema (codificadas como strings), e que sempre pára, produzindo a resposta correta para cada instância. Além disso, a codificação das instâncias deve ser, ela própria, computável. Em teoria de linguagens: Seja S um alfabeto no qual podem ser codificadas as instâncias de P. Seja E o conjunto das instâncias (codificadas) e L o conjunto de instâncias cuja resposta é SIM. Então P é dito decidível (ou solúvel computacionalmente) se L é decidível. 8

Problemas de Decisão Problemas Básicos Antes de atacar alguns problemas de decisão fundamentais em Computação, vamos considerar se existem algoritmos para determinar se um dado string pertence a uma dada linguagem, para linguagens de uma certa classe C, como linguagens aceitas por DFA s, NFA s, PDA s etc. Problema A C determinar se uma dada linguagem, de uma certa classe C, é vazia. Problema E C determinar se duas dadas linguagens, de uma certa classe C, são iguais. Problema EQ C Cada um desses problemas é, por sua vez, codificado como uma linguagem. 9

Problemas de Decisão Exemplo de Codificação Vejamos como A DFA pode ser codificado. A DFA é o problema de decidir Dado: Um DFA M e um string x. Decidir: M aceita x? A linguagem L de interesse é a linguagem que consiste de codificações de pares (M, x ) tais que M aceita x. A codificação é denotada como <M, x >. Vejamos a seguir como essa codificação pode ser feita. 10

Problemas de Decisão Exemplo de Codificação Considere o DFA: a 0,1 0,1 b Q: Como ele pode ser representado como um string? 11

Problemas de Decisão Exemplo de Codificação R: Esse DFA seria representado como a 5-tupla: a 0,1 0,1 b <M > = ({a,b},{0,1},{(a,0,b),(a,1,b),(b,0,a),(b,1,a)},a,{a}) 12

Problemas de Decisão Exemplo de Codificação R: Esse DFA seria representado como a 5-tupla: a 0,1 0,1 b <M > = ({a,b},{0,1},{(a,0,b),(a,1,b),(b,0,a),(b,1,a)},a,{a}) Q 13

Problemas de Decisão Exemplo de Codificação R: Esse DFA seria representado como a 5-tupla: a 0,1 0,1 b <M > = ({a,b},{0,1},{(a,0,b),(a,1,b),(b,0,a),(b,1,a)},a,{a}) S 14

Problemas de Decisão Exemplo de Codificação R: Esse DFA seria representado como a 5-tupla: a 0,1 0,1 b <M > = ({a,b},{0,1},{(a,0,b),(a,1,b),(b,0,a),(b,1,a)},a,{a}) d 15

Problemas de Decisão Exemplo de Codificação R: Esse DFA seria representado como a 5-tupla: a 0,1 0,1 b <M > = ({a,b},{0,1},{(a,0,b),(a,1,b),(b,0,a),(b,1,a)},a,{a}) q 0 16

Problemas de Decisão Exemplo de Codificação R: Esse DFA seria representado como a 5-tupla: a 0,1 0,1 b <M > = ({a,b},{0,1},{(a,0,b),(a,1,b),(b,0,a),(b,1,a)},a,{a}) F 17

Problemas de Decisão Exemplo de Codificação R: Esse DFA seria representado como a 5-tupla: a 0,1 0,1 b <M > = ({a,b},{0,1},{(a,0,b),(a,1,b),(b,0,a),(b,1,a)},a,{a}) A codificação <M,w > seria obtida adicionando, e o string de entrada w. 18

Problemas de Decisão O que de fato fazemos! Agora que mostramos a idéia de como é possível a definição de problemas de decisão como linguagens (codificando instâncias do problema como strings), vamos, na prática, ignorar essa questão da codificação, lembrando-nos apenas que ela deve poder ser feita computacioalmente. Mais simplesmente, vamos trabalhar diretamente sobre a estrutura de dados mais natural para a representação do problema (no caso de FA s, um grafo). 19

A DFA Q: Como você resolveria A DFA? 21

A DFA R: Simplesmente siga o caminho rotulado pelo string de entrada, a partir do estado inicial. Aceite se ele termina em um estado em F. Mais precisamente: DFAaccept(DFA M, String x 1 x 2 x 3 x n ) State q = q 0 //q 0 definido pela 5-tuple M for(i = 1 to n) q = d(q,x i ) // d definida pela 5-tuple M if(q F) // F definido pela 5-tuple M return ACEPT else return REJECT 22

Q: E o problema A NFA? A NFA 23

A NFA A: Apenas converta o NFA para um DFA e use a solução dada para o problema A DFA. NFAaccept(NFA N, String x 1 x 2 x 3 x n ) DFA M = convertadeterminista(n) return DFAaccept(M, x 1 x 2 x 3 x n ) 24

A NFA NFAaccept2(NFA N, String x 1 x 2 x 3 x n ) StateSet S = {q 0 } // S como um bit string for(i = 1 to n) S = d(s,x i ) // é NFA, d retorna um conj. if(s e F não são disjuntos) return ACCEPT else return REJECT 26

E DFA Vamos focar agora no problema E DFA. Podemos usar o lema do bombeamento para resolver esse problema: suponha que conhecemos o no. de bombeamento p do DFA. Então, se não encontrarmos nenhum string com comprimento < p que seja aceito pelo DFA, podemos afirmar que o DFA não aceita nenhum string. Q: Porque isso é verdade? 27

E DFA R: Suponha que a linguagem seja não vazia. Como verificamos que todos os strings de comprimento < p são rejeitados, o menor string aceito s tem comprimento p. Então s é bombeável, podendo ser bombeado de maneira que se obtenha um string mais curto s, o que contradiz a minimalidade de s! Isso nos dá o seguinte algoritmo: 28

E DFA DFAempty( DFA M ) integer p = Q for (all strings x over S with length < p) if( DFAaccepts(M,x) == ACCEPT ) return NONEMPTY //only got here if nothing was accepted return EMPTY Q: Tempo de execução? Melhorias? 29

R: E DFA Tempo de execução: O( S Q ) exponencial. Melhoria: Basta verificar se algum estado de aceitação pode ser atingido a partir do estado inicial, fazendo uma busca em largura (BFS) ou uma busca em profundidade (DFS), do seguinte modo: 30

E DFA DFAempty2( DFA M ) State q = q 0 Stack S // Inicializa uma pilha LIFO Set V = // Conjunto de estados visitados S.push(q 0 ) while(s ) q = S.pop() if (q F ) return NONEMPTY V = V {q} for (States q satisfying q q ) // um arco if (q V ) S.push(q ) return EMPTY // Apenas chega aqui se F inatingível Q: O algoritmo usa BFS ou DFS? 31

E DFA R: Esse algoritmo usa DFS, já que usa uma pilha. Se usasse uma fila, seria um algoritmo BFS. 32

A CFG A CFG também é decidível. Existe uma solução bastante horrível, usando Forma Normal de Chomsky. Mais adiante veremos um algoritmo bem melhor, de tempo polinomial. (se não houvesse tal algoritmo, compiladores seriam muito ineficientes!) A forma normal de Chomsky nos dá o seguinte: LEMA: Seja uma gramática G em CNF. Seja x um string em L(G ), e seja n o comprimento de x. Então x é gerado por uma derivação de comprimento 2n-1, se n > 0. 33

A CFG LEMA: Seja uma gramática G em CNF. Seja x um string em L(G ), e seja n o comprimento de x. Então x é gerado por uma derivação de comprimento 2n-1, se n > 0. Prova. As primeiras n-1 produções são da forma A BC e nos dão o comprimento correto. As últimas n produções são da forma A a e derivam x. Isso leva ao seguinte algoritmo: 34

A CFG CFGaccept( CFG G, String x=x 1 x 2 x 3 x n ) CFG G = ChomskyNormalForm(G ) for (all derivations from start variable of G of length 2n +1) if (derivation resulted in x) return ACCEPT return REJECT Q1: Porque isso funciona se x = e? Q2: Qual a ordem complexidade? 35

A CFG A1: Funciona para x = e em razão da cláusula 2n+1. A2: Exponencial. Se considerarmos o tempo da conversão para CNF, esse algoritmo é tremendamente ineficiente. 36

Exercícios 1. EQ DFA 2. E CFG 3. CARD DFA 37