Informática Teórica Engenharia da Computação COMPLEXIDADE DE TEMPO A escolha do modelo não afeta o poder: todos são equivalentes: – MT de uma única fita – MT multifita – MT não-determinística Mas afeta a complexidade de tempo – MT multifita O(t(n)) → MT única fita O(t2(n)) – MT não-determinística O(t(n)) → MT única fita 2O(t(n)) COMPLEXIDADE DE TEMPO Diferenças polinomiais serão consideradas pequenas – MT multifita e MT com uma fita – Polinomialmente equivalentes Mas diferenças exponenciais serão tomadas como grandes – MT não-determinística e MT com uma fita COMPLEXIDADE DE TEMPO Algoritmos exponenciais – Raramente são úteis – Em geral surgem numa busca por força bruta – Exemplo: fatoração Algoritmos polinomiais – Rápidos para muitos propósitos – Computadores reais – Vários modelos computacionais são polinomialmente equivalentes COMPLEXIDADE DE TEMPO Já desprezamos fatores constantes – Notação O-grande Iremos desprezar diferenças polinomiais – Nossa teoria não dependerá de um modelo de computação específico – São importantes, mas queremos olhar por uma perspectiva diferente CLASSE P DEFINIÇÃO P é a classe de linguagens que são decidíveis em tempo polinomial por uma MT determinística de uma única fita P TIME (n k ) k CLASSE P P é matematicamente robusta – Invariante para os modelos de computação equivalentes à MT determinística de uma fita P é relevante de um ponto de vista prático – Problemas realisticamente solúveis em um computador CLASSE P – DESCRIÇÃO DOS ALGORITMOS Algoritmos serão descritos em alto nível – Não nos prenderemos em detalhes de um modelo computacional específico – Evitaremos detalhes relativos a fitas e movimentos de cabeças Descrição dos estágios – Estágios serão enumerados (como antes) – Um estágio em geral vai requerer muitos passos numa MT CLASSE P – DESCRIÇÃO DOS ALGORITMOS Análise quanto à polinomialidade – Entrada de comprimento n – Dar um limitante superior polinomial para o número de estágios que o algoritmo roda em função de n – Cada estágio deve ser implementável em tempo polinomial num modelo determinístico razoável Se os critérios acima forem respeitados, então o algoritmo executa em tempo polinomial – A composição de polinômios é um polinômio CLASSE P – DESCRIÇÃO DOS ALGORITMOS Codificação da entrada Grafos – Continuamos com – A codificação e a decodificação dos objetos devem ser polinomiais (razoáveis) – Exemplos: codificações que temos usados para autômatos e grafos – Matriz de adjacência: (i,j) é 1 sse existe aresta do nó i para j – Tempo calculado em função do número de nós CLASSE P – PROBLEMAS CAM = {<G,s,t> | G é um grafo direcionado que tem um caminho de s para t } CLASSE P – PROBLEMAS TEOREMA CAM ∈ P Estratégia força bruta – Examina todos os caminhos potenciais em G – Determinar se algum é um caminho direcionado de s para t – Caminho potencial: sequência de nós em G tendo um comprimento de no máximo |V| – Há aproximadamente |V||V| caminhos potenciais – Tempo exponencial CLASSE P – PROBLEMAS IDÉIA DA PROVA: usar um método de busca no grafo para evitar a força bruta. – Busca em largura: marcamos sucessivamente todos os nós que são atingíveis a partir de s por caminhos de comprimento 1, depois 2, em seguida 3 etc. – Mostrar que a estratégia é polinomial PROVA: o algoritmo seguinte M decide CAM em tempo polinomial CLASSE P – PROBLEMAS M = “Sobre a entrada <G, s, t> onde G é um grafo direcionado com nós s e t: – 1. Marque o nó s. – 2. Repita o passo seguinte até que nenhum nó adicional seja marcado 3. Para cada aresta (a,b) de G: se a for um nó marcado e b não estiver marcado, marque b. – 4. Se t estiver marcado, aceite. Senão, rejeite.” CLASSE P – PROBLEMAS Número de passos de M – Os passos 1 e 4 executam apenas uma vez – O passo 3 executa no máximo |V| vezes: no pior caso, apenas um nó é marcado a cada vez, exceto a última Complexidade dos passos de M – Os passos 1 e 4 são facilmente implementados em tempo polinomial – O passo 3 varre cada aresta e executa um teste para ver se um nó está marcado CLASSE P – PROBLEMAS Conclusão da prova – M executa uma quantidade de passos polinomial na entrada – Todos os passos de M rodam em tempo polinomial na entrada – Logo, M é polinomial – CAM ∈ P Exercício do livro: 7.8 CLASSE P – PROBLEMAS PRIM-ES = {<x, y> | x e y são primos entre si} Dois números são primos entre si quando 1 é o maior inteiro que divide ambos <10, 21> ∈ PRIM-ES <10, 22> ∉ PRIM-ES CLASSE P – PROBLEMAS TEOREMA PRIM-ES ∈ P Estratégia força bruta – Procurar entre todos os possíveis divisores de ambos os números – Aceita se o único divisor comum entre eles for 1 – A magnitude de um número representado em qualquer base maior ou igual a 2 é exponencial no comprimento da representação – Então a busca é feita entre um número exponencial de potenciais divisores CLASSE P – PROBLEMAS IDÉIA DA PROVA: usar o algoritmo de Euclides para computar o máximo divisor comum – Calcular o MDC de x e y – Se o resultado for 1, x e y são primos entre si Função mod: retorna o resto da divisão do primeiro número pelo segundo – 10 mod 3 = 1 – 28 mod 4 = 0 CLASSE P – PROBLEMAS PROVA: definiremos o algoritmo E para computar o MDC. Em seguida, definiremos o algoritmo R para decidir PRIM-ES CLASSE P – PROBLEMAS E = “Sobre a entrada <x, y>, onde x e y são números naturais em binário: – 1. Repita até que y = 0: 2. x := x mod y 3. Troque os valores de x e y – 4. Retorne x” R = “Sobre a entrada <x, y>, onde x e y são números naturais em binário: – 1. Execute E sobre <x, y> – 2. Se E retornou 1, aceite. Senão, rejeite.” CLASSE P – PROBLEMAS Complexidade de E – O passo 2 reduz o valor de x no mínimo pela metade (exceto possivelmente na 1ª vez: se x ≤ y) – Após o passo 2 temos x < y e depois do passo 3 temos x > y: a cada iteração do loop, um valor é reduzido no mínimo pela metade e o outro não – Então o número máximo de execuções do loop é o mínimo entre 2log2x e 2log2y – Como x e y são representados em binário, a quantidade de passos de E é O(n) – Os passos de E são facilmente implementáveis em tempo polinomial. Logo, o algoritmo é polinomial CLASSE P – PROBLEMAS Complexidade de R – R = “Sobre a entrada <x, y>, onde x e y são números naturais em binário: 1. Execute E sobre <x, y> 2. Se E retornou 1, aceite. Senão, rejeite.” – Como E roda em tempo polinomial, então R também é polinomial Exercícios do livro: 7.3 e 7.12 CLASSE P – PROBLEMAS AGLC = {<G, w> | G é uma GLC que gera a cadeia w} Uma MT que decide AGLC S = “Sobre a entrada <G, w>, onde G é uma GLC e w uma cadeia de comprimento n: – 1. Converta G para a forma normal de Chomsky – 2. Liste todas as derivações com 2n-1 passos (se n = 0, liste todas as derivações com 1 passo) – 3. Se alguma derivação gerou w, aceite. Senão, rejeite.” CLASSE P – PROBLEMAS S roda em tempo polinomial? – Qualquer derivação de uma cadeia |w| = n tem 2n1 passos (se a gramática está na forma normal de Chomsky) – S tenta todas as derivações com 2n-1 passos para verificar se alguma gera w – Como o número de derivações com k passos pode ser exponencial em k, S não é polinomial – Logo, S não prova que aceitação de LLC é polinomial Existe algum algoritmo polinomial para aceitação de LLC? CLASSE P – PROBLEMAS TEOREMA IDÉIA DA PROVA – Utilizar programação dinâmica: guardar informações sobre subproblemas menores – Subproblema: determinar se cada variável da GLC gera cada subcadeia de w – Usar uma tabela n x n para guardar as soluções dos subproblemas – (i, j): se i ≤ j, então a célula guarda as variáveis que geram a subcadeia wiwi+1...wj. As posições com i > j não serão utilizadas – Preenche a tabela para as subcadeias de comprimento 1, depois 2, ... Até a de tamanho n CLASSE P – PROBLEMAS IDÉIA DA PROVA (continuação) – Suponha que o algoritmo já tenha resolvido o problema para todas as subcadeias de tamanho k – Para saber se alguma variável A gera uma subcadeia específica de tamanho k+1: Dividir a subcadeia de tamanho k+1 em duas partes não vazias (há k possibilidades de divisão) Para cada divisão, o algoritmo passa por cada regra do tipo A → BC Se B gera a primeira subcadeia e C gera a segunda, então A gera a subcadeia de tamanho k+1 Adicionamos A à entrada associada da tabela – Iniciamos com as cadeias de tamanho 1 e analisando as regras do tipo A → b CLASSE P – PROBLEMAS TEOREMA PROVA: algoritmo que recebe uma gramática na forma normal de Chomsky e uma cadeia w (S é a variável inicial da gramática) D = “Sobre a entrada w = w1w2...wn – 1. Se w = ε e S → ε for uma regra, aceite – 2. Para i=1 até n: 3. Para cada variável A: – 4. Teste se A → wi é uma regra – 5. Se for, adicione A em tabela(i, i) CLASSE P – PROBLEMAS D (continuação) – 6. Para l = 2 até n 7. Para i=1 até n-l-1 8. j := i+l-1 9. Para k=i até j-1 [l é o comprimento da subcadeia] [i é a posição inicial da subcadeia] [j é a posição final da subcadeia] [k é onde ocorre a divisão] – 10. Para cada regra A → BC – 11. Se tabela(i, k) contém B e tabela (k+1,j) contém C Coloque A em tabela(i, j) – 12. Se S estiver em tabela(1, n), aceite. Senão, rejeite CLASSE P – PROBLEMAS Complexidade de D – Todo os passos são implementados em tempo polinomial – A quantidade de passos é polinomial: O(n3) + O(n) = O(n3) O passo 1 roda apenas uma vez Os passos 4 e 5 rodam no máximo n*v (onde v é o número de variáveis): O(n) O passo 6 roda no máximo n vezes – Para cada vez que o 6º roda, o passo 7 roda no máximo n vezes – Para cada vez que o 7º roda, os passos 8 e 9 rodam no máximo n vezes – Cada execução do 9º, o passo 10 roda r vezes (onde r é uma constante fixa) Logo, o passo 11 roda O(n3) vezes Exercício do livro: 7.4 Informática Teórica Engenharia da Computação