limites da computação

39
 Limites da Computação Algoritmos P, NP e NP-Completos Disciplina de Análise de Algoritmos Wagner Al-Alam Sistemas de Informação - Faculdade Lourenço Filho

Upload: mirton-brito

Post on 30-Oct-2015

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 1/39

 

Limites da ComputaçãoAlgoritmos P, NP e NP-Completos

Disciplina de Análise de Algoritmos

Wagner Al-Alam

Sistemas de Informação - Faculdade Lourenço Filho

Page 2: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 2/39

2

Introdução

Problemas intratáveis ou difíceis são comuns na natureza e nasáreas do conhecimento.

Problemas “fáceis”:

- resolvidos por algoritmos polinomiais.

Problemas “difíceis”:

- somente possuem algoritmos exponenciais para resolvê-los.

 A complexidade de tempo da maioria dos problemas é polinomial

ou exponencial.

Page 3: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 3/39

3

Função Polinomial

Quando a função de complexidade é O(p(n)), onde p(n) é umpolinômio.

- Exemplos:

- algoritmos com pesquisa binária (O(log n))- pesquisa sequencial - O(n)

- ordenação por inserção - O(n2)

- multiplicação de matrizes - O(n3).

Page 4: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 4/394

Função Exponencial

Quando a função de complexidade é O(c n), com c > 1.

- Exemplos:

- problema do caixeiro-viajante (PCV) - O(n!).

- Mesmo problemas de tamanho pequeno a moderado não podem ser resolvidos por algoritmos não-polinomiais.

Page 5: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 5/395

Comparativo de Funções

Page 6: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 6/396

Classe NP - Problemas “Sim/Não”

Para o estudo teórico da complexidade de algoritmos considera-seproblemas de decisão cujo resultado da computação seja “sim” ou“não”.

Versão do Problema do Caixeiro-Viajante (PCV) cujo resultado é dotipo “sim/não”:

- Dados: uma constante k, um conjunto de cidades C = {c1 , c2 , · · · , cn } euma distância d(ci , c j ) para cada par de cidades c i , c j C.∈

- Questão: Existe um “roteiro” para todas as cidades em C cujo comprimentototal seja menor ou igual a k?

Característica da classe NP: problemas “sim/não” para os quais umadada solução pode ser verificada facilmente.

 A solução pode ser muito difícil ou impossível de ser obtida, mas umavez conhecida ela pode ser verificada em tempo polinomial.

Page 7: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 7/39

7

Caminho em um Grafo

Considere um grafo com peso nas arestas, dois vértices i, j e um inteirok > 0.

Fácil: Existe um caminho de i até j com peso ≤ k?.

- Há um algoritmo eficiente com complexidade de tempo O(A log V ), sendo

 A o número de arestas e V o número de vértices (algoritmo de Dijkstra). Difícil: Existe um caminho de i até j com peso ≥ k?

- Não existe algoritmo eficiente. É equivalente ao PCV em termos decomplexidade.

Page 8: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 8/39

8

HC - The Hamilton Circuit (=Cycle)

O Circuito Hamiltoniano:

- Dado um grafo orientado, determine se há um ciclo que visite cada nóexatamente uma vez, terminando no nó inicial.

Page 9: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 9/39

9

Problema da Mochila Booleana:

- Uma mochila tem capacidade M;

- num cofre, há n itens, cada um com seu peso (p i) e seu valor (vi);

- Escolha que itens levar na mochila, de modo que o total de peso seja

menor ou igual a M, e o total dos valores seja máximo.

Mochila Booleana

Page 10: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 10/39

10

Boolean Satisfiability Problem (SAT)

Satisfatibilidade de expressão booleana:

- Dada uma expressão proposicional na forma normal conjuntiva, determine sehá algum conjunto de atribuições “true” e “false” aos símbolos proposicionais,que torne “true” o valor da expressão.

Foi o primeiro problema NP-Completo proposto por Stephen Cook em1971.

