23
Complexidade computacional Prof.: Edson Holanda [email protected]

Complexidade computacional Prof.: Edson Holanda [email protected]

Embed Size (px)

Citation preview

Page 1: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Complexidade computacional

Prof.: Edson Holanda

[email protected]

Page 2: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Importância

A análise da complexidade de um algoritmo é essencial para prever como será o comportamento do algoritmo, sem que haja a necessidade de implementá-lo em um computador específico.

Page 3: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Importância

Infelizmente é praticamente impossível se prever exatamente o comportamento de um algoritmo.

Somente as características essenciais dos algoritmos são analisadas e muitos detalhes de implementação são ignorados.

Page 4: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Importância

Portanto essa análise é uma aproximação e não é exata.

Nesse estudo os valores constantes são ignorados e analisamos o comportamento do algoritmo quando o tamanho da entrada tendo ao infinito.

Page 5: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Instâncias de problemas

O conceito de instância de um problema corresponde ao de "entrada" de um algoritmo. 

A distinção entre um problema e suas instâncias é análogo à distinção entre uma função e os seus valores.

Um algoritmo para um problema deve ser capaz de resolver qualquer instância do problema.

Page 6: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Tamanho de uma instância O tamanho de uma instância de um

problema é comprimento da cadeia de caracteres que defina a instância ou pela quantidades de valores da instância.

O tamanho de uma instância será denotado por N.

Page 7: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Problemas de decisão Podemos nos restringir, sem perder muita

generalidade, a problemas de decisão, ou seja, problemas cujas instâncias têm solução SIM ou NÃO.  Diremos que uma instância é positiva se tem solução SIM e negativa em caso contrário.

Exemplo (raiz de polinômio): "Existe um inteiro x tal que ax² + bx + c = 0?"

Page 8: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Complexidade de um problema A complexidade de um problema é o

consumo de tempo de um algoritmo ‘ótimo’ para o problema. O consumo é medido em função do tamanho N da instância.

Não se trata necessariamente do melhor algoritmo conhecido para o problema, pois um algoritmo ótimo pode não ter sido descoberto ainda!

Page 9: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

A notação O

Definição: Dizemos que uma função g(x) é O(f(x)) para outra função f(x), se existem constantes c e n, tais que para todo N n, temos que

g(N) cf(N)

Page 10: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Complexidade de Máquinas de Turing

Uma máquina de Turing M é dita de complexidade (de tempo) T(N), se sempre que M recebe uma entrada w de comprimento N, M pára depois de efetuar no máximo T(N) movimentos, aceitanto ou rejeitando.

Page 11: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Problemas polinomiais (Tratáveis)

Um problema é polinomial se existe uma Máquina de Turing M (algortimo) que resolva o problema, com complexidade de O(Nk)  para algum k,  onde N é o tamanho da instância.

Page 12: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Problemas polinomiais (Tratáveis)

Ou seja, um problema é polinomial se sua complexidade é  O(Nk)  para algum k,  onde N é o tamanho da instância.

Page 13: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Problemas não-polinomiais Um problema é não-polinomial se

não existe k tal que a complexidade do problema é  O(Nk),  onde N é o tamanho da instância. 

Page 14: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Classe P de problemas A classe P de problemas é o conjunto de

todos os problemas polinomiais, ou seja, o conjunto de problemas que têm complexidade O(Nk) para algum k.

Para muitos problemas não sabemos (ainda) se ele está ou não em P, pois ainda não descobrimos um algoritmo polinomial nem conseguimos demonstrar que um tal algoritmo não existe.

Page 15: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Classe P de problemas

A classe P de problemas é o conjunto de todos os problemas polinomiais, ou seja, o conjunto de problemas que têm complexidade O(Nk) para algum k.

Page 16: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Verificação de soluções Um algoritmo verificador para um problema

de decisão é um algoritmo polinomial que: recebe uma instância supostamente positiva

do problema e uma cadeia de caractecteres que serve como "certificado" do caráter positivo da instância e

anuncia se o certificado apresentado constitui, de fato, uma prova de que a instância é positiva.

Page 17: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Verificação de soluções Exemplo de problema: Dados números inteiros a, b, c e d, decidir se

existe um número inteiro x tal que ax³ + bx² + cx + d = 0

Certificado: número inteiro x.Algoritmo verificador: basta fazer oito operações aritméticas para verificar se é verdade que ax³ + bx² + cx + d = 0.

Page 18: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Classe NP de problemas A classe NP de problemas é o conjunto de

todos os problemas de decisão que admitem um algoritmo verificador. 

Ou seja, um problema está em NP se toda instância positiva do problema admite um certificado que seja aceito por um algoritmo verificador.

Page 19: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Importante!

É claro que P faz parte de NP

Page 20: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Classe coNP de problemas O complemento de um problema de

decisão X tem solução NÃO se e somente se o problema X tem solução SIM.

A classe coNP de problemas é o conjunto de todos os problemas de decisão cujo complemento está em NP  (ou seja, cujo complemento admite um algoritmo verificador).

Page 21: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

A questão "P = NP?" É claro que P é parte de NP.  A maioria

dos especialistas acredita que que P é parte própria de NP, ou seja, que P ≠ NP. 

A maioria dos especialistas acredita que há problemas em NP que não podem ser resolvidos por um algoritmo polinomial.  Mas ninguém conseguiu ainda provar essa conjectura.

Page 22: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Problemas NP-completos Um problemas A é NP-completo  se A

está em NP e qualquer outro problema em NP pode ser polinomialmente reduzido a A. 

Ou seja, A é NP-completo se, para qualquer B em NP, um algoritmo polinomial para A pode ser adaptado para resolver B em tempo polinomial.

Page 23: Complexidade computacional Prof.: Edson Holanda edsonholanda@gmail.com

Fonte:

http://www.ime.usp.br/~pf/mac5711-2000/