complexidade de algoritmos

30
Complexidade de Algoritmos Edson Prestes

Upload: others

Post on 21-Jul-2022

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Complexidade de Algoritmos

Complexidade de Algoritmos

Edson Prestes

Page 2: Complexidade de Algoritmos

Complexidade de Algoritmos

O limite superior de complexidade de um problema refere-se ao melhor algoritmo que o resolve.

– nlog2n é um limite superior para o problema de classificação.

Intratabilidade

O limite inferior de um problema refere-se a um resultado teórico que determina qual é a melhor complexidade possível que um algoritmo pode alcançar.

Quando a diferença entre esses limites desaparece, a complexidade mínima do problema é conhecida e o problema é chamado fechado.

Page 3: Complexidade de Algoritmos

Complexidade de Algoritmos

O problema de classificação por comparação é um problema com limite de complexidade determinada, nlogn.

Não existe algoritmo de classificação com complexidade por comparação melhor que nlogn.

Intratabilidade

Page 4: Complexidade de Algoritmos

Complexidade de AlgoritmosIntratabilidade

Considere três elementos a, b, c, que desejamos classificar.

A única informação disponível a respeito é uma relação de ordem (<) entre os elementos.

Page 5: Complexidade de Algoritmos

Complexidade de Algoritmos

Observe que a quantidade de folhas da árvore corresponde às n! permutações possíveis dos elementos a serem classificados

Intratabilidade

O número de comparações necessárias para classificar n elementos está associada à profundidade das folhas na árvore de decisão.

No pior caso, esta complexidade é

=

Page 6: Complexidade de Algoritmos

Complexidade de Algoritmos

Pela a aproximação de Stirling, sabemos que

Intratabilidade

Logo,

Portanto,

Mostre que a complexidade média é O(nlog2 n)

Page 7: Complexidade de Algoritmos

A classe P consiste nos problemas que podem ser resolvidos em tempo Polinomial (Problemas tratáveis)

A classe NP consiste nos problemas que podem ser verificados em tempo polinomial (Problemas Intratáveis).

Dada uma entrada, é possível verificar se ela corresponde a uma solução do problema: o conjunto de vértices <v1, v2, … , vn> corresponde a um ciclo hamiltoniano ? Isto pode ser feito em tempo polinomial.

Complexidade de AlgoritmosIntratabilidade

Sabemos que , mas não sabemos se P = NP ! (1 milhão de dolares!!!)

A classe NP-completo são problemas NP que possuem a característica de que se um deles puder ser resolvido em tempo polinomial então todo problema NP-Completo terá uma solução em tempo polinomial.

Page 8: Complexidade de Algoritmos

Complexidade de Algoritmos

Um aspecto interessante é que vários problemas NP-Completos são, a principio, semelhantes a problemas que têm algoritmos de tempo polinomial.

Circuito Euleriano x Ciclo Hamiltoniano

Satisfabilidade 2-CNF x Satisfabilidade 3-CNF–Forma normal k-conjuntiva, ou k-CNF : And de claúsulas Or de exatamente k variáveis

(¬x∨y)∧(¬y∨z)∧(x∨¬z)∧(z∨y) - 2-CNF

(¬x∨y ∨ ¬ z)∧(¬y∨ x∨ ¬ z)∧… ∧(x∨ z ∨y) - 3-CNF

Intratabilidade

Page 9: Complexidade de Algoritmos

Complexidade de Algoritmos

Problemas de Decisão x Problemas de otimização

Problemas de otimização : dentre as soluções viáveis, qual é a melhor ?Problemas de decisão : existe uma solução para um dado problema ?

É possível formular um problema de otimização como um problema de decisão impondo um limite sobre o valor a ser otimizado.

Isto nos beneficia quando queremos mostrar que um problema de otimização é difícil, pois o problema de decisão associado é mais fácil ou não mais difícil que o de otimização (limite inferior).

Intratabilidade

Page 10: Complexidade de Algoritmos

Complexidade de Algoritmos

Reduções

Permite determinar afinidades entre problemas computacionais.

Intratabilidade

Visitar cada cidade em um conjuntode cidades apenas uma única vez

Organizar pessoas ao redor de uma mesa redonda de acordo com

uma dada preferência

