Professional Documents
Culture Documents
Utilizarei a linguagem
PORTHON
Mistura de
Português com Python
Introdução
Preocupação com o tempo de execução do
algoritmo
Dois métodos:
Empírico (relacionado ao tempo de execução)
Analítico (através de expressões matemáticas)
Vantagens
Analítico independe de computador
Empírico é fácil de analisar
Função de Complexidade
Tempo
Registra a quantidade de tempo necessário
para executar um algoritmo para resolver um
determinado problema. (nosso foco)
Espaço
Neste caso, mede-se a quantidade de
memória necessária para executar um dado
algoritmo.
Método Analítico
Considerações:
Dados suficientemente grandes.
Comportamento assintótico
Não são consideradas constantes aditivas ou
multiplicativas na expressão matemática
obtida.
Objetivo: Obter estruturas simples.
Método Analítico
A execução é dividida em passos
Cada passo contém operações consideradas
constantes
Importância
Facilidade na comparação de tempos de
algoritmos diferentes com mesmo objetivo.
Determinação de limite assintótico para
determinados algoritmos.
Exemplo
Algoritmo que faz a soma de matrizes
for i in range(0,n): c1 n
for j in range(0,n): c2 n
c[i][j]=a[i][j]+b[i][j] 1
Análise de custo: 1 + c1 * c2 * 1
=1+n*n
= n2
Exemplo 2
Algoritmo que faz o produto de matrizes
for i in range(0,n) c1 n
for j in range(0,n): c2 n
c[i][j]=0 1
for k in range(0,n): c3 n
c[i][j]=c[i][j] + a[i][j] * b[i][j] 1
Análise de custo: c1 * c2 * c3
=n*n*n
= n3
Análise do pior caso
Imagine um algoritmo que execute em tempo
n, onde n é o tamanho da entrada, a maioria
de suas entradas, mas para um determinado
tipo de n, o algoritmo é n10. Qual o custo do
algoritmo?
Resposta: n10
Por quê?
Algoritmo2: n5
Comportamento Assintótico
O comportamento assintótico de f(n)
representa o limite do custo quando n cresce.
|g(n)| ≤ c.|f(n)|
Comportamento assintótico
Graficamente temos:
f, g
c . f(n)
g(n)
n
m
Comportamento Assintótico
Exemplo: Seja g(n) = n e f(n) = -n2, com n
pertencente a Z+.
Por definição, temos:
|g(n)| ≤ c.|f(n)|
| n | ≤ c . |- n2 |
n ≤ c . n2
Note que, fazendo c=1 e m=1, f(n) domina
assintoticamente g(n).
Comportamento Assintótico
Graficamente temos:
f, g |f(n)| = c . n2, com c=1
g(n) = n
n
m=1
Notação O
Definição:
Sejam f, h funções positivas de variável
inteiras.
Diz-se que f é O(h), escrevendo-se f = O(h),
quando existir uma constante c > 0 e um valor
inteiro n0, tal que:
n > n0 => f(n) ≤ c . h(n)
Classes de Comportamento Assintótico
Algoritmos Exponenciais
Quando o tamanho de n é grande, tornam-se
bastante ineficientes na prática;
São geralmente simples variações de pesquisa
exaustiva;
Problemas solucionados apenas por tais
algoritmos são considerados intratáveis, isto é,
não existe solução por algoritmo polinomial.
Classes de Comportamento Assintótico
Algoritmos Polinomiais
Quando o tamanho de n é grande, tornam-se
muito úteis na prática;
São geralmente obtidos através de um
entendimento mais profundo da estrutura do
problema;
Apresentam boa solução, isto é, um problema é
considerado bem resolvido quando existe um
algoritmo polinomial para resolvê-lo.
Comparação entre Funções de
Complexidade
Segundo Garey e Johnson (1979, pág. 7), temos:
Função
de n=10 n=20 n=30 n=40 n=50 n=60
Custo
n 10-5 s 2.10-5 s 3.10-5 s 4.10-5 s 5.10-5 s 6.10-5 s