Complexidade de Tempo

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

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

Melhores momentos AULA PASSADA. Complexidade Computacional p. 205

Variantes de Máquinas de Turing

Modelos Universais de Computação

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

Lema do Bombeamento Linguagens Livres de Contexto

Introdução à Teoria da Computação Exercícios

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

Aula 10: Tratabilidade

Linguagens Formais e Problemas de Decisão

Linguagens Formais e Autômatos P. Blauth Menezes

Teoria da Computação. Unidade 3 Máquinas Universais. Referência Teoria da Computação (Divério, 2000)

Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais

Problemas Algoritmicos

Linguagens Formais e Autômatos (LFA)

Lista de Exercícios 6: Soluções Funções

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

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

Preliminares. Profa. Sheila Morais de Almeida. agosto

a n Sistemas de Estados Finitos AF Determinísticos

Linguagens Regulares. Prof. Daniel Oliveira

Máquinas de Turing 3

ANÁLISE DE ALGORITMOS

Teoria da Computação. Computabilidade e complexidade computacional

Melhores momentos AULA PASSADA. Complexidade Computacional p. 136

PCC104 - Projeto e Análise de Algoritmos

BCC244. Alfabeto, String, Linguagem, Gramática. Registro aqui o agradecimento à Profa. Lucília por ceder slides que fazem parte deste materal.

Máquinas de Turing 1

Introdução à Análise Algoritmos

Aula 1. Teoria da Computação III

Medida do Tempo de Execução de um Programa

Projeto e Análise de Algoritmos NP Completude. Prof. Humberto Brandão

André Vignatti DINF- UFPR

Linguagem Universal. assim como a entrada ser processada por a. (b) A segunda fita de representa a fita de

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

Complexidade de Algoritmos

Linguagens Formais e Autômatos (LFA)

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

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

1. Uma linguagem de uma máquina de Turing

SIMULAÇÃO DE MÁQUINA DE REGISTRADORES COM MÁQUINA DE TURING MULTIFITA

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

Teoria da Computação. Máquinas de Turing: variações

Aula 9: Máquinas de Turing

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

Linguagens Livres de Contexto

Projeto e Análise de Algoritmos

Análise e Projeto de Algoritmos

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

03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II

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

Universidade Federal de Alfenas

Instituto Superior Técnico Teoria da Computação - LEIC 2013/2014 Aula prática 1

Teoria de Linguagens 2 o semestre de 2015 Professor: Newton José Vieira Primeira Lista de Exercícios Entrega: até 16:40h de 15/9.

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

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

Problemas Computáveis

Universidade Federal de Uberlândia Mestrado em Ciência da Computação

Teoria da Computação. Computabilidade e complexidade computacional

INTRATABILIDADE e NP-COMPLETUDE

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

Teoria de Linguagens 2 o semestre de 2017 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 19/9/2017 Valor: 10 pontos

Propriedades das Linguagens Livres do Contexto

Teoria da Computação 27 de Maio de 2015 Teste 2A Duração: 1h30

Linguagens Regulares, Operações Regulares

Modelos de Computação Folha de trabalho n. 10

Análise de algoritmos

Teoria da Computação. Capítulo 1. Máquina de Turing. Prof. Wanderley de Souza Alencar, MSc.

Primeira Lista de Exercícios 2005/1... Exercício 1 Desenhe Diagrama de Estados para Máquinas que Decidem as Linguagens:

Teoria da computabilidade Indecidíveis Decidíveis

Conceitos Básicos. Vocabulário Cadeias Linguagens Expressões Regulares Problema X Linguagem

Teoria de Linguagens 1 o semestre de 2018 Professor: Newton José Vieira Primeira Lista de Exercícios Data de entrega: 17/4/2018 Valor: 10 pontos

Linguagens Formais e Autômatos

Linguagens Formais e Autômatos P. Blauth Menezes

Técnicas de Extensão de MT

Computabilidade e Complexidade (ENG10014)

Aula 10: Decidibilidade

Aula 10: Decidibilidade

Faculdade de Computação

Marcos Castilho. DInf/UFPR. 5 de abril de 2018

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Computabilidade e Complexidade (ENG10014)

Linguagens Formais e Autômatos P. Blauth Menezes

BCC202 - Estrutura de Dados I

LFA Aula 05. AFND: com e sem movimentos 05/12/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Linguagens recursivamente enumeráveis

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

Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo

Lista de exercícios 1

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

Projeto Lógico Automatizado de Sistemas Digitais Seqüenciais 2 - Fundamentação Teórica

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

Funções e Limites - Aula 08

BCC202 - Estrutura de Dados I

Quantidade de memória necessária

RESOLUÇÃO DE PROBLEMAS POR MEIO DE BUSCA (PARTE 1) *Capítulo 3 (Russel & Norvig)

