Você está na página 1de 36

Ordem de Crescimento &

Somatórios
ÉFREN L. SOUZA

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 1


Computadores & Problemas
Nós usamos os computadores para resolver
problemas difíceis ou processar grandes quantidades
de dados
Inevitavelmente essas tarefas nos levarão a questões
como: Quanto tempo demora meu programa?
Por que meu programa extrapola os
limites de memória?
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 2
Análise de Algoritmos
A análise de algoritmos vem para responder tais
questões “Analisar um algoritmo significa prever os
recursos que o algoritmo necessita.”
[Cormen, 2012]
“A análise de algoritmos é importante na
programação de computadores porque
geralmente há vários algoritmos disponíveis
para uma aplicação específica e gostaríamos
de saber qual é o melhor.” [Knuth, 1973]
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 3
Como Responder essas Questões?

Através de Avaliações Experimentais

Através de Modelos Matemáticos

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 4


Análise por Avaliação Experimental
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 5
Quanto tempo int threeSum( int[] a ) {

demora esse int N = a.length;

programa? int cnt = 0;


for (int i = 0; i < N; i++)
 Esse algoritmo conta a for (int j = i+1; j < N; j++)
quantidade de triplas que
somam 0 em um vetor de for (int k = j+1; k < N; k++)
𝑁 inteiros if (a[i]+a[j]+a[k] == 0)
 Esse programa pode ser cnt++;
executado em um tempo
razoável? return cnt;
 Qual a relação do tempo }
de execução com o
tamanho da entrada? EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 6
Diferentes
Cenários
 O tamanho do problema
é quem caracteriza a
dificuldade da tarefa
computacional
 O tempo de execução
aumenta com o tamanho
da entrada

 Variamos o tamanho da
entrada de 1K, 2K, 4K e 8K
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 7
Resultado
 Esse resultado vai ser
diferente em
computadores
diferentes
 Essa diferença se dá
por um fator
constante
 Qual a relação do
tempo de execução
com o tamanho da
entrada?! EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 8
Limitações da Análise Experimental
Necessidade de se implementar e executar o algoritmo

Experimentos podem ser feitos apenas em um número


limitado de cenários

Para comparar dois ou mais algoritmos é necessário


executar os experimentos:
Na mesma máquina
Usando a mesma linguagem de programação
E o mesmo ambiente de execução
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 9
Análise por Modelo Matemático
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 10
Fatores Determinantes na Análise
Na abordagem experimental há inúmeros fatores que
interferem no tempo de execução que são difíceis de tratar

Dessa forma, D.E Knuth mostrou que é possível construir


um modelo matemático para descrever o tempo de
execução de um programa

O tempo de execução de um programa depende de :


O custo de executar cada comando
A frequência com que cada comando é executado
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 11
Frequência int threeSum( int[] a ) {

de Execução int N = a.length;


int cnt = 0;
 Consistem em determinar for (int i = 0; i < N; i++)
quantas vezes cada - Executa apenas uma vez
comando é executado for (int j = i+1; j < N; j++)
- Sua frequência de execução não
 Alguns comandos são for (intdakentrada
depende = j+1; k < N; k++)
fáceis de analisar, pois são if (a[i]+a[j]+a[k] == 0)
executados um número
constante de vezes cnt++;
 Outros precisam de mais return cnt; 3 2
𝑁 𝑛 𝑛
raciocínio, pois a 3 2
− + vezes
} - Executa de 0- aExecuta
𝑁 𝑛 𝑛
− 6+ vezes2 3
frequência com que são 6 2 3
- Sua frequência depende do tamanho da
executados dependem da - Sua frequência depende do tamanho da
entrada entrada
entrada e dos dados da entrada 12
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC
𝑁 3 𝑛2 𝑛 𝑁 𝑁 − 1 𝑁 − 2
− + =
6 2 3 6
𝑞𝑢𝑎𝑛𝑑𝑜 𝑁 = 1000 temos

