(ACH2002) Introdução à Análise de Algoritmos - Aula 05
1. Aula 05 – Custo de um Algoritmo e
Complexidade
Norton Trevisan Roman
norton@usp.br
28 de agosto de 2018
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 1 / 34
2. Projeto de Algoritmos
Analisar um algoritmo significa prever os recursos de
que ele vai precisar
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 2 / 34
3. Projeto de Algoritmos
Analisar um algoritmo significa prever os recursos de
que ele vai precisar
No tempo: quanto tempo vai demorar para encontrar a
solu¸c˜ao do problema
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 2 / 34
4. Projeto de Algoritmos
Analisar um algoritmo significa prever os recursos de
que ele vai precisar
No tempo: quanto tempo vai demorar para encontrar a
solu¸c˜ao do problema
No espa¸co: quanto de mem´oria ser´a necess´ario para
encontrar a solu¸c˜ao
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 2 / 34
5. Projeto de Algoritmos
Analisar um algoritmo significa prever os recursos de
que ele vai precisar
No tempo: quanto tempo vai demorar para encontrar a
solu¸c˜ao do problema
No espa¸co: quanto de mem´oria ser´a necess´ario para
encontrar a solu¸c˜ao
Projetar algoritmos implica analisar o seu
comportamento conforme essas vari´aveis
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 2 / 34
6. Projeto de Algoritmos
Analisar um algoritmo significa prever os recursos de
que ele vai precisar
No tempo: quanto tempo vai demorar para encontrar a
solu¸c˜ao do problema
No espa¸co: quanto de mem´oria ser´a necess´ario para
encontrar a solu¸c˜ao
Projetar algoritmos implica analisar o seu
comportamento conforme essas vari´aveis
O estudo da eficiˆencia de algoritmos (seja no tempo
ou no espa¸co), ´e chamado an´alise de algoritmos
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 2 / 34
7. An´alise de Algoritmos
Temos dois problemas distintos:
An´alise de um algoritmo particular
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 3 / 34
8. An´alise de Algoritmos
Temos dois problemas distintos:
An´alise de um algoritmo particular
Qual ´e o custo de usar um dado algoritmo para resolver um
problema espec´ıfico?
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 3 / 34
9. An´alise de Algoritmos
Temos dois problemas distintos:
An´alise de um algoritmo particular
Qual ´e o custo de usar um dado algoritmo para resolver um
problema espec´ıfico?
Respondido com base numa an´alise do n´umero de vezes que
cada parte desse algoritmo vai ser executada
Ou seja, do n´umero de opera¸c˜oes executadas
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 3 / 34
10. An´alise de Algoritmos
Temos dois problemas distintos:
An´alise de um algoritmo particular
Qual ´e o custo de usar um dado algoritmo para resolver um
problema espec´ıfico?
Respondido com base numa an´alise do n´umero de vezes que
cada parte desse algoritmo vai ser executada
Ou seja, do n´umero de opera¸c˜oes executadas
Seguida do estudo de quanto de mem´oria ser´a necess´aria
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 3 / 34
11. An´alise de Algoritmos
Temos dois problemas distintos:
An´alise de uma classe de algoritmos
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 4 / 34
12. An´alise de Algoritmos
Temos dois problemas distintos:
An´alise de uma classe de algoritmos
Qual ´e o algoritmo de menor custo poss´ıvel para resolver um
problema espec´ıfico?
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 4 / 34
13. An´alise de Algoritmos
Temos dois problemas distintos:
An´alise de uma classe de algoritmos
Qual ´e o algoritmo de menor custo poss´ıvel para resolver um
problema espec´ıfico?
Isto implica investigar toda uma fam´ılia de algoritmos
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 4 / 34
14. An´alise de Algoritmos
Temos dois problemas distintos:
An´alise de uma classe de algoritmos
Qual ´e o algoritmo de menor custo poss´ıvel para resolver um
problema espec´ıfico?
Isto implica investigar toda uma fam´ılia de algoritmos
Buscamos identificar um que seja o melhor poss´ıvel
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 4 / 34
15. An´alise de Algoritmos
Temos dois problemas distintos:
An´alise de uma classe de algoritmos
Qual ´e o algoritmo de menor custo poss´ıvel para resolver um
problema espec´ıfico?
Isto implica investigar toda uma fam´ılia de algoritmos
Buscamos identificar um que seja o melhor poss´ıvel
Ao encontr´a-lo, seu custo ser´a uma medida da dificuldade inerente
para resolver problemas da mesma classe.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 4 / 34
16. An´alise de Algoritmos
Temos dois problemas distintos:
Isso tamb´em significa colocar limites para a complexidade
dos algoritmos:
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 5 / 34
17. An´alise de Algoritmos
Temos dois problemas distintos:
Isso tamb´em significa colocar limites para a complexidade
dos algoritmos:
Exemplo: podemos estimar o n´umero m´ınimo de compara¸c˜oes
necess´arias para ordenar n n´umeros por meio de compara¸c˜oes
sucessivas
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 5 / 34
18. An´alise de Algoritmos
Temos dois problemas distintos:
Isso tamb´em significa colocar limites para a complexidade
dos algoritmos:
Exemplo: podemos estimar o n´umero m´ınimo de compara¸c˜oes
necess´arias para ordenar n n´umeros por meio de compara¸c˜oes
sucessivas
Logo, nenhum algoritmo vai fazer melhor que isto ⇒ menor custo
poss´ıvel
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 5 / 34
19. An´alise de Algoritmos
Temos dois problemas distintos:
Isso tamb´em significa colocar limites para a complexidade
dos algoritmos:
Exemplo: podemos estimar o n´umero m´ınimo de compara¸c˜oes
necess´arias para ordenar n n´umeros por meio de compara¸c˜oes
sucessivas
Logo, nenhum algoritmo vai fazer melhor que isto ⇒ menor custo
poss´ıvel
Menor custo poss´ıvel ⇒ medida de dificuldade.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 5 / 34
20. An´alise de Algoritmos
Temos dois problemas distintos:
Isso tamb´em significa colocar limites para a complexidade
dos algoritmos:
Exemplo: podemos estimar o n´umero m´ınimo de compara¸c˜oes
necess´arias para ordenar n n´umeros por meio de compara¸c˜oes
sucessivas
Logo, nenhum algoritmo vai fazer melhor que isto ⇒ menor custo
poss´ıvel
Menor custo poss´ıvel ⇒ medida de dificuldade.
Se o custo do algoritmo A for o menor custo poss´ıvel, ent˜ao
A ´e ´otimo.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 5 / 34
21. Complexidade
Como medir o custo de um algoritmo? Como
comparar o custo de v´arios algoritmos que resolvem
um problema?
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 6 / 34
22. Complexidade
Como medir o custo de um algoritmo? Como
comparar o custo de v´arios algoritmos que resolvem
um problema?
Medi¸c˜ao direta do tempo de execu¸c˜ao em um computador
real
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 6 / 34
23. Complexidade
Como medir o custo de um algoritmo? Como
comparar o custo de v´arios algoritmos que resolvem
um problema?
Medi¸c˜ao direta do tempo de execu¸c˜ao em um computador
real
Problemas: depende do compilador; depende do hardware;
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 6 / 34
24. Complexidade
Como medir o custo de um algoritmo? Como
comparar o custo de v´arios algoritmos que resolvem
um problema?
Medi¸c˜ao direta do tempo de execu¸c˜ao em um computador
real
Problemas: depende do compilador; depende do hardware;
Medidas de tempo podem ser influenciadas pela mem´oria dispon´ıvel.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 6 / 34
25. Complexidade
Como medir o custo de um algoritmo? Como
comparar o custo de v´arios algoritmos que resolvem
um problema?
Medi¸c˜ao direta do tempo de execu¸c˜ao em um computador
real
Problemas: depende do compilador; depende do hardware;
Medidas de tempo podem ser influenciadas pela mem´oria dispon´ıvel.
Medir com base em um computador ideal, em que cada
instru¸c˜ao tem seu custo bem definido
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 6 / 34
26. Complexidade
Como medir o custo de um algoritmo? Como
comparar o custo de v´arios algoritmos que resolvem
um problema?
Medi¸c˜ao direta do tempo de execu¸c˜ao em um computador
real
Problemas: depende do compilador; depende do hardware;
Medidas de tempo podem ser influenciadas pela mem´oria dispon´ıvel.
Medir com base em um computador ideal, em que cada
instru¸c˜ao tem seu custo bem definido
Estima-se o n´umero de opera¸c˜oes por ele realizadas
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 6 / 34
27. Complexidade
Como medir o custo de um algoritmo? Como
comparar o custo de v´arios algoritmos que resolvem
um problema?
Medi¸c˜ao direta do tempo de execu¸c˜ao em um computador
real
Problemas: depende do compilador; depende do hardware;
Medidas de tempo podem ser influenciadas pela mem´oria dispon´ıvel.
Medir com base em um computador ideal, em que cada
instru¸c˜ao tem seu custo bem definido
Estima-se o n´umero de opera¸c˜oes por ele realizadas
Em geral, considera-se apenas as opera¸c˜oes mais significativas,
ignorando as demais
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 6 / 34
28. Complexidade
Como medir o custo de um algoritmo? Como
comparar o custo de v´arios algoritmos que resolvem
um problema?
Medi¸c˜ao direta do tempo de execu¸c˜ao em um computador
real
Problemas: depende do compilador; depende do hardware;
Medidas de tempo podem ser influenciadas pela mem´oria dispon´ıvel.
Medir com base em um computador ideal, em que cada
instru¸c˜ao tem seu custo bem definido
Estima-se o n´umero de opera¸c˜oes por ele realizadas
Em geral, considera-se apenas as opera¸c˜oes mais significativas,
ignorando as demais
Exemplo: Ordena¸c˜ao ⇒ n´umero de compara¸c˜oes
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 6 / 34
29. Fun¸c˜ao de Complexidade
Para medir o custo de execu¸c˜ao de um algoritmo,
definimos uma fun¸c˜ao de custo ou complexidade
f(n):
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 7 / 34
30. Fun¸c˜ao de Complexidade
Para medir o custo de execu¸c˜ao de um algoritmo,
definimos uma fun¸c˜ao de custo ou complexidade
f(n):
f(n) ´e a medida do tempo ou espa¸co necess´ario para
executar um algoritmo para uma entrada de tamanho n
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 7 / 34
31. Fun¸c˜ao de Complexidade
Para medir o custo de execu¸c˜ao de um algoritmo,
definimos uma fun¸c˜ao de custo ou complexidade
f(n):
f(n) ´e a medida do tempo ou espa¸co necess´ario para
executar um algoritmo para uma entrada de tamanho n
Se for de tempo, ent˜ao f(n) ´e chamada de fun¸c˜ao de
complexidade de tempo ou temporal do algoritmo.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 7 / 34
32. Fun¸c˜ao de Complexidade
Para medir o custo de execu¸c˜ao de um algoritmo,
definimos uma fun¸c˜ao de custo ou complexidade
f(n):
f(n) ´e a medida do tempo ou espa¸co necess´ario para
executar um algoritmo para uma entrada de tamanho n
Se for de tempo, ent˜ao f(n) ´e chamada de fun¸c˜ao de
complexidade de tempo ou temporal do algoritmo.
Se for da mem´oria necess´aria (espa¸co) para executar o
algoritmo, ent˜ao f(n) ´e a fun¸c˜ao de complexidade espacial.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 7 / 34
33. Fun¸c˜ao de Complexidade
Se nada for dito, entende-se f(n) como
complexidade de tempo.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 8 / 34
34. Fun¸c˜ao de Complexidade
Se nada for dito, entende-se f(n) como
complexidade de tempo.
Lembre que isso n˜ao representa o tempo diretamente, mas o
n´umero de vezes que determinada opera¸c˜ao, considerada
relevante, ´e executada.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 8 / 34
35. Fun¸c˜ao de Complexidade
Se nada for dito, entende-se f(n) como
complexidade de tempo.
Lembre que isso n˜ao representa o tempo diretamente, mas o
n´umero de vezes que determinada opera¸c˜ao, considerada
relevante, ´e executada.
Mas e isso funciona?
Por que n˜ao condicionar apenas ao hardware, ou o
tempo utilizado?
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 8 / 34
36. Fun¸c˜ao de Complexidade
Se nada for dito, entende-se f(n) como
complexidade de tempo.
Lembre que isso n˜ao representa o tempo diretamente, mas o
n´umero de vezes que determinada opera¸c˜ao, considerada
relevante, ´e executada.
Mas e isso funciona?
Por que n˜ao condicionar apenas ao hardware, ou o
tempo utilizado?
Porque n˜ao conseguiremos garantir as mesmas condi¸c˜oes
para toda e qualquer entrada
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 8 / 34
37. Fun¸c˜ao de Complexidade
Exemplo
Suponha dois algoritmos com duas fun¸c˜oes de
complexidade:
f1(n) = c1n2
f2(n) = c2log10(n)
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 9 / 34
38. Fun¸c˜ao de Complexidade
Exemplo
Suponha dois algoritmos com duas fun¸c˜oes de
complexidade:
f1(n) = c1n2
f2(n) = c2log10(n)
Suponha dois computadores:
A: 1.000.000.000 de instru¸c˜oes por segundo
B: 10.000.000 de instru¸c˜oes por segundo (100 vezes mais
lento)
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 9 / 34
39. Fun¸c˜ao de Complexidade
Exemplo
Agora suponha dois compiladores
Um ´otimo, usado no primeiro algoritmo, resultando em uma
constante c1 = 2 (f1(n) = 2n2
)
Um bem pior, usado no segundo algoritmo, resultando em
uma c2 = 50 (f2(n) = 50log10(n))
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 10 / 34
40. Fun¸c˜ao de Complexidade
Exemplo
Agora suponha dois compiladores
Um ´otimo, usado no primeiro algoritmo, resultando em uma
constante c1 = 2 (f1(n) = 2n2
)
Um bem pior, usado no segundo algoritmo, resultando em
uma c2 = 50 (f2(n) = 50log10(n))
Fazemos ent˜ao o algoritmo f1 rodar no computador
mais r´apido e o f2 no mais lento
f1 n˜ao somente tem a m´aquina mais r´apida, como o melhor
compilador
f2 ficou com o pior dos dois mundos
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 10 / 34
41. Fun¸c˜ao de Complexidade
Exemplo
Para uma entrada de 1.000 elementos:
F1 = 2 × (1.000)2
= 2.000.000 instru¸c˜oes
2.000.000 ÷ 1.000.000.000 = 2 ms
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 11 / 34
42. Fun¸c˜ao de Complexidade
Exemplo
Para uma entrada de 1.000 elementos:
F1 = 2 × (1.000)2
= 2.000.000 instru¸c˜oes
2.000.000 ÷ 1.000.000.000 = 2 ms
f2 = 50 × log10(1.000) = 150 instru¸c˜oes
150 ÷ 10.000.000 = 0, 015 ms
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 11 / 34
43. Fun¸c˜ao de Complexidade
Exemplo
Para uma entrada de 1.000 elementos:
F1 = 2 × (1.000)2
= 2.000.000 instru¸c˜oes
2.000.000 ÷ 1.000.000.000 = 2 ms
f2 = 50 × log10(1.000) = 150 instru¸c˜oes
150 ÷ 10.000.000 = 0, 015 ms
Mesmo tendo o pior compilador e a pior m´aquina,
para apenas 1.000 elementos j´a rodou ≈ 133 vezes
mais r´apido
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 11 / 34
44. Fun¸c˜ao de Complexidade – C´alculo
Exemplo
Encontrar o maior
elemento de um
arranjo de inteiros A
int maxArray(int[] A) {
int i, max;
max = A[0];
for(i=1; i<A.length; i++)
if(max < A[i])
max = A[i];
return max;
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 12 / 34
45. Fun¸c˜ao de Complexidade – C´alculo
Exemplo
int maxArray(int [] A) {
int i, max;
max = A[0];
for(i=1; i<A.length; i++)
if(max < A[i])
max = A[i];
return max;
}
Seja f (n) uma fun¸c˜ao
de complexidade
f (n) ´e o n´umero de
compara¸c˜oes para um
arranjo A de tamanho n
Como seria f (n)?
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 13 / 34
46. Fun¸c˜ao de Complexidade – C´alculo
Exemplo
int maxArray(int [] A) {
int i, max;
max = A[0];
for(i=1; i<A.length; i++)
if(max < A[i])
max = A[i];
return max;
}
Seja f (n) uma fun¸c˜ao
de complexidade
f (n) ´e o n´umero de
compara¸c˜oes para um
arranjo A de tamanho n
Como seria f (n)?
f (n) = n − 1, para n > 0.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 13 / 34
47. Fun¸c˜ao de Complexidade – C´alculo
Exemplo
int maxArray(int [] A) {
int i, max;
max = A[0];
for(i=1; i<A.length; i++)
if(max < A[i])
max = A[i];
return max;
}
Seja f (n) uma fun¸c˜ao
de complexidade
f (n) ´e o n´umero de
compara¸c˜oes para um
arranjo A de tamanho n
Como seria f (n)?
f (n) = n − 1, para n > 0.
Ser´a que o algoritmo
apresentado ´e ´otimo?
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 13 / 34
48. Fun¸c˜ao de Complexidade – C´alculo
Exemplo – Prova
Teorema:
Qualquer algoritmo para encontrar o maior elemento de um
conjunto de n elementos, n ≥ 1, faz ao menos n − 1
compara¸c˜oes
Prova:
Cada um dos n − 1 elementos tem que ser verificado, por
meio de compara¸c˜oes, que ´e menor do que algum outro
elemento. Logo, n − 1 compara¸c˜oes s˜ao necess´arias.
Como maxArray() possui complexidade igual ao
limite inferior de custo, ent˜ao seu algoritmo ´e ´otimo.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 14 / 34
49. Fun¸c˜ao de Complexidade
Normalmente, a medida de custo de execu¸c˜ao
depende do tamanho da entrada
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 15 / 34
50. Fun¸c˜ao de Complexidade
Normalmente, a medida de custo de execu¸c˜ao
depende do tamanho da entrada
Mas este n˜ao ´e o ´unico fato que influencia o custo
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 15 / 34
51. Fun¸c˜ao de Complexidade
Normalmente, a medida de custo de execu¸c˜ao
depende do tamanho da entrada
Mas este n˜ao ´e o ´unico fato que influencia o custo
O tipo de entrada pode tamb´em influenciar o custo
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 15 / 34
52. Fun¸c˜ao de Complexidade
Normalmente, a medida de custo de execu¸c˜ao
depende do tamanho da entrada
Mas este n˜ao ´e o ´unico fato que influencia o custo
O tipo de entrada pode tamb´em influenciar o custo
No caso de maxArray(), a entrada n˜ao influencia
Para um algoritmo de ordena¸c˜ao, por exemplo, menos tempo
ser´a gasto se a entrada j´a estiver quase ordenada
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 15 / 34
53. Fun¸c˜ao de Complexidade
Normalmente, a medida de custo de execu¸c˜ao
depende do tamanho da entrada
Mas este n˜ao ´e o ´unico fato que influencia o custo
O tipo de entrada pode tamb´em influenciar o custo
No caso de maxArray(), a entrada n˜ao influencia
Para um algoritmo de ordena¸c˜ao, por exemplo, menos tempo
ser´a gasto se a entrada j´a estiver quase ordenada
Considere um outro m´etodo para obter o m´aximo e
o m´ınimo de um arranjo.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 15 / 34
54. Fun¸c˜ao de Complexidade
Exemplo
Qual a fun¸c˜ao de
complexidade de
maxMin1?
void maxMin1(int [] A) {
int i, max, min;
max = min = A[0];
for(i=1; i < A.length; ++i) {
if(max < A[i]) max = A[i];
else
if(A[i] < min) min = A[i];
}
System.out.print("M´ınimo = "
+ min);
System.out.print(", M´aximo = "
+ max);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 16 / 34
55. Fun¸c˜ao de Complexidade
Exemplo
Qual a fun¸c˜ao de
complexidade de
maxMin1?
Depende:
Se o arranjo j´a estiver
ordenado em ordem
crescente:
void maxMin1(int [] A) {
int i, max, min;
max = min = A[0];
for(i=1; i < A.length; ++i) {
if(max < A[i]) max = A[i];
else
if(A[i] < min) min = A[i];
}
System.out.print("M´ınimo = "
+ min);
System.out.print(", M´aximo = "
+ max);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 16 / 34
56. Fun¸c˜ao de Complexidade
Exemplo
Qual a fun¸c˜ao de
complexidade de
maxMin1?
Depende:
Se o arranjo j´a estiver
ordenado em ordem
crescente:
f (n) = n − 1
void maxMin1(int [] A) {
int i, max, min;
max = min = A[0];
for(i=1; i < A.length; ++i) {
if(max < A[i]) max = A[i];
else
if(A[i] < min) min = A[i];
}
System.out.print("M´ınimo = "
+ min);
System.out.print(", M´aximo = "
+ max);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 16 / 34
57. Fun¸c˜ao de Complexidade
Exemplo
Qual a fun¸c˜ao de
complexidade de
maxMin1?
Depende:
Se o arranjo j´a estiver
ordenado em ordem
crescente:
f (n) = n − 1
S´o o if ser´a ativado
(conto s´o compara¸c˜oes)
void maxMin1(int [] A) {
int i, max, min;
max = min = A[0];
for(i=1; i < A.length; ++i) {
if(max < A[i]) max = A[i];
else
if(A[i] < min) min = A[i];
}
System.out.print("M´ınimo = "
+ min);
System.out.print(", M´aximo = "
+ max);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 16 / 34
58. Fun¸c˜ao de Complexidade
Exemplo
Qual a fun¸c˜ao de
complexidade de
maxMin1?
Depende:
Se o arranjo j´a estiver
ordenado em ordem
decrescente:
void maxMin1(int [] A) {
int i, max, min;
max = min = A[0];
for(i=1; i < A.length; ++i) {
if(max < A[i]) max = A[i];
else
if(A[i] < min) min = A[i];
}
System.out.print("M´ınimo = "
+ min);
System.out.print(", M´aximo = "
+ max);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 16 / 34
59. Fun¸c˜ao de Complexidade
Exemplo
Qual a fun¸c˜ao de
complexidade de
maxMin1?
Depende:
Se o arranjo j´a estiver
ordenado em ordem
decrescente:
f (n) = 2(n − 1)
void maxMin1(int [] A) {
int i, max, min;
max = min = A[0];
for(i=1; i < A.length; ++i) {
if(max < A[i]) max = A[i];
else
if(A[i] < min) min = A[i];
}
System.out.print("M´ınimo = "
+ min);
System.out.print(", M´aximo = "
+ max);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 16 / 34
60. Fun¸c˜ao de Complexidade
Exemplo
Qual a fun¸c˜ao de
complexidade de
maxMin1?
Depende:
Se o arranjo j´a estiver
ordenado em ordem
decrescente:
f (n) = 2(n − 1)
Ambos ifs s˜ao ativados
void maxMin1(int [] A) {
int i, max, min;
max = min = A[0];
for(i=1; i < A.length; ++i) {
if(max < A[i]) max = A[i];
else
if(A[i] < min) min = A[i];
}
System.out.print("M´ınimo = "
+ min);
System.out.print(", M´aximo = "
+ max);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 16 / 34
61. Fun¸c˜ao de Complexidade
Exemplo
void maxMin1(int [] A) {
int i, max, min;
max = min = A[0];
for(i=1; i < A.length; ++i) {
if(max < A[i]) max = A[i];
else
if(A[i] < min) min = A[i];
}
System.out.print("M´ınimo = "
+ min);
System.out.print(", M´aximo = "
+ max);
}
Se A[i] > max metade
das vezes
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 17 / 34
62. Fun¸c˜ao de Complexidade
Exemplo
void maxMin1(int [] A) {
int i, max, min;
max = min = A[0];
for(i=1; i < A.length; ++i) {
if(max < A[i]) max = A[i];
else
if(A[i] < min) min = A[i];
}
System.out.print("M´ınimo = "
+ min);
System.out.print(", M´aximo = "
+ max);
}
Se A[i] > max metade
das vezes
f (n) =
(n − 1) + 2(n − 1)
2
= 3
n
2
−
3
2
, para n > 0
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 17 / 34
63. Fun¸c˜ao de Complexidade
Trˆes cen´arios podem ser observados
Melhor caso: j´a ordenado crescentemente
Menor tempo de execu¸c˜ao dentre as entradas de tamanho n
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 18 / 34
64. Fun¸c˜ao de Complexidade
Trˆes cen´arios podem ser observados
Melhor caso: j´a ordenado crescentemente
Menor tempo de execu¸c˜ao dentre as entradas de tamanho n
Pior caso: j´a ordenado decrescentemente
Maior tempo de execu¸c˜ao dentre as entradas de tamanho n
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 18 / 34
65. Fun¸c˜ao de Complexidade
Trˆes cen´arios podem ser observados
Melhor caso: j´a ordenado crescentemente
Menor tempo de execu¸c˜ao dentre as entradas de tamanho n
Pior caso: j´a ordenado decrescentemente
Maior tempo de execu¸c˜ao dentre as entradas de tamanho n
Caso m´edio: um elemento A[i] tem 50% de chance
de ser maior ou menor que max
M´edia dos tempos de execu¸c˜ao de todas as entradas de
tamanho n
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 18 / 34
66. Fun¸c˜ao de Complexidade
Caso M´edio
Sup˜oe uma distribui¸c˜ao de probabilidades sobre o
conjunto de entradas de tamanho n
O custo m´edio ´e obtido com base nessa distribui¸c˜ao.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 19 / 34
67. Fun¸c˜ao de Complexidade
Caso M´edio
Sup˜oe uma distribui¸c˜ao de probabilidades sobre o
conjunto de entradas de tamanho n
O custo m´edio ´e obtido com base nessa distribui¸c˜ao.
Normalmente, o caso m´edio ´e muito mais dif´ıcil de
determinar do que o melhor e o pior caso
Comumente, sup˜oe-se que todas as entradas tˆem a mesma
chance de ocorrer → equiprov´aveis.
Nem sempre isto ´e verdade. Por isso, o caso m´edio ´e
determinado apenas se fizer sentido.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 19 / 34
68. Fun¸c˜ao de Complexidade
Caso M´edio – Exemplo
Busca seq¨uencial em
um vetor de tamanho n
Qual o melhor caso?
int busca(int x, int[] A)
{
for (int i=0; i<A.length;
i++)
if (A[i] == x)
return(i);
return(-1);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 20 / 34
69. Fun¸c˜ao de Complexidade
Caso M´edio – Exemplo
Busca seq¨uencial em
um vetor de tamanho n
Qual o melhor caso?
O valor procurado ´e o
primeiro → 1 compara¸c˜ao
int busca(int x, int[] A)
{
for (int i=0; i<A.length;
i++)
if (A[i] == x)
return(i);
return(-1);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 20 / 34
70. Fun¸c˜ao de Complexidade
Caso M´edio – Exemplo
Busca seq¨uencial em
um vetor de tamanho n
Qual o melhor caso?
O valor procurado ´e o
primeiro → 1 compara¸c˜ao
f (n) = 1
int busca(int x, int[] A)
{
for (int i=0; i<A.length;
i++)
if (A[i] == x)
return(i);
return(-1);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 20 / 34
71. Fun¸c˜ao de Complexidade
Caso M´edio – Exemplo
Qual o pior caso?
int busca(int x, int[] A)
{
for (int i=0; i<A.length;
i++)
if (A[i] == x)
return(i);
return(-1);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 21 / 34
72. Fun¸c˜ao de Complexidade
Caso M´edio – Exemplo
Qual o pior caso?
O valor procurado ´e o
´ultimo ou n˜ao est´a em A
int busca(int x, int[] A)
{
for (int i=0; i<A.length;
i++)
if (A[i] == x)
return(i);
return(-1);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 21 / 34
73. Fun¸c˜ao de Complexidade
Caso M´edio – Exemplo
Qual o pior caso?
O valor procurado ´e o
´ultimo ou n˜ao est´a em A
f (n) = n
int busca(int x, int[] A)
{
for (int i=0; i<A.length;
i++)
if (A[i] == x)
return(i);
return(-1);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 21 / 34
74. Fun¸c˜ao de Complexidade
Caso M´edio – Exemplo
Melhor caso:
f (n) = 1
Pior caso:
f (n) = n
Caso m´edio:
int busca(int x, int[] A)
{
for (int i=0; i<A.length;
i++)
if (A[i] == x)
return(i);
return(-1);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 22 / 34
75. Fun¸c˜ao de Complexidade
Caso M´edio – Exemplo
Melhor caso:
f (n) = 1
Pior caso:
f (n) = n
Caso m´edio:
f (n) =
1 + n
2
int busca(int x, int[] A)
{
for (int i=0; i<A.length;
i++)
if (A[i] == x)
return(i);
return(-1);
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 22 / 34
76. Fun¸c˜ao de Complexidade
Caso M´edio – Exemplo
Melhor caso:
f (n) = 1
Pior caso:
f (n) = n
Caso m´edio:
f (n) =
1 + n
2
int busca(int x, int[] A)
{
for (int i=0; i<A.length;
i++)
if (A[i] == x)
return(i);
return(-1);
}
Mas isso supondo uma distribui¸c˜ao uniforme de
casos...
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 22 / 34
77. Fun¸c˜ao de Complexidade
C´alculo da fun¸c˜ao de complexidade:
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 23 / 34
78. Fun¸c˜ao de Complexidade
C´alculo da fun¸c˜ao de complexidade:
Identifique o tempo de execu¸c˜ao de cada comando
no algoritmo
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 23 / 34
79. Fun¸c˜ao de Complexidade
C´alculo da fun¸c˜ao de complexidade:
Identifique o tempo de execu¸c˜ao de cada comando
no algoritmo
Selecione apenas os comandos relacionados com o
tamanho da entrada
Ex: aqueles que ir˜ao ser executados um n´umero de vezes
proporcional a esse tamanho
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 23 / 34
80. Fun¸c˜ao de Complexidade
C´alculo da fun¸c˜ao de complexidade:
Identifique o tempo de execu¸c˜ao de cada comando
no algoritmo
Selecione apenas os comandos relacionados com o
tamanho da entrada
Ex: aqueles que ir˜ao ser executados um n´umero de vezes
proporcional a esse tamanho
A soma dos tempos de execu¸c˜ao de cada um desses
comandos corresponde ao tempo de execu¸c˜ao do
algoritmo
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 23 / 34
81. Fun¸c˜ao de Complexidade
Exemplo
Determine a fun¸c˜ao
de complexidade do
algoritmo de
ordena¸c˜ao por
inser¸c˜ao no pior
caso para um vetor
de tamanho n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 24 / 34
82. Fun¸c˜ao de Complexidade
Exemplo
Qual o pior caso? static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 25 / 34
83. Fun¸c˜ao de Complexidade
Exemplo
Qual o pior caso?
O caso em que todo
la¸co ser´a executado
at´e o fim
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 25 / 34
84. Fun¸c˜ao de Complexidade
Exemplo
Qual o pior caso?
O caso em que todo
la¸co ser´a executado
at´e o fim
Ex: v ordenado em
ordem inversa ou
desordenado de modo
a que essa condi¸c˜ao
ocorra
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 25 / 34
85. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 26 / 34
86. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i]; n − 1
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 26 / 34
87. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
O la¸co executa
n − 1 repeti¸c˜oes
desse comando
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i]; n − 1
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 26 / 34
88. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i]; n − 1
int j = i; n − 1
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 26 / 34
89. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i]; n − 1
int j = i; n − 1
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1]; ???
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 26 / 34
90. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
Vejamos as itera¸c˜oes
do while mais de
perto
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 27 / 34
91. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
Vejamos as itera¸c˜oes
do while mais de
perto
No pior caso, essa
parte n˜ao nos
ajudar´a
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 27 / 34
92. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
i itera¸c˜oes
1
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 28 / 34
93. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
i itera¸c˜oes
1 1
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 28 / 34
94. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
i itera¸c˜oes
1 1
2
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 28 / 34
95. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
i itera¸c˜oes
1 1
2 2
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 28 / 34
96. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
i itera¸c˜oes
1 1
2 2
. . . . . .
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 28 / 34
97. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
i itera¸c˜oes
1 1
2 2
. . . . . .
n − 1
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 28 / 34
98. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
i itera¸c˜oes
1 1
2 2
. . . . . .
n − 1 n − 1
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 28 / 34
99. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
for (int i=1; i<v.length; i++)
{
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
Ent˜ao, temos
1 + 2 + . . . + (n − 1)
=
n(n − 1)
2
repeti¸c˜oes dos
comandos no while
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 29 / 34
100. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i]; n − 1
int j = i; n − 1
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 30 / 34
101. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i]; n − 1
int j = i; n − 1
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1]; n(n−1)
2
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 30 / 34
102. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i]; n − 1
int j = i; n − 1
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1]; n(n−1)
2
j--; n(n−1)
2
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 30 / 34
103. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i]; n − 1
int j = i; n − 1
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1]; n(n−1)
2
j--; n(n−1)
2
}
v[j] = aux; n − 1
}
}
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 30 / 34
104. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E juntando tudo
teremos
3(n − 1) + 2
n(n − 1)
2
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 31 / 34
105. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E juntando tudo
teremos
3(n − 1) + 2
n(n − 1)
2
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 31 / 34
106. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E juntando tudo
teremos
3(n − 1) + 2
n(n − 1)
2
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 31 / 34
107. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E juntando tudo
teremos
3(n − 1) + 2
n(n − 1)
2
= 3(n − 1) + n(n − 1)
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 31 / 34
108. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E juntando tudo
teremos
3(n − 1) + 2
n(n − 1)
2
= 3(n − 1) + n(n − 1)
= 3n − 3 + n2
− n
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 31 / 34
109. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E juntando tudo
teremos
3(n − 1) + 2
n(n − 1)
2
= 3(n − 1) + n(n − 1)
= 3n − 3 + n2
− n
= n2
+ 2n − 3
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 31 / 34
110. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
Naturalmente, os coeficientes de f (n) = n2
+ 2n − 3
dependem de quais opera¸c˜oes (e como) contamos
Em nosso caso:
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 32 / 34
111. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
Naturalmente, os coeficientes de f (n) = n2
+ 2n − 3
dependem de quais opera¸c˜oes (e como) contamos
Em nosso caso:
Contamos aux = v[i] e j = i, n˜ao apenas compara¸c˜oes
(como aux < v[j-1], por exemplo)
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 32 / 34
112. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
Naturalmente, os coeficientes de f (n) = n2
+ 2n − 3
dependem de quais opera¸c˜oes (e como) contamos
Em nosso caso:
Contamos aux = v[i] e j = i, n˜ao apenas compara¸c˜oes
(como aux < v[j-1], por exemplo)
Nada disso importa
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 32 / 34
113. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
Naturalmente, os coeficientes de f (n) = n2
+ 2n − 3
dependem de quais opera¸c˜oes (e como) contamos
Em nosso caso:
Contamos aux = v[i] e j = i, n˜ao apenas compara¸c˜oes
(como aux < v[j-1], por exemplo)
Nada disso importa
O que nos importa ´e que, no todo, nosso algoritmo varia
quadraticamente (n2
) com o tamanho da entrada
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 32 / 34
114. Fun¸c˜ao de Complexidade
Exemplo – Contemos as opera¸c˜oes |v| = n
Naturalmente, os coeficientes de f (n) = n2
+ 2n − 3
dependem de quais opera¸c˜oes (e como) contamos
Em nosso caso:
Contamos aux = v[i] e j = i, n˜ao apenas compara¸c˜oes
(como aux < v[j-1], por exemplo)
Nada disso importa
O que nos importa ´e que, no todo, nosso algoritmo varia
quadraticamente (n2
) com o tamanho da entrada
Os coeficientes variar˜ao conforme a implementa¸c˜ao, mas n˜ao
seu comportamento quadr´atico
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 32 / 34
115. Fun¸c˜ao de Complexidade
Em suma...
Problemas requerem algoritmos que os solucionem
O algoritmo adequado depende do seu
comportamento
Complexidade temporal e espacial
Algoritmo ´otimo
Soluciona o problema com o menor custo poss´ıvel
Fun¸c˜ao de complexidade
Melhor caso, pior caso e caso m´edio
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 33 / 34
116. Referˆencias
Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes
em Java e C++. Cengage. 2007.
Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L.,
Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press,
2001.
Gersting, Judith L. Fundamentos Matem´aticos para a Ciˆencia
da Computa¸c˜ao. 3a ed. LTC. 1993.
Norton Trevisan Romannorton@usp.br Aula 05 – Custo de um Algoritmo e Complexidade 28 de agosto de 2018 34 / 34