Page 11: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 11/39

11

Algoritmos Determinísticos

São algoritmos onde o resultado de cada operação é definido de formaúnica e apresentam comportamento previsível. Dada uma determinadaentrada, o algoritmo apresenta sempre a mesma saída.

Só podem estar em um estado por vez, onde entende-se por um

estado, o que a máquina está fazendo em um determinado tempo. Em um arcabouço teórico, é possível remover a restrição de

comportamento previsível.

 Apesar de parecer irreal, este é um conceito importante e geralmenteutilizado para definir a classe NP.

Neste caso, os algoritmos podem conter operações cujo resultado nãoé definido de forma única.

Page 12: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 12/39

12

Algoritmos Não-Determinísticos

 Algoritmo não-determinista: capaz de escolher uma dentre as váriasalternativas possíveis a cada passo.

 Algoritmos não-deterministas contêm operações cujo resultado não é

unicamente definido, ainda que limitado a um conjunto especificado depossibilidades.

F ã lh (C)

Page 13: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 13/39

13

Função escolhe(C)

 Algoritmos não-deterministas utilizam uma função escolhe(C), queescolhe um dos elementos do conjunto C de forma arbitrária.

O comando de atribuição X ← escolhe (1:n) pode resultar na atribuiçãoa X de qualquer dos inteiros no intervalo [1, n].

 A complexidade de tempo para cada chamada da função escolhe éO(1).

Neste caso, não existe nenhuma regra especificando como a escolha érealizada.

Se um conjunto de possibilidades levam a uma resposta, este conjuntoé escolhido sempre e o algoritmo terminará com sucesso.

Em contrapartida, um algoritmo não-determinista termina sem sucessose e somente se não há um conjunto de escolhas que indique sucesso.

Al it Nã D t i í ti

Page 14: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 14/39

14

Algoritmos Não-Determinísticos

 Algoritmo não-determinista: capaz de escolher uma dentre as váriasalternativas possíveis a cada passo.

 Algoritmos não-deterministas contêm operações cujo resultado não é

unicamente definido, ainda que limitado a um conjunto especificado depossibilidades.

C d S I

Page 15: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 15/39

15

Comandos Sucesso e Insucesso

 Algoritmos não-deterministas utilizam também dois comandos, a saber:- insucesso: indica término sem sucesso.

- sucesso: indica término com sucesso.

Os comandos insucesso e sucesso são usados para definir uma

execução do algoritmo. Esses comandos são equivalentes a um comando de parada de um

algoritmo determinista.

Os comandos insucesso e sucesso também têm complexidade de

tempo O(1).

Máq ina Não Determinística

Page 16: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 16/39

16

Máquina Não-Determinística

Uma máquina capaz de executar a função escolhe admite acapacidade de computação não-determinista.

Uma máquina não-determinista é capaz de produzir cópias de si

mesma quando diante de duas ou mais alternativas, e continuar acomputação independentemente para cada alternativa.

 A máquina não-determinista que acabamos de definir não existe naprática, mas ainda assim fornece fortes evidências de que certosproblemas não podem ser resolvidos por algoritmos deterministas em

tempo polinomial, conforme mostrado na definição da classe NP-completo à frente.

Passo 0

Page 17: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 17/39

17

Passo 0

Passo 1

Page 18: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 18/39

18

Passo 1

Passo 2

Page 19: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 19/39

19

Passo 2

Passo 3

Page 20: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 20/39

20

Passo 3

Solução Encontrada e a Computação Para

Page 21: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 21/39

21

Solução Encontrada e a Computação Para

Máquina Não-Determinística

Page 22: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 22/39

22

Máquina Não-Determinística

Em outras palavras:- Problema inicial com resolução em 2n passos em máquina

determinística (pior caso)

- Em máquina não determinística leva tempo n.

Intrigante:- Será que existe algum problema que apenas uma máquina