Page 11: Complexidade de Algoritmos

Complexidade de Algoritmos

Reduções

Considere dois problemas A e B.

A redução consiste em um procedimento que transforma qualquer instância α (entrada) de A em alguma instância β de B de forma que :

A transformação ocorre em tempo polinomialAs respostas são as mesmas tanto para A quanto para B. Isto é, a resposta para α é sim sse a resposta para β é sim

Intratabilidade

Page 12: Complexidade de Algoritmos

Complexidade de AlgoritmosIntratabilidade

A existência de uma redução polinomial de A para B indica que B é no mínimo tão dificil que A. Se B é eficientemente solúvel então A também será. Se A exige tempo exponencial então B também exige.

Page 13: Complexidade de Algoritmos

Complexidade de AlgoritmosIntratabilidade

A redução é expressa por A ≤P BObserve que B pode ser mais dificil que A.

f(A) pode ser a parte fácil de B.

Este processo pode ser chamado de

• mapeamento em tempo polinomial• redução Karp em tempo polinomial

Page 14: Complexidade de Algoritmos

Complexidade de Algoritmos

Em termos de linguagem, dizemos que uma linguagem L é C-Completa, onde C é uma classe de linguagens, se

1. L ∈ C2. Para qualquer linguagem A∈C,

Intratabilidade

Page 15: Complexidade de Algoritmos

Complexidade de Algoritmos

Em um problema de decisão o conjunto de soluções é igual a {0 (não) ,1 (sim) }, e a instância é igual a entrada que será processada.

Quando as instâncias de um problema são codificadas em cadeias binárias para serem executadas em um computador, este problema passa de um problema abstrato para um problema concreto.

Intratabilidade

Problemas Abstratos

Relaciona um conjunto I de instâncias e um conjunto S de soluções.

Page 16: Complexidade de Algoritmos

Complexidade de Algoritmos

Um algoritmo resolve um problema concreto no tempo O(T(n)) se ele é capaz de produzir uma resposta em um tempo máximo O(T(n)), onde n=| I | e I corresponde a uma instância do problema.Um problema pode ser resolvido em tempo polinomial se existe um algoritmo para resolvê-lo no tempo O(nk), k ∈ R.

Intratabilidade

Considere um inteiro k e um algoritmo cujo tempo de execução é O(k).

Se k é codificado em unário então o tempo de execução do algoritmo é O(n), n=|k|.

Se k é codificado em binário , , o tempo de execução do algoritmo é O(2n)

A codificação afeta o tempo de execução do algoritmo.

Page 17: Complexidade de Algoritmos

Complexidade de Algoritmos

Linguagem Formal

O conjunto de instâncias para qualquer problema de decisão Q pode ser visto como uma linguagem L definida sob o alfabeto

Intratabilidade

Um algoritmo A aceita uma cadeia se a saída de A(x) é 1.

Um algoritmo A rejeita uma cadeia se a saída de A(x) é 0.

Uma linguagem é decidida por um algoritmo A, se toda cadeia que pertença a L é aceita por A e toda cadeia que não pertença a L é rejeitada por A.

Page 18: Complexidade de Algoritmos

Complexidade de Algoritmos

Linguagem Formal

Uma linguagem L é decidida em tempo polinomial por um algoritmo A

se existe uma constante k tal que , para qualquer cadeia

A decide corretamente se em O(nk ), onde n=| x |.

A classe P = { | existe um algoritmo A que decide L em tempo polinomial}.

Intratabilidade

Page 19: Complexidade de Algoritmos

Complexidade de Algoritmos

Verificação de tempo polinomial

Considere o problema de encontrar um ciclo hamiltoniano em um grafo não orientado. Ele é definido através da seguinte linguagem

Ham-ciclo ={ <G> | G é um grafo hamiltoniano}

Intratabilidade

Um algoritmo para decidir a linguagem Ham-ciclo necessitaria listar todas as possíveis combinações de vértices de G, e depois verificar cada permutação para ver se ela corresponde a um caminho hamiltoniano.

Este processo demora O(n!).

Logo, este algoritmo não é executado em tempo polinomial.

Page 20: Complexidade de Algoritmos

Complexidade de Algoritmos

Verificação de tempo polinomial

