Questões-guia:
- Mostre que CIRCUIT-SAT ≤P SAT. Dica: coloque nomes de variáveis para os fios também, além das entradas.
- Mostre que SAT ≤P 3-CNF-SAT. Dica: a partir de uma árvore sintática para a fórmula, dê nomes de variáveis aos nós internos da árvore, construa cláusulas para cada nó interno, transforme cada cláusula em ≤3-CNF, depois em 3-CNF.
- Mostre que 3-CNF-SAT ≤P CLIQUE. Dica: construa um vértice para cada literal de cada cláusula e ligue literais consistentes em cláusulas distintas. A fórmula será satisfatível se e somente se o grafo tiver uma clique de tamanho n/3, onde n é o número total de vértices.
- Mostre que CLIQUE ≤P VERTEX-COVER. Dica: use STABLE-SET como intermediário.
- Mostre que 3-CNF-SAT ≤P 3-COLOR. Dica: veja Problema 34-3 do Cormen.
Exercícios:
- Exercício 34.4-1 do Cormen.
- Exercício 34.4-2 do Cormen.
- Exercício 34.4-5 do Cormen.
- Exercício 34.5-6 do Cormen.
Questões-guia:
- Que tipos de portas lógicas podem ser usadas em instâncias de CIRCUIT-SAT?
- Em CIRCUIT-SAT, um único fio pode ligar quantas entradas e quantas saídas de portas lógicas?
- O que é o fan-out de um fio? E o fan-in?
- Se representarmos cada porta lógica de uma instância de CIRCUIT-SAT por um vértice, e colocarmos um arco de p1 a p2 sempre que a saída de p1 estiver ligada à entrada de p2, qual propriedade este grafo orientado deverá ter? Quantos vértices de grau de saída 0 este grafo poderá ter?
- Com relação a instâncias de CIRCUIT-SAT, defina atribuição de valores-verdade, atribuição satisfatória e circuito satisfatível.
- Defina a linguagem CIRCUIT-SAT.
- Como se define o tamanho de uma instância de CIRCUIT-SAT?
- Quais são as 6 partes que formam a configuração de uma máquina no modelo de computação utilizado por Cormen para algoritmos de verificação? Quais destas partes mudam ao longo da execução do algoritmo? Quais não mudam?
- O circuito construido a partir de um algoritmo verificador A para uma linguagem L tem quantas cópias do circuito M que implementa a execução de 1 instrução da máquina do modelo? Qual o tamanho de M em função do tamanho n da entrada e da função T que é um limite superior de tempo para A?
Exercícios:
- Exercício 34.3-1 do Cormen.
- Discussão sobre o exercício 34.3-8 do Cormen.
Questões-guia
- O problema de resolver uma equação numérica de 1o. grau pode ser reduzido a resolver uma equação numérica de 2o. grau. A fórmula de solução para equações de 2o. grau pode ser usada para resolver equações de 1o. grau? Como?
- Defina o que significa L1 ≤P L2 para linguagens binárias L1 e L2.
- O que se pode dizer de L1 quando L1 ≤P L2 e L2 ∈ P?
- Defina o que significa dizer que uma linguagem é NP-completa. Como se define a classe NPC?
- O que se pode dizer se houver uma linguagem L tal que L ∈ NPC e L ∈ P?
- O que se pode dizer sobre NPC se P ≠ NP?
- Defina o que significa dizer que uma linguagem é NP-difícil.
- O que se pode dizer de L2 quando L1 ≤P L2 e L1 ∈ NPC?
Exercícios:
- Exercício 34.3-2 do Cormen.
- Exercício 34.3-3 do Cormen.
- Exercício 34.3-6 do Cormen.
Questões-guia:
- Em aulas anteriores, discutimos a classe NP em termos de algoritmos não determinísticos. Que abordagem segue o Cormen?
- Como se define a linguagem HAM-CYCLE? Em quanto tempo roda o algoritmo ingênuo de testar todos os possíveis ciclos?
- O que é um algoritmo verificador para uma linguagem?
- Como se define a classe NP?
- Como se define a classe co-NP? É igual à classe NP?
Exercícios:
- Exercício 34.2-1 do Cormen (fácil).
- Exercício 34.2-3 do Cormen.
- Exercício 34.2-8 do Cormen (fácil).
- Exercício 34.2-10 do Cormen (fácil).
- Exercício 34.2-11 do Cormen.
Questões-guia:
- Porque problemas que podem ser resolvidos em tempo polinomial são considerados "tratáveis"? Dê três motivos.
- O que é um problema abstrato?
- Para que servem codificações?
- Defina alguns conceitos básicos da teoria de linguagens formais: alfabeto, linguagem, string vazia, linguagem vazia, operações sobre linguagens (união, intersecção, complemento, concatenação).
- O que é o fecho de uma linguagem L, denotado por L*?
- O que significa dizer que uma string s é aceita por um algoritmo A? E o que é s ser rejeitada por A?
- O que significa dizer que uma linguagem L é aceita por um algoritmo A? E o que é L ser decidida por A?
- O que significa dizer que uma linguagem L é aceita (decidida) por um algoritmo A em tempo polinomial?
- Defina a classe P.
Exercícios:
- Exercício 34.1-1 do Cormen.
- Dê uma versão de decisão para o problema de achar uma árvore espalhada mínima num grafo não orientado ponderado.
- Mostre que se uma linguagem L está em P, então L* também está em P.