Aproximações 𝑁3
≅ 166.666.667 −
𝑁2 𝑁
+ = 499.667
6 2 3

 Esse tipo de análise


pode levar a longas
expressões matemáticas
 Apenas o termo de mais
alta ordem prevalece
 Os outros termos
podem ser
desconsiderados,
simplificando a fórmula

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 13


Ordem de
Crescimento

 Além de ignorar os
termos de mais baixa
ordem, também
podemos ignorar os
fatores constantes
 Assim obtemos a
ordem de
crescimento
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 14
Grandes Constantes
Com as aproximações, nós ignoramos coeficientes
constantes dos termos de mais baixa ordem que podem ser
importantes
Por exemplo, quando aproximamos a função 2𝑁 2 + 𝑐𝑁
para 2𝑁 2 , estamos assumindo que 𝑐 é pequeno
Mas supondo que 𝑐 é 106 ou 1015 essa aproximação pode
levar a uma interpretação errada
Dessa forma, temos que ficar abertos à possibilidade de
grandes constantes em cenários práticos
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 15
Análise
 Cada linha é executada
com uma determinada
frequência
 A ideia principal que é
somente as instruções
executadas com mais
frequência são
determinantes
 Essas instruções ficam
localizadas no laço mais
interno do programa
(inner loop) EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 16
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 17
Classificação das Ordens de Crescimento
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 18
Principais
Ordens de
Crescimento
 Frequentemente, a
ordem de
crescimento de um
algoritmo é uma de
algumas funções

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 19


Constante [1]
Um programa cujo tempo de execução da ordem de
crescimento é constante executa um número fixo de
operações para terminar seu trabalho

Consequentemente seu tempo de funcionamento


não depende do tamanho da entrada

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 20


Logarítmico [log 𝑏 𝑁]
Um pouco mais lento que um programa de tempo
constante

Um exemplo clássico é a busca binária (binary-search)

A base do logaritmo não é relevante


Todos os logaritmos com uma base constante estão relacionados
por um fator constante
Por isso é comum usar log 𝑁

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 21


Linear [𝑁]
Algoritmo que faz uma operação para cada elemento
da entrada (busca linear)
Programas dessa ordem geralmente são compostos
por um único laço de repetição
O tempo de execução é proporcional a 𝑁

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 22


Linearítmico [𝑁 log 𝑏 𝑁]
Descreve programas cuja ordem de crescimento é
𝑁 log 𝑏 𝑁
Aqui a base do logaritmo também é irrelevante
Exemplos clássicos dessa ordem de crescimento são
os algoritmos de ordenação Quick-Sort e Merge-Sort

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 23


2 3 4
Polinomial [𝑁 , 𝑁 , 𝑁 , ...]
A ordem de crescimento polinomial tem 𝑁 como base e
uma constante 𝑒 como expoente, tendo a forma 𝑁 𝑏
A ordem de crescimento 𝑁 2 é chamada quadrática
Representa algoritmos com dois laços aninhados
Exemplos clássicos são o Insertion-Sort e o Selection-Sort
A ordem de crescimento 𝑁 3 é chamada cúbica
Representa algoritmos com três laços aninhados
Exemplos comuns são ThreeSum e Matrix-Multiplication

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 24


𝑛
Exponencial [𝑏 ]
O termo exponencial é usado para algoritmos cuja ordem
de crescimento é 𝑏 𝑛
Para qualquer constante 𝑏 > 1
Os diferentes valores de 𝑛 levam a diferentes tempos de execução
Algoritmos exponenciais são extremamente lentos
Nunca terminam de executar para um problema grande
Mesmo assim são importantes na computação, pois existe uma
grande classe de problemas para os quais parece que um
algoritmo exponencial é a única escolha possível
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 25
Gráfico das
Principais
Ordens de
Crescimento

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 26


Somatório
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 27
Ferramentas Matemáticas
Quando analisamos algoritmos precisamos de
ferramentas matemáticas
Quando um algoritmo possui repetição,
expressamos o seu tempo de execução como a soma
dos tempos cada execução do laço
Isso pode ser feito avaliando somatórios

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 28


