Você está na página 1de 27

Meta-heurísticas em

Otimização Combinatória
Tema 2 Parte 1
Introdução informal à
Complexidade de Algoritmos

Profª Laura Bahiense


(laura@po.coppe.ufrj.br)
Introdução informal
à complexidade de algoritmos

Meta-heurísticas em Tema 2 Parte 2: Introdução à


2/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Escopo – complexidade de algoritmos
Problema

Instância

Tamanho de uma Instância

Algoritmo

Consumo de Tempo de um Algoritmo

Consumo de Tempo Assintótico

Notações Ο, Ω e Θ

Algoritmos polinomiais e exponenciais

Complexidades de Melhor e Pior Caso

Complexidade de um Algoritmo
Meta-heurísticas em Tema 2 Parte 2: Introdução à
3/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Problemas
Um problema pode ser definido com uma questão geral que deve ser
respondida

Ou, mais formalmente, pode ser definido por:


 Uma descrição geral de todos os seus parâmetros
 Um enunciado sobre que propriedades a resposta ou solução deve satisfazer

Em geral, um problema possui vários parâmetros associados. Exemplos:


 Coloração: Dado um grafo G (V,E ) com n vértices e m arestas e um número
natural k, encontrar uma coloração própria de G utilizando k cores ou constatar
que tal coloração não existe
 Quadrado perfeito: Dado um número natural n, encontrar um número natural x
tal que x2=n ou constatar que tal x não existe
 Ciclo Hamiltoniano: Dado um grafo G (V,E ) com n vértices e m arestas, encontrar
um ciclo hamiltoniano ou constatar que tal ciclo não existe
 Clique: Dado um grafo G (V,E ) com n vértices e m arestas e um número natural k,
encontrar uma clique de G com k vértices ou constatar que tal clique não existe

Meta-heurísticas em Tema 2 Parte 2: Introdução à


4/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Instância de um problema
Uma instância de um problema é obtida quando se determinam valores
específicos para os seus parâmetros.

Exemplo: Dado o grafo G(V,E) abaixo, contendo 7 vértices e 9 arestas, ele


possui uma coloração própria utilizando no máximo 3 cores?

Meta-heurísticas em Tema 2 Parte 2: Introdução à


5/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Tamanho de uma instância
O tamanho de uma instância de um problema é a quantidade de dados
necessária para descrever (totalmente) a instância, ou seja, o espaço necessário
para descrever a instância

Em geral, o tamanho de uma instância é descrito por um único número


natural, mas às vezes, é mais conveniente usar um par, ou até mesmo um
terno, de números naturais
 Exemplo: o tamanho de uma instância do problema de coloração é o par
(n,m), onde n é o número de vértices e m é o número de arestas do grafo
G(V,E)

A instância anterior (abaixo) possui tamanho (7,9):

Meta-heurísticas em Tema 2 Parte 2: Introdução à


6/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Algoritmos para a resolução de problemas
Um algoritmo é uma seqüência finita de instruções bem definidas e não
ambíguas

Dizemos que um algoritmo resolve um problema quando, ao receber a


descrição de qualquer instância do problema, devolve uma solução para a
instância (que, nesse caso, é dita positiva) ou informa que a instância não tem
solução (neste caso ela é dita negativa)

instância Solução positiva

Meta-heurísticas em Tema 2 Parte 2: Introdução à


7/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Consumo de tempo de um algoritmo
Para cada instância do problema, o algoritmo consome uma quantidade de
tempo diferente

Suponha que o algoritmo consuma T(I) unidades de tempo para processar a


instância I. A relação entre T(I) e o tamanho de I nos dá uma medida da
eficiência do algoritmo

Em geral, medimos o consumo de tempo de um algoritmo pelo número de


operações elementares que ele executa ao processar uma instância

Exemplos de operações elementares: soma, subtração, multiplicação, divisão,


comparação entre dois números inteiros, atribuição de valor a uma variável

Não é necessário contar todas as operações elementares, apenas as mais


relevantes

Meta-heurísticas em Tema 2 Parte 2: Introdução à


8/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Consumo de tempo de um algoritmo:
ilustração
Função de Avaliação do Tempo:

n T(n)

Tamanho Tempo de
da entrada execução

Um algoritmo opera a partir de uma entrada,


para produzir uma saída,
dentro de um tempo que se deseja avaliar.

Meta-heurísticas em Tema 2 Parte 2: Introdução à


9/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Consumo de tempo de um algoritmo:
conceitos de melhor caso e pior caso
Em geral, um problema tem muitas instâncias diferentes de um mesmo
tamanho. Isto exige a introdução dos conceitos de “pior caso” e “melhor caso”