É possível verificar em tempo polinomial se uma dada configuração de vértices é alguma permutação dos vértices de G e se ela forma um ciclo.

A partir dai, definimos um algoritmo A de verificação, como sendo um algoritmo de dois argumentos : uma cadeia de entrada x e uma cadeia binária y chamada certificado.

A linguagem verificada por A é

Intratabilidade

Page 21: Complexidade de Algoritmos

Complexidade de Algoritmos

A classe de complexidade NP

A classe NP (nondeterministic polynomial time) é a classe de linguagens que podem ser verificadas por um algoritmo em tempo polinomial.

Uma linguagem pertence a NP sse existe um algoritmo A que verifica L em tempo polinomial, ou seja,

L = { | existe um certificado y com | y | = O( | x |c) tal que A(x,y)=1}

Exemplo : O problema Ham-ciclo NP.

Intratabilidade

Page 22: Complexidade de Algoritmos

Complexidade de Algoritmos

A classe de complexidade NP

Note que se L P então L NPexiste um algoritmo de tempo polinomial para decidir L, o qual pode ser convertido em um algoritmo de verificação que ignora o certificado e aceita as cadeias fornecidas como entrada.

Logo P NP, mas não sabemos se P = NP !

Intratabilidade

Page 23: Complexidade de Algoritmos

Complexidade de Algoritmos

A classe de complexidade NP

Em 1971, Stephen Cook mostrou que todos os problemas da Classe NP podem ser reduzidos ao problema SAT.

Se SAT admitir um algoritmo polinomial, então qualquer problema em NP pode ser resolvido por este algoritmo. Assim, SAT é dito NP-Completo.

Em 1972, Richard Karp reduziu SAT a diversos outros problemas da Classe NP. Ele foi o autor da pergunta P = NP?

Intratabilidade

Page 24: Complexidade de Algoritmos

Complexidade de Algoritmos

Classe NP - Completo

Possui a propriedade de que se qualquer problema NP-completo for ser resolvido em tempo polinomial então todo problema NP terá uma solução em tempo polinomial e P=NP.

Para provar que um problema P NP é um problema NP-Completo, devemos reformular-lo em termos de um problema Q já conhecido como sendo NP-Completo.

Isto pode é feito através de redução.

Intratabilidade

Page 25: Complexidade de Algoritmos

Complexidade de Algoritmos

Classe NP - CompletoA linguagem L1 é redutivel em tempo polinomial a uma linguagem L2 se existe uma função f : {0,1}* {0,1}*, computável em tempo polinomial, tal que para todo x {0,1}* ,

x L1 se e somente se f(x) L2

A função f é chamada função de redução, e o algoritmo que calcula f é chamado algoritmo de redução.

Isto é representado por

Intratabilidade

Page 26: Complexidade de Algoritmos

Complexidade de Algoritmos

Classe NP - Completo

Intratabilidade

-Completo

Page 27: Complexidade de Algoritmos

Complexidade de Algoritmos

Classe NP - Completo

http://en.wikipedia.org/wiki/File:P_np_np-complete_np-hard.svg

Intratabilidade

Portanto, a classe NP-completo é uma subclasse da NP-difícil

Page 28: Complexidade de Algoritmos

Complexidade de Algoritmos

Classe NP - Completo

Se existe algum problema NP-Completo que pode ser decidido em tempo polinomial então para todo A ∈ NP, teremos A ∈ P.

Prova: Se A ∈ NP, então por definição de NP-completude, A ≤P B. Se B ∈ P, então A∈P.

Intratabilidade

Page 29: Complexidade de Algoritmos

Complexidade de Algoritmos

Problema da Satisfabilidade

Dada uma fórmula booleana f na forma normal conjuntiva (CNF), ela é satisfazível ? Ou seja, existe um conjunto de valores que quando associados às variáveis de f a tornam verdadeira ?

A CNF é uma conjuncão de m claúsulas Ci, onde cada claúsula é a disjunção de literais

Intratabilidade

x1=f , x2=v, x3=v

Não é Possível

Page 30: Complexidade de Algoritmos

Complexidade de Algoritmos

2 - Satisfabilidade

É uma versão do problema original com a diferença de que cada claúsula tem exatamente 2 literais.

Intratabilidade