Complexidade de Algoritmos



Documentos relacionados
Análise e Complexidade de Algoritmos

Classes de Complexidade e NP-Completude

MD Teoria dos Conjuntos 1

Faculdade de Computação

AULA 6 LÓGICA DOS CONJUNTOS

Projeto e Análise de Algoritmos Projeto de Algoritmos Tentativa e Erro. Prof. Humberto Brandão humberto@bcc.unifal-mg.edu.br

Teoria dos Grafos. Edson Prestes

a 1 x a n x n = b,

SISTEMAS DIGITAIS Prof. Ricardo Rodrigues Barcelar

Análise e Síntese de Algoritmos

II. DEFINIÇÕES INICIAIS 1

Autómatos Finitos Determinísticos

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

Álgebra Booleana. Introdução ao Computador 2010/01 Renan Manola

Só Matemática O seu portal matemático FUNÇÕES

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO. Seção 5.1 Problemas indecidíveis. Slides originais gentilmente cedidos pela Profa. Ariane Machado Lima

O Problema do Troco Principio da Casa dos Pombos. > Princípios de Contagem e Enumeração Computacional 0/48

Falso: F = Low voltage: L = 0

Complexidade de Algoritmos. Edson Prestes

UM TEOREMA QUE PODE SER USADO NA

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

Capítulo 7. Topologia Digital. 7.1 Conexidade

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

2 Problema das p-medianas

Alfabeto e palavras. Alfabeto conjunto finito de símbolos (Σ).

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO PROGRAMA DE EDUCAÇÃO TUTORIAL - MATEMÁTICA PROJETO FUNDAMENTOS DE MATEMÁTICA ELEMENTAR

O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2

Material Teórico - Módulo de Divisibilidade. MDC e MMC - Parte 1. Sexto Ano. Prof. Angelo Papa Neto

Faculdade de Computação

Bases Matemáticas. Aula 2 Métodos de Demonstração. Rodrigo Hausen. v /15

Somatórias e produtórias

Capítulo 2. Álgebra e imagens binárias. 2.1 Subconjuntos versus funções binárias

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

FUNÇÃO REAL DE UMA VARIÁVEL REAL

RELAÇÕES BINÁRIAS Produto Cartesiano A X B

Conceitos Fundamentais

TEORIA DOS CONJUNTOS Símbolos

Programa de Formação Contínua em Matemática para Professores do 1.º e 2.º Ciclos do Ensino Básico. I. Conjuntos

¹CPTL/UFMS, Três Lagoas, MS,Brasil, ²CPTL/UFMS, Três Lagoas, MS, Brasil.

Matemática - UEL Compilada em 18 de Março de Prof. Ulysses Sodré Matemática Essencial:

TEORIA DE COMPLEXIDADE

Exercícios 1. Determinar x de modo que a matriz

Aula: Equações polinomiais

Orientação a Objetos

AULA 5 QUANTIFICADORES, PREDICADOS E VALIDADE

Complexidade computacional

Portas Lógicas Básicas Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 2h/60h

1 Módulo ou norma de um vetor

MD Sequências e Indução Matemática 1

CAP. I ERROS EM CÁLCULO NUMÉRICO

Estruturas Discretas INF 1631

Aplicações de Combinatória e Geometria na Teoria dos Números

Exercícios Teóricos Resolvidos

Teoria da Computação Linguagens e Expressões Regulares, Autómatos de Estados Finitos

EQUAÇÕES E INEQUAÇÕES DE 1º GRAU

E A D - S I S T E M A S L I N E A R E S INTRODUÇÃO

ÁLGEBRA BOOLEANA. Foi um modelo formulado por George Boole, por volta de 1850.

Roteamentos AULA ... META. Introduzir alguns problemas de roteamento. OBJETIVOS. Ao final da aula o aluno deverá ser capaz de:

Notas de Aula - Álgebra de Boole Parte 1

Construção de tabelas verdades

Computabilidade 2012/2013. Sabine Broda Departamento de Ciência de Computadores Faculdade de Ciências da Universidade do Porto

Notas de aula número 1: Otimização *

QUESTÕES COMENTADAS E RESOLVIDAS

Resolução de sistemas lineares