Somatório
Dada uma sequência de números 𝑎1 , 𝑎2 , … , 𝑎𝑛 ,
podemos escrever a soma finita 𝑎1 + 𝑎2 + ⋯ + 𝑎𝑛 ,
onde 𝑛 é um inteiro não negativo, como

𝑎𝑘
𝑘=1

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 29


Fórmulas Comuns
Para qualquer número real 𝑐 temos que
𝑛

𝑐 = 𝑐𝑛
𝑛 𝑘=1

𝑐 = 𝑐(𝑛 − 𝑚 + 1)
𝑘=𝑚 𝑛

𝑛 = 𝑛2
𝑘=1

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 30


Linearidade
Para qualquer número real 𝑐 e quaisquer sequências finitas
𝑎1 , 𝑎2 , … , 𝑎𝑛 e 𝑏1 , 𝑏2 , … 𝑏𝑛 temos
𝑛 𝑛

𝑐𝑎𝑘 = 𝑐 𝑎𝑘
𝑘=1 𝑘=1

𝑛 𝑛 𝑛

(𝑎𝑘 ± 𝑏𝑘 ) = 𝑎𝑘 ± 𝑏𝑘
𝑘=1 𝑘=1 𝑘=1

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 31


Série Aritmética
O somatório
𝑛

𝑘 = 1 + 2 + ⋯+ 𝑛
𝑘=1
é uma série aritmética e tem o valor
𝑛
𝑛 𝑛+1
𝑘=
2
𝑘=1

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 32


Soma dos Quadrados e Cubos
Temos os seguintes somatórios de quadrados e cubos

𝑛
𝑛 𝑛 + 1 2𝑛 + 1
2
𝑘 =
6
𝑘=0

𝑛 2 2
3
𝑛 𝑛+1
𝑘 =
4
𝑘=0
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 33
Série Geométrica
Para números reais 𝑥 ≠ 1, o somatório
𝑛

𝑥𝑘 = 1 + 𝑥 + 𝑥2 + ⋯ + 𝑥𝑛
𝑘=0

é uma série geométrica ou exponencial e tem o valor


𝑛 𝑛+1
𝑥 − 1
𝑥𝑘 =
𝑥−1
𝑘=0
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 34
void bubbleSort( int a[] ) {
𝑐1 for( int i=a.length-1; i>0; i-- )
Do laço para 𝑐2 for( int j=0; j<i; j++ )
o somatório 𝑐3
𝑐4
if ( a[j] > a[j+1] )
swap(a, j, j+1);
}

 Qual comando
determina o tempo 𝑛−1 𝑖−1 𝑛−1 𝑛−1

de execução desse 𝑆3 = 𝑐3 = 𝑐3 (𝑖 − 1 − 0 + 1) = 𝑐3 𝑖
𝑖=1 𝑗=0 𝑖=1 𝑖=1
algoritmo? 𝑛−1
𝑛(𝑛 + 1) 𝑛2 + 𝑛
= 𝑐3 𝑖 = 𝑐3 − 𝑛 = 𝑐3 −𝑛
 Quantas vezes ele é 𝑖=1
2 2
executado? 𝑛2 −𝑛
= 𝑐3
2
 Qual a sua ordem de
crescimento?
EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 35
Bibliografia
Sedgewick, R.; Wayne, K. Algorithms. 4th Edition.
Pearson, 2011.
Cormen, T.H.; Rivest, R.L.; Leiserson, C.E.; Stein, C.
Algoritmos: Teoria e Prática. Campus, 3a Edição, 2012.
Ascencio, A.F.G.; Araújo, G.S. Estruturas de Dados:
Algoritmos, Análise da Complexidade e
Implementações em JAVA e C/C++. Pearson, 2011.

EFREN L. SOUZA / PROJETO E ANÁLISE DE ALGORITMOS / UFOPA – IEG – PC 36

Você também pode gostar