não-determinística resolva?- Não. Uma máquina não-determinística calcula apenas maisrápido, pois é equivalente a máquinas determinísticas.

Pesquisa Não-Determinística

Page 23: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 23/39

23

Pesquisa Não Determinística

Pesquisar o elemento x em um conjunto de elementos A[1 : n], n ≥ 1.

void pesquisaND ( x , A, 1 , n){

j ← escolhe (A, 1 , n);

if (A[ j ] == x )sucesso;

else

insucesso ;

} Determina um índice j tal que A[j] = x para um término com sucesso ou então insucesso

quando x não está presente em A.

O algoritmo tem complexidade não-determinista O(1).

Para um algoritmo determinista a complexidade é O(n).

Caracterização das Classes P e NP

Page 24: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 24/39

24

Caracterização das Classes P e NP

P: conjunto de todos os problemas que podem ser resolvidos por algoritmos deterministas em tempo polinomial.

NP: conjunto de todos os problemas que podem ser resolvidos por 

algoritmos não-deterministas em tempo polinomial. Para mostrar que um determinado problema está em NP, basta

apresentar um algoritmo não-determinista que execute em tempopolinomial para resolver o problema.

Outra maneira é encontrar um algoritmo determinista polinomial para

verificar que uma dada solução é válida.

Existe Diferença entre P e NP?

Page 25: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 25/39

25

Existe Diferença entre P e NP?

P NP, pois algoritmos deterministas são um caso especial dos não-deterministas.⊆

-  A questão é se P = NP ou P ≠ NP.

- Esse é o problema não resolvido mais famoso que existe na área de ciência da computação.

- Se existem algoritmos polinomiais deterministas para todos os problemas em NP, então P = NP.

- Em contrapartida, a prova de que P ≠ NP parece exigir técnicas ainda desconhecidas.

Descrição tentativa do mundo NP:

 Acredita-se que NP >> P, pois para muitos problemas em NP, não existem algoritmos polinomiaisconhecidos, nem um limite inferior não-polinomial provado.

NP P ou NP = P?⊃

Page 26: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 26/39

26

Consequências?

Muitos problemas práticos em NP podem ou não pertencer a P (nãoconhecemos nenhum algoritmo determinista eficiente para eles).

Se conseguirmos provar que um problema não pertence a P, então

temos um indício de que esse problema pertence a NP e que esseproblema é tão difícil de ser resolvido quanto outros problemas NP.

Como não existe tal prova, sempre há esperança de que alguémdescubra um algoritmo eficiente.

Quase ninguém acredita que NP = P.

Existe um esforço considerável para provar o contrário, mas a questãocontinua em aberto!

Problemas NP-Completo

Page 27: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 27/39

27

p

 A teoria de complexidade a ser apresentada não mostra como obter algoritmos polinomiais para problemas que demandam algoritmosexponenciais, nem afirma que não existem.

É possível mostrar que os problemas para os quais não há algoritmopolinomial conhecido são computacionalmente relacionados.- Formam a classe conhecida como NP.

Propriedade: um problema da classe NP poderá ser resolvido emtempo polinomial se e somente se todos os outros problemas em NP

também puderem. Este fato é um indício forte de que dificilmente alguém será capaz de

encontrar um algoritmo eficiente para um problema da classe NP.- É difícil mas não se sabe se é impossível, alguém quer tentar?

Problemas NP-Completo

Page 28: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 28/39

28

p

Problemas que pertencem a NP, mas que podem ou não pertencer a P.Propriedade: se qualquer problema NP-completo puder ser resolvido em

tempo polinomial por uma máquina determinista, então todos osproblemas da classe podem, isto é, P = NP.

 A falha coletiva de todos os pesquisadores para encontrar algoritmoseficientes para estes problemas pode ser vista como uma dificuldade paraprovar que P = NP.

Contribuição prática da teoria:

- fornece um mecanismo que permite descobrir se um novo problema é“fácil” ou “difícil”.