Associação de resistores

Análise de Algoritmos. Slides de Paulo Feofiloff

Cálculo das Probabilidades e Estatística I

INE0003 FUNDAMENTOS DE MATEMÁTICA DISCRETA

5COP096 TeoriadaComputação

Escola Secundária c/3º CEB José Macedo Fragateiro. Curso Profissional de Nível Secundário. Componente Técnica. Disciplina de

PROBABILIDADE Prof. Adriano Mendonça Souza, Dr.

PROBLEMA DO CARTEIRO CHINÊS

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

MÉTODOS DISCRETOS EM TELEMÁTICA

Redução polinomial. Permite comparar o grau de complexidade de problemas diferentes.

Matemática Discreta para Ciência da Computação

A integral também é conhecida como antiderivada. Uma definição também conhecida para integral indefinida é:

ESCOLA ESTADUAL DE ENSINO MÉDIO RAUL PILLA COMPONENTE CURRICULAR: Matemática PROFESSORA: Maria Inês Castilho. Conjuntos

Função. Definição formal: Considere dois conjuntos: o conjunto X com elementos x e o conjunto Y com elementos y. Isto é:

1. Extremos de uma função

Autómatos finitos não determinísticos (AFND)

Qual é Mesmo a Definição de Polígono Convexo?

Resolução de problemas e desenvolvimento de algoritmos

Problemas Intratáveis ou computação eficiente X computação ineficiente

Este material traz a teoria necessária à resolução das questões propostas.