Dado um algoritmo A para o problema e um número natural n,


seja T*(n) o máximo de T(I) para todas as instâncias I de tamanho n do
problema. Então:
T* mede o consumo de tempo de A no pior caso

Analogamente, seja T*(n) o mínimo de T(I) para todas as instância I de


tamanho n do problema. Então:
T* mede o consumo de tempo de A no melhor caso

Meta-heurísticas em Tema 2 Parte 2: Introdução à


10/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Consumo de tempo assintótico
Seja A um algoritmo para um certo problema P. Em termos de minutos,
segundos ou horas, a quantidade de tempo que A consome para processar
uma dada instância I de P depende:
 da máquina usada para executar A
 da linguagem de programação utilizada
 dos detalhes de implementação

Para exprimir o consumo de tempo do algoritmo de uma maneira


independente desses fatores, é preciso introduzir um modo “grosseiro” de
comparar as funções matemáticas que exprimem a dependência entre o
consumo de tempo de um algoritmo e o tamanho de sua entrada (instância)
Essa comparação grosseira só leva em conta a “velocidade de crescimento”
das funções, portanto ela despreza:
 fatores multiplicativos: a função 2n2, p.ex., cresce tão rápido quanto 10n2
 valores pequenos do argumento: a função n2 cresce mais rápido que 100n,
embora n2seja menor que 100n quando n é pequeno

Essa maneira de comparar funções é chamada de assintótica. Há três tipos de


comparação assintótica: “≤” , “≥” , “=” .
Meta-heurísticas em Tema 2 Parte 2: Introdução à
11/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Notação Ο (“≤”)

Meta-heurísticas em Tema 2 Parte 2: Introdução à


12/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Notação Ο (“≤”):
exemplos

Meta-heurísticas em Tema 2 Parte 2: Introdução à


13/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Notação Ω (“≥”)

T(n) ≥ ƒ(n), para todo n ≥ n0

Meta-heurísticas em Tema 2 Parte 2: Introdução à


14/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Notação Θ (“=”)

ƒ(n) ≤ T(n) ≤ k ƒ(n) , para todo n ≥ n0

Retornando ao consumo de tempo de um algoritmo...

Meta-heurísticas em Tema 2 Parte 2: Introdução à


15/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Consumo de tempo assintótico de um algoritmo:
melhor caso e pior caso
Seja A um algoritmo para um problema cujas instâncias possuem tamanho n.
Se a função que mede o consumo de tempo de A no pior caso está em Ο(n2),
podemos dizer que:
A consome Ο(n2) unidades de tempo no pior caso
ou
A consome tempo Ο(n2) no pior caso

Analogamente, se a função que mede o consumo de tempo de A no melhor


caso está em Ω(n2), podemos dizer que:
A consome Ω(n2) unidades de tempo no melhor caso
ou
A consome tempo Ω(n2) no melhor caso

Meta-heurísticas em Tema 2 Parte 2: Introdução à


16/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Algoritmos logarítmicos
Um algoritmo A é dito logarítmico quando ele consome tempo Θ(log n)
no pior caso

Típico de algoritmos que empregam a técnica de dividir para conquistar

Exemplo: busca binária

Algoritmos logarítmicos são considerados extremamente rápidos

Meta-heurísticas em Tema 2 Parte 2: Introdução à


17/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Algoritmos lineares
Um algoritmo A é dito linear quando ele consome tempo Θ(n) no pior caso

Em outras palavras:
 Quando o tamanho da entrada dobra, o algoritmo consome o dobro do
tempo
 Quando o tamanho da entrada é multiplicado por uma constante k, o
consumo de tempo do algoritmo também é multiplicado por k

Exemplo: busca sequencial

Algoritmos lineares são considerados muito rápidos

Meta-heurísticas em Tema 2 Parte 2: Introdução à


18/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Algoritmos “n lg n”
Um algoritmo A é dito “n lg n” quando ele consome tempo Θ(n lg n) no pior
caso

Em outras palavras:
 Quando o tamanho da entrada dobra, o consumo dobra e é acrescido de
2n
 Quando o tamanho da entrada é multiplicado por uma constante k, o
consumo de tempo do algoritmo é multiplicado por k e acrescido de um
pouco mais que k n

Exemplo: ordenação (eficiente)

Algoritmos n lg n são considerados rápidos

Meta-heurísticas em Tema 2 Parte 2: Introdução à


