SlideShare uma empresa Scribd logo
1 de 116
Baixar para ler offline
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Mais conteúdo relacionado

Mais procurados (6)

(ACH2002) Introdução à Análise de Algoritmos - Aula 14
(ACH2002) Introdução à Análise de Algoritmos - Aula 14(ACH2002) Introdução à Análise de Algoritmos - Aula 14
(ACH2002) Introdução à Análise de Algoritmos - Aula 14
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 01
(ACH2002) Introdução à Análise de Algoritmos - Aula 01(ACH2002) Introdução à Análise de Algoritmos - Aula 01
(ACH2002) Introdução à Análise de Algoritmos - Aula 01
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 07
(ACH2002) Introdução à Análise de Algoritmos - Aula 07(ACH2002) Introdução à Análise de Algoritmos - Aula 07
(ACH2002) Introdução à Análise de Algoritmos - Aula 07
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 11
(ACH2002) Introdução à Análise de Algoritmos - Aula 11(ACH2002) Introdução à Análise de Algoritmos - Aula 11
(ACH2002) Introdução à Análise de Algoritmos - Aula 11
 
Matemática Computacional
Matemática ComputacionalMatemática Computacional
Matemática Computacional
 
Apresentacao N P Completude Loiane
Apresentacao  N P Completude  LoianeApresentacao  N P Completude  Loiane
Apresentacao N P Completude Loiane
 

Semelhante a (ACH2002) Introdução à Análise de Algoritmos - Aula 05

59 algoritmosgeneticos(1)
59 algoritmosgeneticos(1)59 algoritmosgeneticos(1)
59 algoritmosgeneticos(1)
arapido
 

Semelhante a (ACH2002) Introdução à Análise de Algoritmos - Aula 05 (20)

(ACH2002) Introdução à Análise de Algoritmos - Aula 04
(ACH2002) Introdução à Análise de Algoritmos - Aula 04(ACH2002) Introdução à Análise de Algoritmos - Aula 04
(ACH2002) Introdução à Análise de Algoritmos - Aula 04
 
Analise Algoritmos
Analise AlgoritmosAnalise Algoritmos
Analise Algoritmos
 
Algoritmos - Aula 02 - Construcao de algoritmos
Algoritmos - Aula 02 - Construcao de algoritmosAlgoritmos - Aula 02 - Construcao de algoritmos
Algoritmos - Aula 02 - Construcao de algoritmos
 
Aula2
Aula2Aula2
Aula2
 
Análise de Algoritmos
Análise de AlgoritmosAnálise de Algoritmos
Análise de Algoritmos
 
Introdução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptxIntrodução aos algoritmos e à algoritmia.pptx
Introdução aos algoritmos e à algoritmia.pptx
 
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
 
Fórum respostas
Fórum  respostasFórum  respostas
Fórum respostas
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.ppt
 
Aula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).pptAula_07_Complexidade_de_Algoritmos (1).ppt
Aula_07_Complexidade_de_Algoritmos (1).ppt
 
Cap1
Cap1Cap1
Cap1
 
59 algoritmosgeneticos(1)
59 algoritmosgeneticos(1)59 algoritmosgeneticos(1)
59 algoritmosgeneticos(1)
 
Ordenação de pares e ímpares
Ordenação de pares e ímparesOrdenação de pares e ímpares
Ordenação de pares e ímpares
 
Algoritmos visualg
Algoritmos visualgAlgoritmos visualg
Algoritmos visualg
 
SysSorting Professional
SysSorting ProfessionalSysSorting Professional
SysSorting Professional
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Análise de algoritmo
Análise de algoritmoAnálise de algoritmo
Análise de algoritmo
 
Algoritmos parte1
Algoritmos parte1Algoritmos parte1
Algoritmos parte1
 
01 algorimos e complexidade introduç o
01   algorimos e complexidade introduç o01   algorimos e complexidade introduç o
01 algorimos e complexidade introduç o
 
Algoritmos com java script
Algoritmos com java scriptAlgoritmos com java script
Algoritmos com java script
 

Mais de Norton Trevisan Roman

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
FabianeMartins35
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
AntonioVieira539017
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
andrenespoli3
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
tatianehilda
 

Último (20)

Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptxPlano de aula Nova Escola períodos simples e composto parte 1.pptx
Plano de aula Nova Escola períodos simples e composto parte 1.pptx
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.ppt
 
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVAEDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
EDUCAÇÃO ESPECIAL NA PERSPECTIVA INCLUSIVA
 

(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