ESTRUTURAS DE DADOS prof. Alexandre César Muniz de Oliveira

5COP096 TeoriadaComputação

Transcrição:

Complexidade de Tempo 1

Complexidade de Tempo Quando um problema é decidível, ele pode não ser solúvel na prática se a solução requer uma quantidade excessiva de tempo ou memória

Medindo a complexidade Ex.: Seja a linguagem A={0 k 1 k k 0}. Quanto tempo uma TM de uma única fita precisa para decidir A?

Tempo Polinomial vs. Tempo Exponencial A experiência mostra que a linha divisória entre problemas solúveis em tempo polinomial vs. problemas que requerem tempo exponencial é fundamental. Vamos definir o tempo de execução de TM s: DEF: O tempo de execução de uma TM M é a função f (n) = o máximo número de transições tomadas por M até parar, dada uma entrada arbitrária de comprimento n. 4

0 Tempo de Execução 0 R 1 R 1 R rej 2 R acc 0 R Q: Qual é o tempo de execução da máquina acima? 1 0 R 1 R 5

0 Tempo de Execução 0 R 1 R 1 R rej 2 R acc 0 R R: Supondo Σ = {0,1}, o tempo de execução é T (n)=n+1, como se pode ver para qq string começando em 1. Mesmo que a TM execute mais rápido sobre 0{0,1}*, o tempo de execução é definido em termos do pior caso. Falhas 6 não afetam isso. 1 0 R 1 R

Complexidade Polinomial DEF:M tem complexidade de tempo polinomial se existe um polinômio p(n) tal que o tempo de execução de M, f (n), satisfaz a: f (n) p(n). 7

Notação Big-O DEF: Sejam f e g funções de domínio R 0 ou N e codomínio R. Se existem constantes C e k tais que x > k, f (x ) C g (x ) i.e., depois de k, f é menor ou igual a um múltiplo de g, então escrevemos: f (x ) = O ( g (x ) ) 11

Big-Ω e Big-Θ Big-Ω é apenas o reverso de big-o. I.e. f (x ) = Ω(g (x )) g (x ) = O (f (x )) Portanto big-ω diz que f (x ) domina g (x ) assintoticamente. Big-Θ diz que ambas as funções dominam uma à outra e portanto são assintoticamente equivalentes. I.e. f (x ) = Θ(g (x )) f (x ) = O (g (x )) f (x ) = Ω(g (x )) Sinônimo para f = Θ(g): f é da ordem de g 12

Fatos úteis Qualquer polinômio é big-θ de seu maior termo EX: x 4 /100000 + 3x 3 + 5x 2 9 = Θ(x 4 ) A soma de duas funções é big-o da maior delas EX: x 4 ln(x ) + x 5 = O (x 5 ) Constantes diferentes de zero são irrelevantes: EX: 17x 4 ln(x ) = O (x 4 ln(x )) 13

Big-O, Big-Ω, Big-Θ. Exemplos Q: Ordene os seguintes do menor para o maior assintoticamente. Agrupe juntas todas as funções que são big-θ equivalentes: x 1 1 x + sin x,ln x, x + x,,13 +,13 + x, e, x x x 20 2 ( + sin x)( x 102), x ln x, x(ln x),lg x 2 e, x x x 14

Big-O, Big-Ω, Big-Θ. Exemplos R: 1. 1 x 2. 13+1 x 3. ln x, lg 2 x (mudança de base) 4. x + sin x, x + x, 13+ x 5. x ln x 2 6. x(ln x) e 7. x 8. ( x + sin x)( x 20 102) x 9. e x 10. x 15

Classes de Complexidade Classes de complexidade de tempo são as próximas classes de linguagens que vamos estudar: DEF: Suponha que g (n) é uma função sobre reais. A classe de complexidade de tempo TIME(g (n) ) consiste de todas as linguagens que podem ser decididas por uma TM em tempo de execução O(g (n)). Qualquer dessas linguagens é dita ter complexidade de tempo g (n). 16

Complexidade de Tempo 0 0 R 1 R Q: A linguagem aceita pela TM acima tem que complexidade de tempo O( g (n))? 1. g (n) = n +2 2. g (n) = n/2 3. g (n) = n 2 4. g (n) = 1 rej 2 R acc 0 R 1 0 R 1 R 17

Complexidade de Tempo 0 0 R 1 R rej 2 R acc 0 R A: TODAS! Este decisor particular para a linguagem tem tempo de execução f (n) = n+2, o qual é big-o dos no. s 1, 2 e 3. Mas a definição não diz que devemos nos pautar por uma dada implementação: Q: Como se pode modificar a TM para que a linguagem aceita esteja em TIME(1)? 1 0 R 1 R 18