19/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Algoritmos quadráticos
Um algoritmo A é dito quadrático quando ele consome tempo Θ(n2) no pior
caso

Em outras palavras:
 Quando o tamanho da entrada dobra, o algoritmo consome o quádruplo
do tempo
 Quando o tamanho da entrada é multiplicado por uma constante k, o
consumo de tempo do algoritmo é multiplicado por k2

Exemplo: percorrer uma matriz

Algoritmos quadráticos ainda são considerados “rápidos”

Meta-heurísticas em Tema 2 Parte 2: Introdução à


20/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Algoritmos polinomiais
Um algoritmo A é dito polinomial quando ele consome tempo Θ(nk) no pior
caso, onde k é um número natural

Exemplos:
 Ο(n), Ο(n lg n), Ο(n2), Ο(n100)

Não-exemplos:
 Ω(2n), Ω(10n)

Algoritmos polinomiais são considerados “razoáveis” (quando k não é muito


grande...)

Meta-heurísticas em Tema 2 Parte 2: Introdução à


21/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Algoritmos exponenciais
Um algoritmo A é dito exponencial quando ele consome tempo Θ(an) no pior
caso, onde a é um número real maior do que 1

Interpretação:
 Quando o tamanho da entrada (n) dobra, o consumo de tempo do
algoritmo é elevado ao quadrado
 Quando o tamanho da entrada (n) é multiplicado por 10, o consumo de
tempo do algoritmo é elevado à décima potência

Exemplo: busca exaustiva (enumeração explícita)

Algoritmos exponenciais não são polinomiais e não são rápidos!

Meta-heurísticas em Tema 2 Parte 2: Introdução à


22/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Algoritmos fatoriais
Um algoritmo A é dito fatorial quando ele consome tempo Θ(n!) no pior caso

Pior do que os algoritmos exponenciais:


 5! = 120
 10! = 3.628.800

 20! = 2.432.902.008.176.640.000

Exemplo: enumeração (explícita) das rotas do caixeiro viajante

Algoritmos fatoriais não são polinomiais e não são rápidos!

Meta-heurísticas em Tema 2 Parte 2: Introdução à


23/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Algoritmos polinomiais e exponenciais:
resumo

Meta-heurísticas em Tema 2 Parte 2: Introdução à


24/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Complexidades de melhor e de pior caso
A complexidade de melhor caso de um algoritmo A é o valor mínimo dentre
todas as complexidades assintóticas de A, para entradas suficientemente
grandes

Em outras palavras: é um limite inferior do número de passos para a


computação de uma entrada (instância) mais desfavorável

A complexidade de pior caso de um algoritmo A é o valor máximo dentre


todas as complexidades assintóticas de A, para entradas suficientemente
grandes

Em outras palavras: é um limite superior do número de passos para a


computação de uma entrada (instância) mais desfavorável

Obs.: o pior caso pode corresponder a um número de passos muito maior do


que os casos mais freqüentes (exemplo: algoritmo Simplex)

Meta-heurísticas em Tema 2 Parte 2: Introdução à


25/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
A complexidade de um algoritmo
A complexidade de um algoritmo é definida, informalmente, como um limite
superior do número de passos necessários para a computação de uma entrada
(instância) mais desfavorável

Portanto, estamos nos referindo ao consumo de tempo no pior caso, ou seja,


ao consumo de tempo para as instâncias mais difíceis do problema

A complexidade de algoritmos foi abordada até aqui de maneira bastante


informal. Um estudo mais técnico e aprofundado é objeto de um curso
específico sobre Complexidade de Algoritmos e foge ao escopo deste curso

Meta-heurísticas em Tema 2 Parte 2: Introdução à


26/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória
Sugestões de leitura
1. Computers and Intractability: A Guide to the Theory of NP-Completeness.
Garey, Michael R. & Johnson, David S. (1979). Freeman

2. Introduction to Algorithms. Cormen, Thomas H., Leiserson, Charles E.,


Rivest, Ronald L. & Stein, Clifford. 3rd Ed. (2009). MIT
(http://www.realtechsupport.org/UB/SR/algorithms/Cormen_Algorithms_3rd
.pdf)

3. The Design and Analysis of Algorithms. Aho, A., Hopcroft, J. &Ullman, J.


(1974). Addison-Wesley

4. Algoritmos e Heurísticas. Ruy E. Campello e Nelson Maculan. (1994 ) EDUFF

Meta-heurísticas em Tema 2 Parte 2: Introdução à


27/27 Complexidade de Algoritmos
Profª Laura Bahiense Otimização Combinatória