Se encontrarmos um algoritmo eficiente para o problema, então não hádificuldade. Senão, uma prova de que o problema é NP-completo nos dizque o problema é tão “difícil” quanto todos os outros problemas “difíceis”da classe NP-completo.

Problemas NP-Difícil

Page 29: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 29/39

29

 Além da classe NP-Completo, existe a classe NP-Difícil.

Para mostrar que um problema é NP-Difícil, basta satisfazer ascondições:

- Ser possível mostrar que pelo menos um problema NP-Completo pode ser reduzido diretamente ao problema estudado.

- Mostre que o problema não está em NP:

- Mostrando que não existe nenhum algoritmo para ele;

TODO PROBLEMA NP-COMPLETO É TAMBÉM NP-DIFÍCIL.

Resumo:

Page 30: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 30/39

30

P: Problemas solucionáveis em tempo polinomial, ou seja, podemossolucionar o problema em tempo polinomial no tamanho da entradado problema.

NP: problemas verificáveis em tempo polinomial, ou seja, dada umasolução proposta, podemos verificar que esta é uma solução para oproblema em tempo polinomial do tamanho da entrada e do tamanhoda solução proposta.

NP-Difícil: um problema onde, se existir um algoritmo em tempo

polinomial para solucionar o problema, então poderemos converter cada problema em NP neste problema de modo a solucionar cadaproblema em NP em tempo polinomial.

NP-Completo: um problema que é NP-Difícil e também é NP.

Problemas Exponenciais

Page 31: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 31/39

31

É desejável resolver instâncias grandes de problemas de otimização emtempo razoável.

Os melhores algoritmos para problemas NP-completo têmcomportamento de pior caso exponencial no tamanho da entrada.

Para um algoritmo que execute em tempo proporcional a 2N

, não égarantido obter resposta para todos os problemas de tamanho N ≥ 100.

Independente da velocidade do computador, ninguém poderia esperar por um algoritmo que leva 2100 passos para terminar sua tarefa.

Um supercomputador poderia resolver um problema de tamanho N = 50

em 1 hora, ou N = 51 em 2 horas, ou N = 59 em um ano. Mesmo um computador paralelo contendo um milhão de processadores,

(sendo cada processador um milhão de vezes mais rápido que o melhor processador que possa existir) não seria suficiente para chegar a N =100.

O Que Fazer para Resolver Problemas

Page 32: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 32/39

32

Exponenciais?

Usar algoritmos exponenciais “eficientes” aplicando técnicas detentativa e erro.

Usar algoritmos aproximados. Acham uma resposta que pode não

ser a solução ótima, mas é garantido ser próxima dela.Concentrar no caso médio. Buscar algoritmos melhores que outros

neste quesito e que funcionem bem para as entradas de dados queocorrem usualmente na prática.

- Existem poucos algoritmos exponenciais que são muito úteis na prática.

- Exemplo: Simplex (programação linear).

Complexidade de tempo exponencial no pior caso, mas muito rápido na prática.

- Tais exemplos são raros. A grande maioria dos algoritmos exponenciais conhecidos nãoé muito útil.

Problemas Exponenciais

Page 33: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 33/39

33

É desejável resolver instâncias grandes de problemas de otimizaçãoem tempo razoável.

Os melhores algoritmos para problemas NP-completo têmcomportamento de pior caso exponencial no tamanho da entrada.

Para um algoritmo que execute em tempo proporcional a 2N , não égarantido obter resposta para todos os problemas de tamanho N ≥ 100.

Independente da velocidade do computador, ninguém poderia esperar por um algoritmo que leva 2100 passos para terminar sua tarefa.

Um supercomputador poderia resolver um problema de tamanho N =

50 em 1 hora, ou N = 51 em 2 horas, ou N = 59 em um ano. Mesmo um computador paralelo contendo um milhão de

