Introdução à Análise de Complexidade de Algoritmos

Propaganda
Introdução a Análise de
Complexidade de Algoritmos
Prof. Alexandre Parra
[email protected]
Roteiro

Introdução à Análise de Complexidade de
Algoritmos
Roteiro

Introdução à Análise de Complexidade
de Algoritmos
Considerações sobre Análise de Complexidade



O programador deve estar ciente
aspectos que influenciam a eficiência.
dos
vários
Objetivo: fazer uma opção “mais correta” quanto
ao método de pesquisa e/ou ordenação a utilizar em
um determinado cenário.
Aspectos mais relevantes:



O tempo que será gasto pelo programador para codificar
determinado programa.
O tempo necessário para executar o programa.
Espaço de memória necessário para executar o programa.
Aspecto: Codificação

Se o algoritmo de pesquisa ou ordenação for
executado poucas vezes e existirem tempo e
espaço na máquina suficientes para executá-lo



Não desperdiçar dias programando melhores métodos.
Ressalva: O tempo de programação nunca deve ser
uma desculpa válida para usar um algoritmo
inadequado.
Programador precisa conhecer os vários métodos de
pesquisa e ordenação para uma escolha bem
sucedida.
Aspectos: Tempo e Espaço




Na maioria dos programas, o programador deverá otimizar
freqüentemente um desses aspectos à custa do outro.
Interessado na variação do tempo imposta pela mudança no
tamanho do repositório de dados.
A eficiência de tempo é calculada pelo número de operações
críticas efetuadas.
Operações críticas: (1) comparação entre chaves, (2) troca
de dois registros, (3) ou movimentação de ponteiros para
registros.
Tempo de Execução de Algoritmos (1/2)


Em alguns casos pode-se calcular exatamente o
tempo de execução de um algoritmo.
Para repositório de dados volumosos, constantes
multiplicativas e termos de mais baixa ordem
podem ser desconsiderados.

Exemplo: 0.01n2 + 10n = O(n2), onde n é o
número de registros no arquivo a ser ordenado.
Tempo de Execução de Algoritmos (2/2)
0.01n2 + 10n = O(n2)
n
a = 0.01n2
b = 10n
Cálculo a+b
Cálculo (a+b)/n2
Cálculo (a+b)/10n
10
1
100
101
1,0100
1,01
50
25
500
525
0,2100
1,05
100
100
1.000
1.100
0,1100
1,10
500
2.500
5.000
7.500
0,0300
1,50
1.000
10.000
10.000
20.000
0,0200
2,00
5.000
250.000
50.000
300.000
0,0120
6,00
10.000
1.000.000
100.000
1.100.000
0,0110
11,00
50.000
25.000.000
500.000
25.500.000
0,0102
51,00
100.000
100.000.000
1.000.000
101.000.000
0,0101
101,00
500.000
2.500.000.000
5.000.000
2.505.000.000
0,0100
501,00
1.000.000
10.000.000.000
10.000.000
10.010.000.000
0,0100
1001,00
Métodos de cálculo de complexidade (1/2)

Formal (conceito de Ordem)



Através deste conceito poderemos comparar
vários métodos de pesquisa e ordenação quanto a
eficiência.
Métodos de pesquisa têm exigências de tempo
que variam de O(log2 n) a O(n).
Métodos de ordenação têm exigências de tempo
que variam de O(nlog2 n) a O(n2).
Métodos de cálculo de complexidade (2/2)

Empírico



Um segundo método é executar um programa de
pesquisa e ordenação e avaliar sua eficiência
(quer por unidade de tempo absoluto ou pelo
nº de operações executadas).
É necessário fazer o teste em vários exemplos de
arquivo.
Mesmo havendo uma estatística, a aplicação da
pesquisa ou ordenação num arquivo específico
pode não apresentar resultados que sigam o
padrão.
Download