Complexidade de Tempo R: A linguagem aceita é 10{0,1}*. Portanto, basta verificar os primeiros dois bits como abaixo: 1 R 0 R R 0 R 1 R 0 1 2 acc Agora vemos que a linguagem é aceita por uma TM cujo tempo de execução é constante. 19

A Classe P P é a classe das linguagens que podem ser decididas por uma TM em tempo de execução de complexidade polinomial. I.e., DEF: P = U k = 0 TIME( k n ) 20

De RAM para TM em Tempo Polinomial THM 1: Qualquer programa RAM que executa em tempo O (f (n)) pode ser simulado por um TM multi-fita que executa em tempo O (f (n) 3 ). THM 2: Qualquer TM multi-fita que executa em tempo O (g (n)) pode ser simulada por uma TM 1-fita que executa em tempo O (g (n) 2 ). COR: Qualquer programa RAM que executa em tempo O (f (n)) pode ser simulado por uma TM 1- fita que executa em tempo O (f (n) 6 ). Consequentemente, qualquer algoritmo que executa em tempo polinomial pode ser simulado no seu computador pode ser executado em uma 21 TM em tempo polinomial.

De RAM para TM em Tempo Polinomial Não vamos provar, mas apenas explicar: Uma RAM é uma máquina com programas estilo goto e memória constituída de um número arbitrário de inteiros, denominados registradores, cada um tendo um endereço inteiro. Cada passo de execução da RAM age sobre um dos registradores 1. Depois de k passos, a RAM pode ter no máximo O (k) registradores, cada um contendo um inteiro de tamanho O (k). Se mantemos os conteúdos desses registradores em uma das fitas da TM, mudar o estado da RAM simulada requer ler todos os O (k) registradores de tamanho O (k), portanto O (k 2 ) células da fita. Como k = O (f (n) ), e o número de passos a serem simulados é f (n), g(n) = O (f (n) 3 ). 22

De RAM para TM em Tempo Polinomial Lembre-se da conversão de uma TM multi-fita em uma TM 1-fita. Convertemos primeiro p/ uma TM multi-trilha. A TM multi-trilha precisa andar p/ frente e p/ trás ao longo de toda a fita para ler as células ativas. Portanto, no passo k da TM multifita, o conteúdo é O (k) e andar p/ frente e p/ trás consome O(k ). Como k = O (g (n) ), e são g (n) passos a simular, h(n) = O (g (n) 2 ). Agora vamos da TM multi-trilha para a TM 1-fita. Lembre-se que tudo o que fizemos foi renomear o alfabeto e as transições. Portanto o tempo de execução no simulador de 1-fita é idêntico ao tempo de execução da TM de k-trilhas simulada! 23

RAM s são Polinomialmente Equivalentes a TM s A outra direção também é válida: Podemos simular qualquer TM em Java, com a mesma complexidade de tempo. Conclusão: A pertinência de uma linguagem na classe P não depende do dispositivo de computação escolhido. Portanto, a análise de complexidade pode ser feita sobre pseudocódigo. 24

Exemplo de problema em P Seja G um grafo direcionado que contém os nodos s e t. O problema CAM={<G,s,t> G é um grafo direcionado que tem um caminho de s para t}

Um algoritmo de tempo polinomial para CAM M= Sobre a entrada <G,s,t>, onde G é um grafo direcionado com nodos s e t: 1. Ponha uma marca sobre o nó s. 2. Repita o seguinte até que nenhum nó adicional seja marcado: 1. Faça uma varredura em todas as arestas de G. Se uma aresta (a,b) for encontrada indo de um nó marcado a para um nó não marcado b, marque o nó b. 3. Se t estiver marcado, aceite. Caso contrário, rejeite.

Exemplo de problema em P Primos entre si. Dois números são primos entre si se 1 é o maior inteiro que divide ambos. PRIM-ES={<x,y> x e y são primos entre si} Resolvemos usando o algoritmo euclidiano.

PRIM-ES P E = Sobre a entrada <x,y>, onde x e y são número naturais em binário: 1. Repita até y=0: 1. Atribua x x mod y 2. Intercambie x e y. 2. Dê como saída x. R = Sobre a entrada <x,y>, onde x e y são números naturais em binário. 1. Rode E sobre <x,y>. 2. Se o resultado for 1, aceite. Caso contrário, rejeite.

CFL P Vamos mostrar que toda linguagem livre de contexto admite uma solução polinomial para seu problema de aceitação. NOTA: Como a complexidade do algoritmo é medida em termos dos strings testados, e não da representação da linguagem livre de contexto, podemos supor qualquer forma de representação que nos seja conveniente! Portanto, vamos supor que a linguagem é representada por uma gramática na forma normal de Chomsky. 62

Algoritmo CYK: Decisão em Linguagens Livres de Contexto IDÉIA: Para cada substring de uma dada entrada x, encontre todas as variáveis que podem derivar esse substring. Uma vez que essas tenham sido encontradas, dizer que variáveis podem gerar x é uma tarefa simples, já que a gramática está na forma normal de Chomsky. 63