[a11 a12 a1n 4. SISTEMAS LINEARES 4.1. CONCEITO. Um sistema de equações lineares é um conjunto de equações do tipo

Teoria dos Conjuntos. Prof Elizeu Junior

Universidade Federal do ABC. Sinais Aleatórios. Prof. Marcio Eisencraft

Raciocínio Lógico para o INSS Resolução de questões Prof. Adeilson de melo REVISÃO 01 - conjuntos e porcentagens

Modelagem no Domínio do Tempo. Carlos Alexandre Mello. Carlos Alexandre Mello 1

Lógica Matemática e Computacional 5 FUNÇÃO

Contagem. Prof. Dr. Leandro Balby Marinho. Matemática Discreta. Fundamentos Inclusão/Exclusão Princípio da Casa dos Pombos Permutações Combinações

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Aula 5 - Matemática (Gestão e Marketing)

3. Tipos de Dados, Constantes e Variáveis.

Disciplina: Introdução à Álgebra Linear

Resíduos Quadráticos e Fatoração: uma aplicação à criptoanálise do RSA

Teoria dos Grafos. Edson Prestes

6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto

Transcrição:

Complexidade de Algoritmos Classes de Complexidades de Problemas Prof. Osvaldo Luiz de Oliveira Estas anotações devem ser complementadas por apontamentos em aula.

Tempo polinomial Um algoritmo A, com entrada de tamanho igual a n, é polinomial se a sua complexidade (tempo, pior caso) é O(n k ) pata algum k 0. CP 2

Problemas Todo problema para o qual existe um algoritmo polinomial é dito ser tratável. Inversamente, o problema é dito ser intratável. CP 3

Por que o tempo polinomial é o divisor de águas? As diferenças entre tempo polinomial e super-polinomial são astronômicas. Embora O(n 1000 ) seja um limite superior muito grande, existem poucos problemas práticos que admitem algoritmos polinomiais com alto grau polinomial. Deus não é tão cruel assim. CP 4

Problemas de decisão Problema cuja resposta é 1 ( sim ) ou 0 ( não ). A teoria estudada restringe a atenção a problemas de decisão. CP 5

CLIQUE Dado um grafo não orientado G = (V, E) e uma constante k 0. Problema: determinar se G tem uma clique de tamanho igual a k. Uma clique de G = (V, E) é um conjunto de vértices C V tal que existe aresta em E entre dois quaisquer vértices de C. 1 2 3 Cliques de tamanho 2: {2, 4}, {5, 7} etc.. 4 5 Cliques de tamanho 3: {1, 2, 3}, {4, 5, 6} etc. Clique de tamanho 4: {4, 5, 6, 7}. 6 7 CP 6

COBERTURA DE VÉRTICES (VC) Dado um grafo não orientado G = (V, E) e uma constante k 0. Problema: determinar se G tem VC de tamanho igual a k. C V é VC de G = (V, E) se e somente se para toda aresta (u, v) E ocorre de u C ou v C. Uma VC de tamanho igual a 7: C = {1, 2, 3, 4, 5, 6, 7}. 1 2 3 4 5 Uma VC de tamanho igual a 5: C = {2, 3, 4, 5, 7}. 6 7 CP 7

CICLO HAMILTONIANO Dado um grafo não orientado G = (V, E). Problema: determinar se G tem um ciclo hamiltoniano. Um ciclo hamiltoniano é um circuito (simples) que contém cada vértice de G exatamente uma vez. CP 8

CAIXEIRO VIAJANTE (TRAVELING SALESMAN TSP) Dado um grafo não orientado G = (V, E), completo, com custo nas arestas, e um número W. Problema: determinar se G tem um ciclo hamiltoniano de custo W. A 15 C 55 23 25 Um ciclo hamiltoniano de custo 80: A, D, B, C, A 27 B 13 D W = 80 CP 9

COLORAÇÃO COM TRÊS CORES (3-COLORING) Dado um grafo não orientado G = (V, E). Problema: determinar se G pode ser colorido com três cores. Grafo de Petersen. CP 10

COLORAÇÃO COM K CORES (K-COLORING) Dado um grafo não orientado G = (V, E) e um inteiro k. Problema: determinar se G pode ser colorido com k cores. Em outras palavras, determinar se existe função f : V {1, 2,..., k} tal que para toda aresta (u, v) E ocorre que f (u) f (v). CP 11

SOMA DO SUBCONJUNTO (SUBSET-SUM) Dado conjunto S de n inteiros e um inteiro k. Problema: determinar se existe subconjunto S de S cuja soma seja igual a k. Exemplo: sejam S = {2, 5, 8, 9, 15, 18} e k = 22. Neste caso existe S = {2, 5, 15}. CP 12

PARTIÇÃO Dado um conjunto S = {s 1, s 2,..., s n } de números. Problema: determinar se existe subconjunto T de S tal que s T i s i = i s S T Exemplo: seja S = {1, 3, 8, 9, 15, 18}. i Neste caso existe T = {1, 3, 8, 15}, uma vez que S T = {9, 18}. s. CP 13

MOCHILA (KNAPSACK) Dado um conjunto S de objetos numerados de 1 a n. Cada objeto i tem associado um inteiro s i e um valor w i. Também são dados dois valores C e W. Problema: determinar se existe subconjunto T de S tal que i T s i C e s i T w i W. 1 2 3 4 5 6 7 Exemplo: sejam S 5 3 7 2 6 4 8, C = 10 e W = 6 5.2 3.1 2.2 2.3 3.3 1.1 2.4 w Neste caso existe T S, T = {2, 4, 6}. CP 14

SATISFATIBILIDADE DE CIRCUITO (CIRCUIT-SAT) Dado um circuito composto por portas NOT, OR e AND com um único pino de saída. Problema: determinar se existe uma atribuição de valores para as entradas de forma que a saída seja igual a 1. CP 15

SATISFATIBILIDADE DE FÓRMULA BOOLEANA (SAT) Dado uma formula φ composta variáveis booleans x 1, x 2,... x n, conectivos lógicos (,,,, ) e parênteses. Problema: determinar se existe uma atribuição de valores para as variáveis de φ de forma que a fórmula seja avaliada igual a 1. φ = (x 1 x 2 ) pode ser satisfeita com x 1 = 1 e x 2 = 1. Pode ser satisfeita com x1 = 0, x 2 = 0, x 3 = 1 e x 4 = 1. CP 16

Codificação da entrada Cada problema de decisão possui uma infinidade de instâncias de problema. Uma instância do problema de decisão CLIQUE: G 1 2 3 4, k = 3 O grafo possui uma clique de tamanho igual a 3? Cada instância está associada a uma cadeia (codificação). Exemplo: x = #grafo G#3# 1,2,3,4$(1,2),(1,3),(2,3),(3,4) x = #1,2,3,4$(1,2),(1,3),(2,3),(3,4)#3# CP 17

Um pouco de linguagens formais (alfabeto): conjunto finito de símbolos. = { #, $,,, (, ), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }. = 2 (concatenação de com ). = { ##, #$, #,, #(, #), #0, #1,... $#, $$, $,,... }. 2 = 3. 2 = { ###, ##$, ##,, ##(,... #$#, #$$, #$,,... } 0 = { ε }, onde ε representa a cadeia vazia. CP 18

Um pouco de linguagens formais * (conjunto de todas as cadeias que podem ser construídas com o alfabeto, ou seja, * = 0 2 3.... Palavras de comprimento * = { ε, #, $,,, (, ), 0,..., } ##, #$, #,, #(, #), #0, #1,..., ###, ##$, ##,, ##(,...... 0 1 2 3 CP 19

Um pouco de linguagens formais Linguagem L: subconjunto de cadeias de *. L 1 = = { } (linguagem vazia). L 2 = { #, ##, #$# } L 3 = { #1,2,3,4$(1,2),(1,3),(2,3),(3,4)#3# } L 4 = { ε } (linguagem que contém apenas a cadeia vazia) CP 20

Um pouco de linguagens formais Algumas operações sobre linguagens. Sejam L, L 1 e L 2 linguagens sobre o alfabeto. - União: L 1 L 2 = { x * x L 1 ou x L 2 } - Intersecção: L 1 L 2 = { x * x L 1 e x L 2 } - Concatenação: L 1. L 2 = { x 1 x 2 * x 1 L 1 e x 2 L 2 } - Concatenação de L k vezes L k = L. L k-1, para k > 0 L 0 = { ε } - L * (fecho reflexivo e transitivo de L ou fecho de Kleene) L * = { ε } L L 2 L 3... - Complemento: L = * - L = { x * x L} CP 21

Problema de decisão e linguagem Problema de decisão: problema cuja solução tem como resposta 1 ( sim ) ou 0 ( não). Instâncias de um problema de decisão Q podem ser codificadas sobre um alfabeto. Uma linguagem L sobre pode representar as instâncias de um problema de decisão. L = { x * Q (x) = 1 } CP 22

Exemplo Problema de decisão CLIQUE e Linguagem CLIQUE Problema de decisão CLIQUE: dado grafo G=(V, E) e uma constante k, responder 1 ( sim ) caso G tenha uma clique de tamanho igual a k e 0 ( não ), caso contrário. Linguagem CLIQUE (Lc) Lc = { x *, x = #grafo G#k# existe clique de tamanho igual a k em G } x = #1, 2, 3, 4 $ (1, 2), (1, 3), (2, 3), (3, 4)#3# Lc. x = #1, 2, 3, 4 $ (1, 2), (1, 3), (2, 3), (3, 4)#4# Lc. Observe que Lc é formado por cadeias cujo problema de decisão tem resposta 0 ( não ) e também aquelas com formato impróprio. CP 23

Algoritmo de decisão e linguagem aceita Algoritmo de decisão: algoritmo que recebe uma cadeia x e retorna 1 ( sim ) ou 0 ( não ). Linguagem L aceita por um algoritmo de decisão A. L = { x * A(x) = 1 } Linguagem M rejeitada por um algoritmo de decisão A. M = { x * A(x) = 0 } L M pode ser diferente de *, pois para A pode entrar em looping para alguma cadeia e, assim, nem aceitar, nem rejeitar. CP 24

Linguagem decidida por um algoritmo Um algoritmo A decide uma linguagem L se, para toda cadeia x *, A (x) = 1 ou A(x) = 0. CP 25

Tamanho da entrada (n) Quantidade de símbolos (ou de bits) utilizados para codificar uma instância do problema x = #1,2,3,4$(1,2),(1,3),(2,3),(3,4)#2# n = x = 35 ou x = 35. 8 = 280 bits para uma certa codificação em que cada símbolo é representado por 8 bits. CP 26

Classe de complexidade P P = { linguagens L existe algoritmo A que aceita L em tempo polinomial ao tamanho da entrada, no pior caso } Em outras palavras: conjunto de todos os problemas de decisão para os quais existe algoritmo polinomial ao tamanho da entrada, no pior caso. Observe que a definição da classe P, nada é dito sobre o tempo de execução para rejeitar uma cadeia x não pertencente a L. CP 27

A classe P é fechada para, união, intersecção, complemento, concatenação e fecho de kleene. Ou seja, se L, L 1, L 2 P, então: L 1 L 2 P; L 1 L 2 P; L P; L 1. L 2 P; L * P. Fechos da classe P CP 28

Outra definição da classe de complexidade P Como P é fechado sobre o complemento, então podemos dizer que P = { linguagens L existe algoritmo A que decide L em tempo polinomial ao tamanho da entrada, no pior caso } CP 29

Algoritmos de verificação Suponha que alguém lhe ofereceu um conjunto de vértices que ele diz solucionar o problema da CLIQUE igual a k em um grafo G. Por exemplo, alguém diz y = {1, 2, 3}para esta instância do problema y é chamado de certificado G 1 2 3 4, k = 3 É fácil verificar se o certificado y = {1, 2, 3} é uma clique em G de tamanho igual 3. CP 30

Algoritmo de verificação Um algoritmo de verificação toma duas entradas: x (a cadeia a ser verificada) e y (o certificado). Algoritmo A (x, y) Entrada: x *, x = #grafo G#k# e y (certificado), um conjunto de vértices. Saída: 1 se y é uma clique de G de tamanho igual a k e 0, caso contrário. { } se o tamanho de y for igual a k senão se para cada vértice em y houver em G aresta para os outros vértices de y senão retornar 1 retornar 0 retornar 0 CP 31

Classe de complexidade NP NP = { linguagens L existe algoritmo de verificação A que aceita L em tempo polinomial ao tamanho da entrada, no pior caso } Em outras palavras: conjunto de todos os problemas de decisão para os quais existe algoritmo de verificação polinomial ao tamanho da entrada, no pior caso. Observe que a definição da classe NP, nada é dito sobre o tempo de execução para rejeitar uma cadeia x não pertencente a L. Obs.: o nome NP vem de nondeterministic polynomial. Esta classe foi originalmente estudada no contexto do não determinismo. A definição que estamos usando é equivalente a uma outra que diz que NP é a classe das linguagens que definem problemas de decisão para as quais existe algoritmo não determinístico que executa em um tempo polinomial, no pior caso. CP 32

Algoritmo A (x, y) Linguagem CLIQUE Lc NP Entrada: x *, x = #grafo G#k# e y (certificado), um conjunto de vértices. Saída: 1 se y é uma clique de G de tamanho igual a k e 0, caso contrário. { } se o tamanho de y for igual a k se para cada vértice em y houver em G aresta para os outros vértices de y retornar 1 senão retornar 0 senão retornar 0 1 - O certificado y = O(n) 2 - Algoritmo A aceita Lc em tempo polinomial. Logo, Lc NP. O(n 2 ) O que também significa que o problema de decisão CLIQUE NP. CP 33

Não se sabe se P = NP. P NP. Prova A questão P = NP Seja L P. Então existe um algoritmo A que decide L em tempo polinomial. Podemos usar A para desenvolver um algoritmo de verificação B que aceita L em tempo polinomial. Algoritmo B (x, y) { } retornar A (x) // Ignora o certificado y. O algoritmo de verificação B aceita x se e somente se A aceita x, assim B aceita L. Além disso B executa em tempo polinomial, pois A executa em tempo polinomial. Logo L NP. Ou seja P NP. CP 34

Possíveis cenários Não se sabe se NP é fechado pelo complemento, isto é, se L NP implica que L NP. co-np = { L NP L NP }. CP 35

Reduções em tempo polinomial Um problema Q pode ser reduzido a um problema R se Q puder ser refraseado em termos de R. O problema de resolver uma equação linear a x + b = 0 pode ser reduzido ao problema de resolver uma equação do segundo grau 0x 2 + a x + b = 0. CP 36

Reduções em tempo polinomial Uma linguagem L 1 é redutível em tempo polinomial a uma linguagem L 2, escreve-se L 1 p L 2, se existe um algoritmo polinomial A tal que, para todo x * : - A(x) = y (i. e., A transforma x em y) - x L 1 se e somente se y L 2. A * * CP 37

Lc: Linguagem CLIQUE Exemplo: Lc p Lvc Lc = { x *, x = #grafo G#k# existe clique de tamanho igual a k em G } Lvc: Linguagem COBERTURA DE VERTICES Lvc = { x *, x = #grafo G#k# existe cobertura de vértices de tamanho igual a k em G } CP 38

Idéia sobre o algoritmo que Lc p Lvc G = (V, E) 1 4, k = 3 G = (V, E) 1 4, k = V - C = 1 2 3 Clique C = {1, 2, 3} 2 3 Cobertura de vértices VC = V C ={4} G = (V, E) 1 G = (V, E) 1 2 3 2 3 4 5, k = 4 4 5, k = V - C = 3 6 Clique C = {4, 5, 6, 7} 7 6 7 Cobertura de vértices VC = V C ={1, 2, 3} CP 39

O algoritmo de redução Algoritmo Reduz_Lc_Lvc (x) Entrada: x *, x = #grafo G#k# Saída: y *, x = #grafo G#k # { } 1 - Computar o grafo G = (V, E) a partir do grafo G =(V, E), onde E = { (u, v) (u, v) E }; 2 k = V - k; 3 y := #grafo G#k # 4 retornar y O(n 2 ) T(n) = O(n 2 ). O algoritmo de redução é polinomial. CP 40

Completando a prova Precisamos mostrar que: x Lc se e somente se y Lvc. i) Mostrando: Se x Lc y Lvc. x = #grafo G#k#. x Lc existe uma clique em G = (V, E), digamos C, de tamanho igual a k. O algoritmo de redução transforma x em y = #grafo G#k #. Seja (u, v) uma aresta de E. (u, v) E u ou v (ou ambos) não pertencem a C, já que em uma clique todos os vértices estão conectados. Logo u ou v pertencem a V C, o que significa que (u, v) é coberto por V C. Como (u, v) foi escolhido arbitrariamente em E, então toda aresta de E é coberta por V C. V C é uma cobertura de vértices em G. Esta cobertura tem tamanho k = V - k. CP 41

Completando a prova i) Mostrando: Se y Lvc x Lc. y = #grafo G#k #. y Lvc existe uma cobertura de vértices em G = (V, E), digamos C, de tamanho igual a k = V - k. Para todo u, v V, se (u, v) E, então u C ou v C (ou ambos pertencem a C). A contrapositiva desta afirmação é que para todo u, v V, se u C e v C então (u, v) E. Em outras palavras V C é uma clique. O tamanho desta clique é V - C = V - ( V - k ) = k. CP 42

Implicação importante das reduções polinomiais Se L A p L B e existe algoritmo B que decide L B em tempo polinomial então existe algoritmo A que decide L A em tempo polinomial. Algoritmo A (x) O (n k ), i.e, polinomial { y := Reduz_LA_LB (x); // Obtém uma instância y do problema B a partir de // uma instância x do problema A. } retornar B (y) // Retorna 1 ( sim ) se B retornar 1 e 0 ( não ), caso contrário. O (n c ), i.e, polinomial Complexidade de A: T(n) = O (nk) + O (nc) = O(n k + c ), i.e, polinomial. CP 43

Classe de complexidade NP-difícil (NP-hard) NP-difícil = { linguagens L para todo L NP ocorre que L p L } Isto é, L não é mais do que um fator polinomial difícil do que L. CP 44

Classe de complexidade NP-completo NP-completo = { linguagens L L NP e L NP-difícil} CP 45

L CIRCUIT-SAT = Primeiro problema NP-completo { #circuito C# existe uma atribuição de valores para a entrada de forma que a saída seja igual a 1 } Obs.: C é uma codificação do circuito usando símbolos de um alfabeto. CP 46

Primeiro problema NP-completo Teorema de Cook-Levin: L CIRCUIT-SAT NP-completo. Cook mostrou em 1971que CNF-SAT é NP-completo. Levin formulou a noção de NP completude de forma independente de Cook, quase na mesma época. Garey e Johnson (indicado na bibliografia da disciplina) é um catálogo para muitos problemas NP-completos. Cormen (livro texto) fornece uma prova simplificada do teorema. Stephen Cook. The complexity of theorem proving procedures. In Proceedings of the Third Annual ACM Symposium on Theory of Computing, pages 151 158, 1971. L. A. Levin. Universal sorting problems. Problemy Peredachi Informatsii, 9(3):265 266, 1973. In Russian. CP 47

Outra definição para a classe NP-completo NP-completo = { linguagens L L NP e L p L para algum L NP-completo } Esta definição simplifica a prova de que um problema de decisão é NP-completo. Não há necessidade de provar L NP-difícil, i.e, que para todo L NP ocorre de L p L. Basta provar que existe L NP-completo tal que L p L. Isto decorre do fato: se existe tal L então todo L NP, L p L. Então, por transitividade L p L p L. CP 48

Prova de que uma linguagem L NP-completo 1 - Mostrar L NP. 2 Mostrar que L NP-difícil Achar uma linguagem L NP-completo tal que L p L. 2.1 Descrever um algoritmo A(x) que reduz em tempo polinomial uma instância x * de L a uma instância y de L. 2.2 Mostrar que o algoritmo A executa em tempo polinomial. 2.3 Mostrar que x L se e somente se y L. CP 49

Um pequeno quadro de reduções clássicas em tempo polinomial de problemas NP-completos Cada problema em NP O mesmo que CNF-SAT só cláusulas terão extamente três variáveis CIRCUIT-SAT SAT CNF-SAT O mesmo que SAT só que formula na forma normal conjuntiva (CNF) (...... ) (...... )... 3-CNF-SAT CLIQUE COBERTURA DE VÉRTICES (VC) CICLO HAMILTONIANO TSP SUBSET-SUM MOCHILA CP 50

Prova de que L SAT NP-completo L SAT = { #formula φ# existe atribuição de valores às variáveis de φ de maneira que φ seja igual a 1 } Precisamos mostrar que: 1 - L SAT NP. 2 - L SAT NP-difícil. 1 Mostrando que L SAT NP. Isto é, temos que mostrar que existe algoritmo de verificação A que aceita L SAT em tempo polinomial ao tamanho da entrada, no pior caso. CP 51

Continuação Algoritmo A (x, y) Entrada: x *, x = #φ# e y (certificado), uma atribuição de valores para as variáveis de φ. Saída: 1 se y é uma atribuição de valores que faz φ ser igual a 1e 0, caso contrário. { } 1 substituir em φ cada variável pelo valor associado a ela no certificado; 2 avaliar a expressão resultante; 3 se valor da expressão resultante for igual a 1 retornar 1 senão retornar 0 O(n) O(n) - O certificado y = O(n) - Algoritmo A aceita L SAT em tempo polinomial. Logo, L SAT NP. CP 52

Continuação 2 Mostrando que L SAT NP-difícil. L CIRCUIT-SAT NP-completo. Mostraremos que L CIRCUIT-SAT p L SAT L CIRCUIT-SAT = { #circuito C# existe uma atribuição de valores para as entradas de forma que a saída de C seja igual a 1 } Idéia do algoritmo que reduz em tempo polinomial L CIRCUIT-SAT a L SAT. CP 53

Algoritmo Reduz_L CIRCUIT-SAT _L SAT (x) Entrada: x *, x = #circuito C# Saída: y *, y = #fórmula φ# { } 1 Para cada porta lógica de C gerar uma sub-formula φ i, conforme: - porta AND Entrada (x 1, x 2,...x n ) Saída (z): gerar ( z (x 1 x 2... x n ) ); - porta OR Entrada (x 1, x 2,...x n ) Saída (z): gerar ( z (x 1 x 2... x n ) ); - porta NOT Entrada (x) Saída (z): gerar ( z ( x ) ); 2 φ := x o φ 1 φ 2... φ m, onde x o é a variável que representa o pino de saída do circuito C. 3 y := #fórmula φ# 4 retornar y Continuação O(n) O(n) T(n) = O(n). O algoritmo de redução é polinomial em relação ao tamanho (n) de x. CP 54

Continuação Precisamos mostrar que: x L CIRCUIT-SAT se e somente se y L SAT. i) Mostrando: Se x L CIRCUIT-SAT y L SAT. CP 55

ii) Mostrando: y L SAT Se x L CIRCUIT-SAT. y = #fórmula φ#. Continuação y L SAT existe uma atribuição de valores às variáveis de φ de modo que a o resultado de φ é igual a 1. Quando associamos às variáveis x i de φ cada cláusula avalia igual a 1 e conjunção de valores avalia 1. De forma análoga o circuito C tem saída igual a 1. CP 56

Muitos acreditam neste relacionamento NP NP-completo P CP 57

Extras CP 58

Conjuntos CP 59

Definições Conjunto Coleção de zero ou mais elementos distintos. denota um conjunto vazio (zero elemento). a) Pertinência Se um elemento x pertence a um conjunto A, denota-se por x A. Caso contrário escreve-se x A. b) Subconjunto e subconjunto próprio - A B: o conjunto A é subconjunto de B, i.e, para todo x A ocorre de x B. - A B: o conjunto A é subconjunto próprio de B, i.e, para todo x A ocorre de x B, mas existe pelo menos um y B tal que y A. c) Igualdade entre conjuntos A e B A = B se e somente se A B e B A. CP 60

a) União A B = { x x A ou x B } b) Intersecção A B = { x x A e x B } c) Diferença A B = { x x A e x B } d) Complemento em relação a um conjunto universo U definido. A = { x x U e x A } e) Conjunto das partes = 2 A = { S S A } f) Produto cartesiano A x B = { (x, y) x A e y B } Operações CP 61

