Complexidade de Algoritmos
Complexidade de Algoritmos
• Algoritmos– Seqüência de passos conhecidos– Finitos
• Entrada Processamento Saída– Mesmo que “se confunda” no tempo
• Tem que ter uma saída– Problema da Parada
Algoritmos
• Algoritmos (definições)– Procedimento computacional que recebe uma
entrada e produz uma saída– Seqüência de passos que transformam entrada
em saída– Máquina de Turing que transforma uma entrada
M numa saída S
Complexidade
• Algoritmos podem ser mais ou menos eficientes– Ortogonal à computabilidade
• Podemos otimizar nossos códigos!– Busca Seqüencial X Busca Binária– Bubble Sort X Quick Sort
Tipos de Complexidade
• Algoritmos podem ser mais ou menos eficientes com respeito a– Tempo: quanto tempo será necessário para que
o algoritmo termine e dê a resposta?– Espaço: quanto de espaço será necessário para
que o algoritmo possa trabalhar e dar a resposta?
Exemplo
• Em bancos de dados:– Uma busca usando índice B+Tree– Mais rápida (mais eficiência no tempo)– Mais espaço (menos eficiência no espaço)
• Outros exemplos– Árvores X Ordenação– Ordenação em disco
Exemplo práticos
• Qual a complexidade temporal da busca seqüencial?
• E da busca binária?
• Qual a complexidade temporal do Bubble Sort?
• E do Merge Sort?
Notação O(n)
• Sejam duas funções g(n) e f(n)
• Diz-se que g(n) = O(f(n)) sse há algum C tal que g(n) = cf(n)
• Exemplo: 3n = O(n)– 4n2 -2n + 7 = O(n2)
– 176.439log10
(n)/3 = O(log(n))
Notação O(n)
• Porque O(n) é importante?– n2 e n2 + 18876547n geram valores diferentes– Mas padrões de crescimento iguais!– Para N muito grande (digamos
1.000.000.000.000)• n2 = 1x1024 e n2 + 18876547n =
1x1024+18876547x1012
• Quanto 18876547x1012 é significativo no final?
Padrões importantes
• Certos tipos de complexidade são importantes
• Caracterizam classes de problemas particulares
• Facílimos, Muito fáceis, Fáceis, Difíceis, Muito difíceis, etc. e os intratáveis!
Padrões importantes
• O(1) – tempo constante: facílimo
• O(log n) – logarítmica: muito fácil
• O(n) – linear: fácil
• O(n log n) – polinomial-logaritmico:fácil
• O(nm) – polinomial: difícil
• O(n!) – fatorial (exponencial): intratáveis!
• O(mn) – exponencial: intratáveis!
Gráfico ComparativoLogaritmicas
0
2
4
6
8
10
12
0 2 4 6 8 10 12
Tmanho da entrada
Te
mp
o
log(n) n*log(n)
Gráfico ComparativoPolinomiais
0
2000
4000
6000
8000
10000
12000
0 20 40 60 80 100 120Tamanho da Entrada
Te
mp
o
n*log(n) n^2
Gráfico ComparativoPolinomiais X Expoenciais
0
500
1000
1500
2000
2500
3000
3500
4000
4500
0 5 10 15Tamanho da Entrada
Te
mp
o
n^2 2^n
Gráfico ComparativoExponenciais
0
100
200
300
400
500
600
700
800
0 2 4 6 8Tamanho da Entrada
Te
mp
o
n! 2^n
Importância da complexidade
• O que são elementos de hardware e de software
• Um exemplo: ordenação– Computador A – Um bilhão de comparações
por segundo (1012)• Ordenação por inserção
– Computador B – Dez milhões de comparações por segundo (1010)
• Ordenação rápida (Quick Sort)
Importância da complexidade
• Complexidade dos algoritmos– Quick Sort: O(n log n)– Insertion Sort: O(n2)
• Ordenar 1 milhão de números (n=106)– Computador A: (106)2/1012 = 1seg– Computador B: 106xlog106/1010 = 6x10-9seg
• E se fosse para ordenar um trilhão de números (n=1015)?
Importância da complexidade
• Outro exemplo – determinante de matrizes
• Calcular o determinante de uma matriz quadrada de ordem n (MNxN)
• Método de Gauss: 4n3+9n2-7n)/6 = O(n3)
• Método de Crammer: (n+1)!(e-1) = O(n!)
Importância da complexidaden Crammer Gauss2345 2,35ms10 1,19min 4,95ms20 15225 séculos 38,63ms40 5,1033 séculos 0,315s
20 50102 159456 353
666
Classes de problemas
• Problemas polinomiais
• Problemas para os quais se conhece algoritmo polinomial para resolver
• O(nk) ou inferior
• Classe P
Classes de problemas• Problemas polinomiais não determinísticos
• Problemas para os quais não se conhece solução determinística senão exponencial
• O(kn) ou que o valha (O(n!), etc)
• Classe NP
• P NP (todo problema P admite solução exponencial!)
Problemas da classe NP
• O problema do caixeiro viajante (simplificado)
• Percorrer todas as cidades com mais de 200 mil habitantes do interior da Bahia andando o mínimo possível, começando em Ilhéus, sem passar duas vezes na mesma cidade!
• E se não se fixar a cidade de origem?
Como fica
• Cidades:– Feira de Santana– Vitória da Conquista– Itabuna– Ilhéus
• Possíveis trajetos?
• Distâncias?
Distâncias
Km FSA VCO ITA IOS
FSA - 400 360 390
VCO 400 - 240 270
ITA 360 240 - 30
IOS 390 270 30 -
Como escolher?• Gerar todos os trajetos possíveis e comparar
seus custos – Método Algoritmico• Dados
– C: Conjunto de cidades consideradas– R e Rmenor: Listas encadedadas de cidades
(rotas)– R.Tamanho(T): Retorna o tamanho da rota R
usando T– T: Tabela de distâncias entre as cidades
Como escolher?• Algoritmo
Inicio
C Todas as Cidades
R.Criar( ) /*Cria a rota R vazia */
MenorTamanho = GerarRotas (C, R, Rmenor, MenorTamanho)
Retorna Rmenor
Fim
Como escolher?Gerar_Rotas (C, R, Rmenor, MenorTamanho)
Se C então
Para cada cidade c C faça
R.Incluir(c)
C’ = C – {c}
Gerar_Rotas (C’, R, Rmenor, MenorTamanho)
R.Excluir(c)
Senão
Se R.Tamanho(T) < MenorTamanho então
Rmenor = R
MenorTamanho = R.Tamanho(T)
Fim_Gerar_Rotas
Como escolher?
• Gera todos os trajetos possíveis e comparar seus custos– IOS/FSA/VCO/ITB: 390+400+240 = 1030– IOS/FSA/ITB/VCO: 390+360+240 = 990– IOS/ITB/FSA/VCO: 30+360+400 = 790– IOS/VCO/ITB/FSA: 270+240+360 = 870 – IOS/VCO/FSA/ITB: 270+400+360 = 1030– IOS/ITB/VCO/FSA: 30+240+400 = 670
Performance!• Quantos trajetos? Quantas cidades?
– 3 cidades, 6 trajetos, (3!)
• Cidades maiores do que 1000 habitantes– 360 cidades, 3,98x10765 (360!) trajetos
• Um computador (jamais construído) que possa gerar 10500 trajetos por segundo: 1,26x10256 séculos!
Outros problemas da classe NP
• Gerenciamento de filas para uso de
CPU (escalonamento)• Gerenciamento de memória
(fragmentação)• Otimização de consultas em SGBDs• Localização de recursos em Sistemas
Distribuídos.
Como tratar problemas NP
• Heurísticas
• Técnicas de programação (meta-heurísticas)
• Abrir mão da “melhor” solução
• Garantir uma “boa” solução (possivelmente a melhor)
• Tempo de execução polinomial
Método Guloso
• Começa em algum ponto• Escolhe, na vizinhança, qual o ponto mais
“barato” a percorrer• Repete a escolha até que não haja mais
nenhum• Pode (ou não) resultar no melhor caso, em
problemas da classe P– Problema do troco
Método Guloso
• No exemplo: saindo de Ilhéus– Escolhe Itabuna (30Km)– Escolhe Vitória da Conquista (240Km)– Escolhe Feira de Santana (400)– Total: 670– Melhor escolha? Sempre?
Método Guloso
Método Guloso
Método Guloso
Método Guloso
Método Guloso
Método Guloso
Dividir para Conquistar
• Parte do princípio de que unir duas melhores soluções parciais resulta na melhor solução global
• N cidades• K grupos de N/K cidades• Resolve os K grupos• “Une” a solução• Pode (ou não) resultar no melhor caso, em
problemas da classe P– Torre de Hanoi, Ordenação
Dividir para conquistar• No exemplo: dois grupos ({Ilhéus, Itabuna}
e {Vit. Conquista, Feira de Santana})• Ilhéus – Itabuna (30Km)• Vit. Conquista – Feira de Santana (400Km)• “Unir”: Itabuna-Feira (390) ou Itabuna-
Conquista (240)• Total: 670• Melhor solução? Sempre?
Programação Dinâmica
• Quando uma seqüência de decisões locais não gera uma solução ótima
• Gerar todas as seqüências: exponencial
• Princípio: Se i, i1, i2, i3, ..., ik, j é a melhor solução entre i e j então i1, i2, ... ik é a melhor solução entre i1 e ik.
– Requer um conhecimento prévio (heurística)
Programação Dinâmica
• No exemplo: sabe-se que a melhor divisão em dois grupos é (Ilhéus, Itabuna e Vit. Conquista, Feira de Santana)
• Ilhéus – Itabuna (30Km)• Vit. Conquista – Feira de Santana (400Km)• “Unir”: Itabuna-Feira (390) ou Itabuna-Conquista
(240)• Total: 670• Melhor solução? Proporcional ao conhecimento
prévio (Background Knowledge)!
BackTracking
• Soluções restritas
• Gerar árvore de soluções até que– Uma resposta que satisfaça seja encontrada– Não se possa mais alcançar resposta satisfatória
• No segundo caso há um retorno e toma-se outro caminho
• O problema das 8 rainhas
BackTracking
• Soluções com custo inferior a 800– IOS/FSA/VCO/ITB: 390+400+240 = 1030– IOS/FSA/ITB/VCO: 390+360+240 = 990– IOS/ITB/FSA/VCO: 30+360+400 = 790– Solução ok!– Total: 790– Encontra a primeira solução “satisfatória”, se
houver.
NP-Completos
• Intratabilidade
• Problemas intratáveis– Indecidibilidade (Problema da Parada, Fermat,
etc)– Problemas decidíveis mas não polinomiais– Problemas decidíveis e “aparentemente” não
polinomiais
NP-Completos
• Objetivo: encontrar problemas “equivalentes” em complexidade
• Dicas sobre como resolvê-los (ou não resolvê-los)
• Redução: mapeamento entre dois problemas
• 1 “engloba” 2 1 é pelo menos tão difícil quanto 2
Exemplo de redução• 1: Caixeiro viajante• 2: Desfragmentar memória• Escolher Arquivo = Escolher Trecho• Possibilidades de organização dos arquivos
= Possíveis rotas• Melhor conjunto de rotas X Seqüência
(desfragmentada) de arquivos• 2 engloba 1• Se houver solução polinomial para o
caixeiro viajante...
Definições
• P: classe de problemas resolvíveis em tempo polinomial num computador determinístico
• NP: classe de problemas resolvíveis em tempo polinomial em um computador não determinístico (NP: Non-deterministic Polinomial)
Mais resultados
• NP é “polinomialmente verificável”, i.e. há algoritmos polinomiais para verificar uma solução de problemas em NP
• Sabe-se que P NP (mais precisamente P NP) – Mas não se sabe se P=NP ou se PNP– Acredita-se que PNP
P e NP
PNP
Problemas Intratáveis
• A suposição de que PNP nos leva a questionar:
Quem são os problemas do conjunto NP – P?
• Problemas intratáveis!
Teorema de Cook
• Se 1 2 (1 é redutível a 2 em tempo polinomial) e 2 P então 1 P
• Satisfatibility: Problema que Cook mostrou que todos os problemas em NP podem ser reduzidos a ele em tempo polinomial
• Há outros problemas com essa mesma característica: os NP-Completos
Propriedades dos NP-Completos
• Se 1 NPC e 2 NPC então 1 e 2 são mutuamente redutíveis em tempo polinomial
• Se algum problema em NP for mostrado intratável, todos os problemas NPC também o serão, e o mesmo se dá no caso da tratabilidade
• Ou seja: seja um problema NPC tem-se que,
P P NP• Mas não se provou nada até hoje
Mundo NP (suposto)
PNP
NPC
Para que tudo isso?
• Respondamos à seguinte questão:
• Os problemas NP-Completos são intratáveis?
• Há centenas de problemas NP-Completos conhecidos
• Se é NP-Completo– Ou usa-se uma heurística
– Ou espera-se uma revolução em Ciência da Computação
Para que servem os NP-Completos?
• Como provar que um problema é NP-Completo?– Mostra que NP
– Seleciona algum problema NPC ’– Constrói uma transformação de em ’– Mostra que é polinomial
• Problemas intratáveis podem ser úteis?
Complexidade de Algoritmos.
FIM!
“De vez em quando tropeçamos na verdade, mas normalmente levantamos e seguimos em frente!”
Lei de Murphy aplicada ao ser humanoEscher