Algoritmo CYK: Decisão em Linguagens Livres de Contexto Q: Considere a gramática G dada por S ε AB XB T AB XB X AT A a B b 1. x = aaabb está em L(G )? 2. x = está em L(G )? 64

Algoritmo CYK: Decisão em Linguagens Livres de Contexto O algoritmo é bottom-up : começamos das folhas para a raiz da árvore de derivação. S ε AB XB T AB XB X AT A a B b a a a b b 65

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 1) Escreva as variáveis para todos os substrings de comprimento 1 S ε AB XB T AB XB X AT A a B b a a a b b A A A B B 66

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 2) Escreva as variáveis para todos os substrings de comprimento 2 a a a b b S ε AB XB T AB XB X AT A a B b A A A B B S,T T 67

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 3) Escreva as variáveis para todos os substrings de comprimento 3 S ε AB XB T AB XB X AT A a B b a a a b b A A A B B X S,T T 68

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 4) Escreva as variáveis para todos os substrings de comprimento 4 S ε AB XB T AB XB X AT A a B b a a a b b A A A B B X S,T T S,T 69

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 5) Escreva as variáveis para todos os substrings de comprimento 4. Apenas X! S ε AB XB T AB XB X AT A a B b REJEITA! a a a b b A A A B B X X S,T T S,T 70

Algoritmo CYK: Decisão em Linguagens Livres de Contexto Vejamos agora : S ε AB XB T AB XB X AT A a B b a a a b b b 71

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 1) Escreva as variáveis para todos os substrings de comprimento 1 S ε AB XB T AB XB X AT A a B b a a a b b A A A B B b B 72

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 2) Escreva as variáveis para todos os substrings de comprimento 2 S ε AB XB a a a b b b T AB XB X AT A a B b A A A B B S,T B 73

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 3) Escreva as variáveis para todos os substrings de comprimento 3 S ε AB XB T AB XB X AT A a B b a a a b b A A A B B X S,T T b B 74

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 4) Escreva as variáveis para todos os substrings de comprimento 4 S ε AB XB T AB XB X AT A a B b a a a b b A A A B B X S,T T S,T b B 75

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 5) Escreva as variáveis para todos os substrings de comprimento 5 S ε AB XB T AB XB X AT A a B b a a a b b A A A B B X S,T T S,T b B X 76

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 6) Escreva as variáveis para todos os substrings de comprimento 6 S ε AB XB T AB XB X AT A a B b S está incluído, aceito! a a a b b A A A B B X X S,T T S,T S,T b B 77

Algoritmo CYK: Decisão em Linguagens Livres de Contexto Podemos usar uma tabela para isso. end at start at 1: 2: 3: 4: 5: 6: 0: 1: 2: 3: 4: 5: 78

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 1. Variáveis para substrings de comp. 1. end at start at 1: 2: 3: 4: 5: 6: 0: A 1: A 2: A 3: B 4: B 5: B 79

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 2. Variáveis para substrings de comp. 2. end at start at 1: 2: 0: A - 3: 1: A - 4: 2: A S,T 5: 3: B - 6: 4: B - 5: B 80

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 3. Variáveis para substrings de comp. 3 end at start at 1: 2: 3: 0: A - - 4: 1: A - X 5: 2: A S,T - 6: 3: B - - 4: B - 5: B 81

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 4. Variáveis para substrings de comp. 4 end at start at 1: 2: 3: 4: 0: A - - - 5: 1: A - X S,T 6: 2: A S,T - - 3: B - - 4: B - 5: B 82

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 5. Variáveis para substrings de comp. 5 end at start at 1: 2: 3: 4: 5: 0: A - - - X 6: 1: A - X S,T - 2: A S,T - - 3: B - - 4: B - 5: B 83

Algoritmo CYK: Decisão em Linguagens Livres de Contexto 6. Variáveis para. ACEITO! end at start at 1: 2: 3: 4: 5: 6: 0: A - - - X S,T 1: A - X S,T - 2: A S,T - - 3: B - - 4: B - 5: B 84

CYK Pseudocódigo D= Sobre a entrada w=w 1 w 2...w n : 1. Se w=ε e S ε for uma regra, aceite. 2. Para i=1 até n: 1. Para cada variável A: 1. Teste se A b é uma regra, onde b=w i. 2. Se for, coloque A em tabela(i,i). 3. Para l=2 até n: 1. Para i=1 até n-l+1: 1. Faça j=i+l+1. 2. Para k=i até j-1 1. Para cada regra A BC; 1. Se tabela(i,k) contém B e tabela(k+1,j) contém C, ponha A em tabela(i,j). 4. Se S estive em tabela(1,n), aceite. Caso contrário, rejeite.