Exemplos Sejam os conjuntos A = { 0, 1, 2 }, B = { 2, 3 } e N números naturais. A B = { 0, 1, 2, 3} A B = { 2 } A B = { 0, 1} A = { x N x > 2 } = 2 B = {, {2}, {3}, {2, 3} } A x B = { (0, 2), (0, 3), (1, 2), (1, 3), (2, 2), (2, 3)} CP 62

a) Idempotência A A = A A A = A b) Comutatividade A B = B A A B = B A c) Associatividade A ( B C) = (A B) C A (B C) = (A B) C d) Distributividade A ( B C) = (A B) (A C) A ( B C) = (A B) (A C) e) Morgan A B = (A B) A B = (A B) Algumas propriedades CP 63

Lógica CP 64

Conjunto lógico: { 0, 1} ou { F, V }. a) Negação (Not): b) E (and): c) Ou (Or): d) Se então: e) Se e somente se: Operadores CP 65

Tabela de verdade x y x x y x y x y x y 0 0 1 0 0 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1 1 0 1 1 1 1 CP 66

a) Idempotência x x x x x x b) Comutatividade x y = y x x y = y x c) Associatividade x (y z) = (x y) z x (y z) = (x y) z d) Distributividade x (y z) = (x y) (x z) x (y z) = (x y) (x z) e) Morgan x y = ( x y) x y = ( x y) Algumas propriedades CP 67

Grafos CP 68

Definição e tipos Definição Um grafo G = (V, E) é um sistema matemático constituído por um conjunto de vértices V (ou nós) e um conjunto de arestas E. A cada aresta E corresponde um par de vértices. Não orientado 1 Orientado 1 G = (V, E) 2 3 G = (V, E) 2 3 4 5 4 5 V = { 1, 2, 3, 4, 5 } E = { {1, 2}, {1, 3}, {2, 3}, {2, 4}, {4, 5} } V = { 1, 2, 3, 4, 5 } E = { (1, 2), (3, 1), (3, 2)}, (4, 2), (4, 5) } CP 69

Matriz de adjacências G = (V, E) 1 2 3 G = (V, E) 1 2 3 4 5 4 5 1 2 3 4 5 1 2 3 4 5 1 1 1 1 1 1 1 1 1 1 M 1 2 3 4 5 1 2 3 4 5 1 1 1 1 1 M M [v, w] = 1: existe aresta de v para w CP 70

Lista de adjacências 1 G = (V, E) 2 3 1 2 4 5 2 3 4 1 2 2 5 5 CP 71