processadores, (sendo cada processador um milhão de vezes maisrápido que o melhor processador que possa existir) não seria suficientepara chegar a N = 100.

Técnicas de trabalhar com algoritmos NP-Completos

Page 34: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 34/39

34

 Algumas dessas técnicas:

-  Algoritmos de aproximação(solução pode ser ou não ótima)

- Comprometem a “optamibilidade”.

-  Algoritmos que tratam problemas NPC em tempo polinomial na média.- Comprometem a “eficiência”.

-  Algoritmos que funcionam para casos especiais da entrada.

- Comprometem a “completude”.

-  Algoritmos exponenciais que trabalham bem para pequenas entradas(FORÇA BRUTA).

Heurísticas para ProblemasNP C l t

Page 35: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 35/39

35

NP-Completo

Heurística: algoritmo que pode produzir um bom resultado (ou atéa solução ótima), mas pode também não obter solução ou obter uma distante da ótima.

Uma heurística pode ser determinista ou probabilística.

Pode haver instâncias em que uma heurística (probabilística ounão) nunca vai encontrar uma solução.

 A principal diferença entre uma heurística probabilística e umalgoritmo Monte Carlo é que o algoritmo Monte Carlo tem queencontrar uma solução correta com uma certa probabilidade (depreferência alta) para qualquer instância do problema.

Heurística para o PCV

Page 36: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 36/39

36

 Algoritmo do vizinho mais próximo, heurística gulosa simples:1. Inicie com um vértice arbitrário.

2. Procure o vértice mais próximo do último vértice adicionado que nãoesteja no caminho e adicione ao caminho a aresta que liga essesdois vértices.

3. Quando todos os vértices estiverem no caminho, adicione umaaresta conectando o vértice inicial e o último vértice adicionado.

Complexidade: O(n2 ), sendo n o número de cidades, ou O(d),sendo d o conjunto de distâncias entre cidades.

 Aspecto negativo: embora todas as arestas escolhidas sejamlocalmente mínimas, a aresta final pode ser bastante longa.

Heurística para o PCV

Page 37: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 37/39

37

Caminho ótimo para esta instância: 0 1 2 5 3 4 0 (comprimento 58).

Para a heurística do vizinho mais próximo, se iniciarmos pelo vértice 0,

o vértice mais próximo é o 1 com distância 3. A partir do 1, o mais próximo é o 2, a partir do 2 o mais próximo é o 4,

a partir do 4 o mais próximo é o 3, a partir do 3 restam o 5 e o 0.

O comprimento do caminho 0 1 2 4 3 5 0 é 60.

Heurística para o PCV

Page 38: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 38/39

38

Embora o algoritmo do vizinho mais próximo não encontre a soluçãoótima, a obtida está bem próxima do ótimo.

Entretanto, é possível encontrar instâncias em que a solução obtidapode ser muito ruim.

Pode mesmo ser arbitrariamente ruim, uma vez que a aresta final podeser muito longa.

É possível achar um algoritmo que garanta encontrar uma solução queseja razoavelmente boa no pior caso, desde que a classe de instânciasconsideradas seja restrita.

Algoritmos Aproximados paraProblemas NP Completo

Page 39: Limites da Computação

7/15/2019 Limites da Computação

http://slidepdf.com/reader/full/limites-da-computacao 39/39

39

Problemas NP-Completo

Para projetar algoritmos polinomiais para “resolver” um problema deotimização NP-completo é necessário “relaxar” o significado deresolver.

Removemos a exigência de que o algoritmo tenha sempre de obter asolução ótima.

Procuramos algoritmos eficientes que não garantem obter a soluçãoótima, mas sempre obtêm uma próxima da ótima.

Tal solução, com valor próximo da ótima, é chamada de soluçãoaproximada.

Um algoritmo aproximado para um problema Π é um algoritmo quegera soluções aproximadas para Π.

Para ser útil, é importante obter um limite para a razão entre a soluçãoótima e a produzida pelo algoritmo aproximado.