SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Universidade Presbiteriana Mackenzie	
  
Aula	
  2:	
  Análise	
  de	
  Algoritmos	
  
Prof. Ms. Daniel Arndt Alves
Faculdade	
  de	
  Computação	
  e	
  Informá;ca	
  
Computação e Informática
Faculdade de
Estrutura	
  de	
  
Dados	
  II	
  
Análise	
  de	
  Algoritmos	
   1	
  Daniel	
  Arndt	
  Alves	
  
Obje6vos	
  
•  Por	
  que	
  analisar	
  a	
  complexidade	
  dos	
  
algoritmos?	
  
– A	
  preocupação	
  com	
  a	
  complexidade	
  dos	
  
algoritmos	
  é	
  fundamental	
  para	
  projetar	
  
algoritmos	
  eficientes.	
  
– Podemos	
  desenvolver	
  um	
  algoritmo	
  e	
  depois	
  
analisar	
  a	
  sua	
  complexidade	
  para	
  verificar	
  a	
  sua	
  
eficiência.	
  
– Mas	
  o	
  melhor	
  ainda	
  é	
  ter	
  a	
  preocupação	
  de	
  
projetar	
  algoritmos	
  eficientes	
  desde	
  a	
  sua	
  
concepção.	
  
Análise	
  de	
  Algoritmos	
   2	
  
Análise	
  de	
  Algoritmos	
  
•  A	
  Análise	
  de	
  Algoritmos	
  é	
  	
  um	
  campo	
  da	
  
Ciência	
  da	
  	
  Computação	
  que	
  tem	
  como	
  	
  
obje6vo	
  o	
  entendimento	
  da	
  	
  complexidade	
  
dos	
  algoritmos.	
  
•  O	
  obje6vo	
  desta	
  aula	
  consiste	
  em	
  desenvolver	
  
as	
  	
  habilidades	
  de	
  fazer	
  	
  julgamentos	
  
elementares	
  da	
  	
  avaliação	
  dos	
  programas.	
  
Análise	
  de	
  Algoritmos	
   3	
  
Análise	
  de	
  Algoritmos	
  
•  Existem	
  	
  muitos	
  	
  critérios	
  	
  com	
  	
  os	
  	
  quais	
  	
  
podemos	
  	
  julgar	
  um	
  programa,	
  por	
  exemplo:	
  	
  
–  Será	
  que	
  ele	
  faz	
  o	
  que	
  se	
  espera	
  que	
  ele	
  faça?	
  
–  Será	
  que	
  ele	
  funciona	
  corretamente	
  	
  de	
  	
  acordo	
  	
  com	
  
as	
  	
  especificações?	
  
–  Existe	
  documentação	
  explicando	
  como	
  usá-­‐lo	
  e	
  como	
  
ele	
  	
  trabalha?	
  
–  O	
  código	
  está	
  legível?	
  
•  Os	
  critérios	
  acima	
  são	
  muito	
  importantes	
  quando	
  
se	
  escreve	
  	
  soSware,	
  	
  especialmente	
  	
  para	
  	
  
grandes	
  	
  sistemas.	
  
Análise	
  de	
  Algoritmos	
   4	
  
Eficiência	
  ou	
  Complexidade	
  de	
  Algoritmos	
  
•  Para	
  um	
  dado	
  problema,	
  considere	
  dois	
  
algoritmos	
  que	
  o	
  resolvem:	
  
	
  
– Seja	
  n	
  um	
  parâmetro	
  que	
  caracteriza	
  o	
  tamanho	
  
da	
  entrada	
  do	
  algoritmo.	
  Por	
  exemplo,	
  ordenar	
  n	
  
números	
  ou	
  mul6plicar	
  duas	
  matrizes	
  quadradas	
  
n	
  x	
  n	
  (cada	
  uma	
  com	
  n2	
  elementos).	
  
	
  
– Como	
  podemos	
  comparar	
  os	
  dois	
  algoritmos	
  para	
  
escolher	
  o	
  melhor?	
  
Análise	
  de	
  Algoritmos	
   5	
  
•  Existem	
  	
  ainda	
  	
  outros	
  	
  critérios	
  	
  diretamente	
  	
  
relacionados	
  com	
  o	
  desempenho:	
  	
  
– tempo	
  de	
  computação	
  
– requisitos	
  de	
  memória	
  
•  A	
  	
  avaliação	
  	
  de	
  	
  desempenho	
  	
  pode	
  	
  ser	
  	
  
liberalmente	
  dividida	
  em	
  2	
  partes:	
  
1.  es6ma6vas	
  precedentes	
  e	
  	
  
2.  testes	
  posteriores	
  
Análise	
  de	
  Algoritmos	
   6	
  
Complexidade	
  de	
  tempo	
  ou	
  de	
  espaço	
  
Complexidade	
  de	
  tempo	
  ou	
  de	
  espaço	
  
•  Precisamos	
  definir	
  alguma	
  medida	
  que	
  expresse	
  a	
  
eficiência.	
  Costuma-­‐se	
  medir	
  um	
  algoritmo	
  em	
  termos	
  
de	
  tempo	
  de	
  execução	
  ou	
  o	
  espaço	
  (de	
  memória)	
  
u6lizado.	
  
–  Para	
  o	
  tempo,	
  podemos	
  considerar	
  o	
  tempo	
  absoluto	
  (em	
  
minutos,	
  segundos,	
  etc.).	
  Medir	
  o	
  tempo	
  absoluto	
  não	
  é	
  
interessante	
  por	
  depender	
  fortemente	
  da	
  máquina.	
  
–  Em	
  Análise	
  de	
  Algoritmos	
  conta-­‐se	
  o	
  número	
  de	
  operações	
  
consideradas	
  relevantes	
  realizadas	
  pelo	
  algoritmos	
  e	
  
expressa-­‐se	
  esse	
  número	
  como	
  uma	
  função	
  de	
  n.	
  Essas	
  
operações	
  podem	
  ser	
  comparações,	
  operações	
  
aritmé6cas,	
  movimento	
  de	
  dados,	
  etc.	
  
Análise	
  de	
  Algoritmos	
   7	
  
•  Considere	
  inicialmente	
  uma	
  es6ma6va	
  precedente.	
  
Suponha	
  	
  que	
  	
  em	
  	
  algum	
  	
  ponto	
  	
  do	
  	
  seu	
  	
  programa	
  	
  
encontra-­‐se	
  a	
  instrução:	
  
x = x + 1;	
  
•  Gostaríamos	
  de	
  determinar	
  dois	
  valores	
  para	
  esta	
  	
  
instrução:	
  
–  a	
  duração	
  de	
  tempo	
  para	
  uma	
  única	
  execução;	
  
–  a	
  quan6dade	
  de	
  vezes	
  que	
  ela	
  é	
  executada.	
  
•  O	
  	
  produto	
  	
  desses	
  	
  valores	
  	
  será	
  o	
  	
  tempo	
  	
  total	
  	
  tomado	
  
por	
  esta	
  instrução.	
  
•  A	
  segunda	
  esta_s6ca	
  é	
  chamada	
  de	
  contagem	
  de	
  
frequência	
  e	
  varia	
  de	
  um	
  conjunto	
  de	
  dados	
  para	
  	
  outro.	
  	
  
Análise	
  de	
  Algoritmos	
   8	
  
Complexidade	
  de	
  tempo	
  ou	
  de	
  espaço	
  
•  Uma	
  das	
  tarefas	
  mais	
  dibceis,	
  em	
  es6ma6va	
  de	
  contagem	
  	
  
de	
  frequência,	
  é	
  a	
  seleção	
  adequada	
  de	
  amostras	
  de	
  dados	
  	
  
•  Será	
  impossível	
  	
  determinar	
  	
  exatamente	
  	
  quanto	
  	
  tempo	
  	
  
levará	
  a	
  	
  execução	
  	
  de	
  	
  qualquer	
  	
  comando,	
  	
  a	
  	
  menos	
  	
  que	
  	
  
tenhamos	
  as	
  informações	
  seguintes:	
  
–  máquina	
  onde	
  a	
  instrução	
  será	
  executada;	
  
–  conjunto	
  de	
  instruções	
  da	
  linguagem	
  da	
  máquina;	
  
–  os	
  tempos	
  necessários	
  para	
  cada	
  instrução	
  da	
  máquina;	
  
–  a	
  tradução	
  que	
  um	
  compilador	
  fará	
  do	
  código	
  fonte	
  para	
  a	
  
linguagem	
  	
  da	
  máquina.	
  
	
  
•  Assim,	
  é	
  possível	
  determinar	
  esses	
  valores	
  escolhendo	
  uma	
  	
  
máquina	
  real	
  e	
  um	
  compilador	
  existente.	
  
Análise	
  de	
  Algoritmos	
   9	
  
Complexidade	
  de	
  tempo	
  ou	
  de	
  espaço	
  
•  Outra	
  alterna6va	
  consiste	
  em	
  definir	
  um	
  computador	
  
hipoté6co	
  (com	
  um	
  tempo	
  de	
  execução	
  	
  imaginário),	
  
porém	
  mantendo	
  os	
  tempos	
  	
  razoavelmente	
  próximos	
  
dos	
  equipamentos	
  	
  existentes,	
  para	
  que	
  os	
  valores	
  
resultantes	
  sejam	
  	
  representa6vos.	
  
•  Nenhuma	
  dessas	
  alterna6vas	
  mostra-­‐se	
  adequada,	
  	
  
pois	
  em	
  ambos	
  os	
  casos	
  o	
  tempo	
  	
  determinado	
  	
  
provavelmente	
  não	
  se	
  aplicará	
  a	
  muitos	
  	
  
computadores.	
  
•  Também	
  a	
  variação	
  do	
  compilador	
  de	
  uma	
  máquina	
  
para	
  outra	
  representará	
  um	
  problema.	
  
Análise	
  de	
  Algoritmos	
   10	
  
Complexidade	
  de	
  tempo	
  ou	
  de	
  espaço	
  
•  Todas	
  essas	
  considerações	
  conduzem-­‐nos	
  a	
  limitar	
  	
  
nossos	
  	
  obje6vos	
  	
  em	
  	
  uma	
  	
  análise	
  	
  a	
  	
  priori.	
  	
  
•  Vamos	
  	
  nos	
  	
  concentrar	
  	
  inicialmente	
  apenas	
  	
  no	
  
desenvolvimento	
  da	
  contagem	
  de	
  frequência	
  	
  para	
  
todas	
  as	
  instruções	
  	
  	
  
•  Considere	
  os	
  seguintes	
  três	
  exemplos:	
  
Análise	
  de	
  Algoritmos	
   11	
  
x = x + 1;	
   for (i = 1; i <= n; i++)
x = x + 1;	
  
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
x = x + 1;	
  
(a)	
   (b)	
   (c)	
  
Complexidade	
  de	
  tempo	
  ou	
  de	
  espaço	
  
Análise	
  de	
  Algoritmos	
  
•  No	
  programa	
  (a)	
  assumimos	
  que	
  a	
  instrução	
  	
  x = x + 1	
  
não	
  está	
  incluída	
  dentro	
  de	
  nenhum	
  laço	
  explícito	
  ou	
  
implícito.	
  Neste	
  caso,	
  a	
  contagem	
  de	
  frequência	
  é	
  1	
  
(um)	
  	
  
•  •	
  No	
  programa	
  (b)	
  a	
  mesma	
  instrução	
  será	
  executada	
  n	
  
vezes	
  
•  No	
  programa	
  (c)	
  n2	
  vezes	
  (assumindo	
  n	
  >	
  1)	
  
•  Os	
  valores	
  1,	
  n	
  e	
  n2	
  são	
  as	
  ordens	
  de	
  grandeza	
  	
  
Análise	
  de	
  Algoritmos	
   12	
  
x = x + 1;	
   for (i = 1; i <= n; i++)
x = x + 1;	
  
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
x = x + 1;	
  
(a)	
   (b)	
   (c)	
  
•  Em	
  geral,	
  na	
  análise	
  de	
  algoritmos	
  são	
  avaliadas	
  
as	
  situações	
  (para	
  uma	
  entrada	
  de	
  tamanho	
  n)	
  da	
  	
  
complexidade	
  do:	
  
–  pior	
  caso	
  do	
  algoritmo	
  (worst	
  case)	
  que	
  é	
  uma	
  função	
  
definida	
  pelo	
  número	
  máximo	
  de	
  passos	
  u6lizados;	
  	
  
–  caso	
  médio	
  do	
  algoritmo	
  (average	
  case)	
  que	
  é	
  uma	
  
função	
  definida	
  pelo	
  número	
  médio	
  de	
  passos	
  
u6lizados;	
  
–  melhor	
  caso	
  do	
  algoritmo	
  (best	
  case)	
  que	
  é	
  uma	
  
função	
  	
  definida	
  pelo	
  número	
  mínimo	
  de	
  passos	
  
u6lizados;	
  
Análise	
  de	
  Algoritmos	
   13	
  
Pior	
  caso,	
  melhor	
  caso,	
  caso	
  médio	
  
•  Na	
  	
  análise	
  	
  de	
  	
  execução,	
  	
  a	
  	
  preocupação	
  	
  
principal	
  	
  consiste	
  	
  na	
  	
  determinação	
  	
  de	
  	
  
ordem	
  	
  de	
  	
  grandeza	
  	
  de	
  um	
  algoritmo	
  (pior	
  
caso)	
  
Análise	
  de	
  Algoritmos	
   14	
  
Pior	
  caso,	
  melhor	
  caso,	
  caso	
  médio	
  
Pior	
  caso,	
  melhor	
  caso,	
  caso	
  médio	
  
•  O	
  número	
  de	
  operações	
  realizadas	
  por	
  um	
  
determinado	
  algoritmo	
  pode	
  depender	
  da	
  
par6cular	
  instância	
  da	
  entrada.	
  Em	
  geral	
  
interessa-­‐nos	
  o	
  pior	
  caso,	
  i.e.,	
  o	
  maior	
  número	
  de	
  
operações	
  usadas	
  para	
  qualquer	
  entrada	
  de	
  
tamanho	
  n.	
  
•  Análises	
  também	
  podem	
  ser	
  feitas	
  para	
  o	
  melhor	
  
caso	
  e	
  o	
  caso	
  médio.	
  Neste	
  úl6mo,	
  supõe-­‐se	
  
conhecida	
  uma	
  certa	
  distribuição	
  da	
  entrada.	
  
Análise	
  de	
  Algoritmos	
   15	
  
Pior	
  caso,	
  melhor	
  caso,	
  caso	
  médio	
  
•  Exemplo:	
  Busca	
  seqüencial	
  de	
  um	
  dado	
  
elemento	
  em	
  um	
  vetor	
  armazenando	
  n	
  
elementos	
  de	
  forma	
  aleatória.	
  Discuta	
  o	
  pior	
  
caso,	
  melhor	
  caso	
  e	
  o	
  caso	
  médio.	
  No	
  caso	
  
médio,	
  suponha	
  a	
  distribuição	
  uniforme	
  e	
  que	
  
o	
  dado	
  buscado	
  está	
  dentro	
  do	
  vetor.	
  
•  Como	
  muda	
  o	
  caso	
  médio	
  se	
  o	
  dado	
  em	
  geral	
  
não	
  está	
  presente?	
  
Análise	
  de	
  Algoritmos	
   16	
  
Análise	
  de	
  Algoritmos	
   17	
  
Pior	
  caso,	
  melhor	
  caso,	
  caso	
  médio	
  
Complexidade	
  de	
  tempo	
  
•  Como	
  exemplo,	
  considere	
  o	
  número	
  de	
  
operações	
  de	
  cada	
  um	
  dos	
  algoritmos	
  que	
  
resolvem	
  o	
  mesmo	
  problema,	
  como	
  função	
  de	
  n:	
  
–  Algoritmo	
  1:	
  f1(n)	
  =	
  2n2	
  +	
  5n	
  operações	
  
–  Algoritmo	
  2:	
  f2(n)	
  =	
  500n	
  +	
  4000	
  operações	
  
•  Dependendo	
  do	
  valor	
  de	
  n,	
  o	
  Algoritmo	
  1	
  pode	
  
requerer	
  mais	
  ou	
  menos	
  operações	
  que	
  o	
  
Algoritmo	
  2.	
  
•  (Compare	
  as	
  duas	
  funções	
  para	
  n	
  =	
  10	
  e	
  
n	
  =	
  100).	
  
Análise	
  de	
  Algoritmos	
   18	
  
Complexidade	
  de	
  Tempo	
  
– Algoritmo	
  1:	
  f1(n)	
  =	
  2n2	
  +	
  5n	
  operações	
  
– Algoritmo	
  2:	
  f2(n)	
  =	
  500n	
  +	
  4000	
  operações	
  
•  Um	
  caso	
  de	
  par6cular	
  interesse	
  é	
  quando	
  n	
  
tem	
  valor	
  muito	
  grande	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ,	
  denominado	
  
comportamento	
  assintó;co.	
  
•  Os	
  termos	
  inferiores	
  e	
  as	
  constantes	
  
mul6plica6vas	
  contribuem	
  pouco	
  na	
  
comparação	
  e	
  podem	
  ser	
  descartados.	
  
Análise	
  de	
  Algoritmos	
   19	
  
n → ∞( )
Complexidade	
  de	
  Tempo	
  
•  O	
  importante	
  é	
  observar	
  que	
  f1(n)	
  cresce	
  com	
  
n2,	
  ao	
  passo	
  que	
  f2(n)	
  cresce	
  com	
  n.	
  Um	
  
crescimento	
  quadrá6co	
  é	
  considerado	
  pior	
  
que	
  um	
  crescimento	
  linear.	
  Assim,	
  vamos	
  
preferir	
  o	
  Algoritmo	
  2	
  ao	
  Algoritmo	
  1.	
  
Análise	
  de	
  Algoritmos	
   20	
  
Complexidade	
  de	
  tempo	
  
•  Para	
  determinar	
  a	
  ordem	
  de	
  grandeza,	
  usa-­‐se	
  	
  
frequentemente	
  as	
  fórmulas	
  como:	
  
•  no	
  segmento	
  do	
  programa	
  (c)	
  anterior	
  a	
  
instrução	
  	
  x = x + 1	
  é	
  executada	
  
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
x = x + 1;
•  Em	
  geral	
  
Análise	
  de	
  Algoritmos	
   21	
  
Exemplo	
  
•  Considere	
  	
  o	
  	
  algoritmo	
  
para	
  cálculo	
  do	
  fatorial	
  	
  
de	
  um	
  número	
  inteiro	
  n	
  	
  
dado	
  a	
  seguir:	
  
•  Cada	
  instrução	
  é	
  contada	
  uma	
  vez	
  	
  
•  O	
  tempo	
  atual	
  tomado	
  por	
  cada	
  	
  instrução	
  
naturalmente	
  poderá	
  variar	
  	
  
•  A	
  instrução	
  for	
  é	
  na	
  verdade	
  uma	
  	
  
combinação	
  de	
  diversas	
  instruções,	
  	
  mas	
  
aqui	
  vamos	
  contá-­‐la	
  como	
  uma	
  	
  
•  Então,	
  a	
  contagem	
  total	
  	
  é	
  2n	
  +	
  1,	
  como	
  é	
  
mostrado	
  na	
  tabela	
  seguinte:	
  
Análise	
  de	
  Algoritmos	
   22	
  
1 int fatorial(int n){
2 int i, produto;
3
4 produto = 1;
5 for(i = 2; i <= n; i++)
6 produto = produto * i;
7 return produto
8 }
Linhas	
   n	
   Frequência	
  
4,	
  5,	
  7	
   0	
   3	
  
4,	
  5,	
  7	
   1	
   3	
  
4,	
  5,	
  6,	
  5,	
  7	
   2	
   3	
  +	
  2	
  
4,	
  5,	
  6,	
  5,	
  6,	
  5,	
  7	
   3	
   3	
  +	
  4	
  
4,	
  5,	
  6,	
  5,	
  6,	
  5,	
  6,	
  5,	
  7	
   4	
   3	
  +	
  6	
  
n	
   3+2(n-­‐1)	
  =	
  2n	
  +	
  1	
  
Frequentemente,	
  isso	
  é	
  declarado	
  como	
  
O(n),	
  ignorando	
  as	
  constantes	
  
Notação	
  “O”	
  
•  Definição:	
  O(g(n))	
  =	
  {f(n)	
  :	
  	
  existem	
  duas	
  
constantes	
  c	
  e	
  n0	
  tais	
  que	
  |f(n)|	
  <=	
  |c*g(n)|,	
  	
  
para	
  todo	
  n	
  >	
  n0}	
  	
  
•  Como,	
  normalmente,	
  é	
  dibcil	
  determinar	
  com	
  	
  
exa6dão	
  f(n),	
  a	
  notação	
  “O”	
  é	
  u6lizada	
  	
  
•  •	
  Assim,	
  a	
  notação	
  “O”	
  fornece	
  um	
  limite	
  
superior	
  para	
  uma	
  função	
  dentro	
  de	
  um	
  fator	
  	
  
constante	
  
Análise	
  de	
  Algoritmos	
   23	
  
Notação	
  “O”	
  
Análise	
  de	
  Algoritmos	
   24	
  
Notação	
  “O”	
  
•  Dado	
  um	
  algoritmo,	
  analisamos	
  a	
  contagem	
  de	
  frequência	
  	
  
para	
  cada	
  instrução	
  e	
  somamos	
  todas	
  
•  Isto	
  normalmente	
  resulta	
  em	
  um	
  polinômio	
  do	
  6po	
  (ck!=	
  0)	
  
P(n)	
  =	
  cknk	
  +	
  ck-­‐1nk-­‐1	
  +	
  ...	
  +	
  c1n	
  +	
  c0	
  
•  Usando	
  a	
  notação	
  “O”	
  
P(n)	
  =	
  cknk	
  +	
  ck-­‐1nk-­‐1	
  +	
  ...	
  +	
  c1n	
  +	
  c0	
  =	
  O(nk)	
  	
  
•  Por	
  outro	
  lado,	
  se	
  qualquer	
  passo	
  for	
  executado	
  2n	
  vezes	
  
ou	
  	
  mais	
  a	
  expressão	
  será	
  (c	
  !=	
  0)	
  	
  
c2n+	
  P(n)	
  =	
  c2n	
  +	
  cknk	
  +	
  ck-­‐1nk-­‐1	
  +	
  ...	
  +	
  c1n	
  +	
  c0	
  =	
  O(2n)	
  	
  
•  Assim,	
  na	
  notação	
  “O”,	
  considera-­‐se	
  apenas	
  o	
  termo	
  de	
  	
  
maior	
  ordem	
  	
  
Análise	
  de	
  Algoritmos	
   25	
  
Notação	
  “O”	
  
Análise	
  de	
  Algoritmos	
   26	
  
Notação	
  “O”	
  
•  Dada	
  uma	
  função	
  g(n),	
  denotamos	
  por	
  O(g(n))	
  
o	
  conjunto	
  das	
  funções:	
  
•  Isto	
  é,	
  para	
  valores	
  de	
  n	
  suficientemente	
  
grandes,	
  f(n)	
  é	
  igual	
  ou	
  menor	
  que	
  g(n).	
  
Análise	
  de	
  Algoritmos	
   27	
  
f n( ):∃ constantes c e n0 tais que 0 ≤ f n( )≤ c⋅g n( ) para n ≥ n0{ }
Notação	
  “O”	
  
•  Como	
  abuso	
  da	
  notação,	
  vamos	
  escrever	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ao	
  invés	
  de	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .	
  
– Algoritmo	
  1:	
  f1(n)	
  =	
  2n2	
  +	
  5n	
  =	
  O(n2)	
  
– Algoritmo	
  2:	
  f2(n)	
  =	
  500n	
  +	
  4000	
  =	
  O(n)	
  
•  Um	
  polinômio	
  de	
  grau	
  d	
  é	
  de	
  ordem	
  O(nd).	
  
Como	
  uma	
  constante	
  pode	
  ser	
  considerada	
  
um	
  polinômio	
  de	
  grau	
  0,	
  então	
  dizemos	
  que	
  
uma	
  constante	
  é	
  O(n0)	
  ou	
  seja,	
  O(1).	
  
Análise	
  de	
  Algoritmos	
   28	
  
f n( )= O g n( )( ) f n( )∈O g n( )( )
Notação	
  “O”	
  
•  A	
  notação	
  
–  O(1)	
  	
  indica	
  	
  que	
  	
  o	
  	
  tempo	
  	
  de	
  	
  computação	
  	
  é	
  constante,	
  	
  
independentemente	
  de	
  qualquer	
  fator	
  
–  O(n)	
  chama-­‐se	
  linear	
  
–  O(n2)	
  chama-­‐se	
  quadrá6ca	
  
–  O(n3)	
  chama-­‐se	
  cúbica	
  
–  O(2n)	
  chama-­‐se	
  exponencial	
  
•  Os	
  	
  tempos	
  	
  de	
  	
  computação	
  	
  O(1),	
  	
  O(log	
  n),	
  	
  O(n),	
  
O(n	
  log	
  n),	
  	
  O(n2),	
  	
  O(n3)	
  	
  e	
  	
  O(2n)	
  	
  são	
  	
  aqueles	
  	
  
comumente	
  	
  encontrados	
  	
  e	
  	
  os	
  	
  quais	
  	
  vamos	
  	
  
trabalhar	
  	
  no	
  	
  decorrer	
  	
  do	
  	
  curso,	
  	
  e	
  	
  log	
  n	
  é,	
  	
  
normalmente,	
  o	
  logaritmo	
  de	
  n	
  na	
  base	
  2.	
  
Análise	
  de	
  Algoritmos	
   29	
  
Notação	
  “O”	
  
•  Possuindo	
  dois	
  algoritmos	
  para	
  desempenhar	
  
a	
  mesma	
  tarefa,	
  sendo	
  o	
  	
  primeiro	
  com	
  um	
  
tempo	
  de	
  computação	
  O(n)	
  	
  e	
  o	
  segundo	
  
O(n2),	
  geralmente	
  considera-­‐se	
  	
  o	
  primeiro	
  
como	
  superior	
  
•  Isso	
  porque	
  à	
  medida	
  que	
  n	
  aumenta,	
  o	
  
tempo	
  de	
  processamento	
  do	
  segundo	
  	
  
algoritmo	
  vai	
  piorar	
  muito	
  comparando	
  com	
  o	
  	
  
tempo	
  do	
  primeiro	
  
Análise	
  de	
  Algoritmos	
   30	
  
Notação	
  “O”	
  
Análise	
  de	
  Algoritmos	
   31	
  
Exercício	
  
Análise	
  de	
  Algoritmos	
   32	
  
Solução	
  
1 y = 0;
2 for (i = N; i >= 0; i--)
3 y = a[i] + x * y;	
  
Análise	
  de	
  Algoritmos	
   33	
  
Solução	
  
1 float horner(int N,
float a[], float x){
2 int i;
3 float y;
4
5 y = 0;
6 for (i = N; i >= 0; i--)
7 y = a[i] + x * y;
8 return y;
9 }	
  
Análise	
  de	
  Algoritmos	
   34	
  
Exercício	
  
Análise	
  de	
  Algoritmos	
   35	
  
Solução	
  An,n	
  e	
  Bn,n	
  
Análise	
  de	
  Algoritmos	
   36	
  
Solução	
  An,m	
  e	
  Bm,r	
  
Análise	
  de	
  Algoritmos	
   37	
  
Exercício	
  
Análise	
  de	
  Algoritmos	
   38	
  
Solução	
  (maior	
  de	
  a)	
  
1 float maior(int n, float a[]){
2 int i;
3 float x;
4
5 x = a[1];
6 for(i = 2; i <= n; i++)
7 if(x < a[i])
8 x = a[i];
9 return x;
10 }	
  
Análise	
  de	
  Algoritmos	
   39	
  
Exercícios	
  
Análise	
  de	
  Algoritmos	
   40	
  
Notação	
  “Ω”	
  
Análise	
  de	
  Algoritmos	
   41	
  
Notação	
  “Θ”	
  
Análise	
  de	
  Algoritmos	
   42	
  
Importância	
  
Análise	
  de	
  Algoritmos	
   43	
  
•  (Verifique	
  se	
  resolveria	
  usar	
  uma	
  máquina	
  
mais	
  rápida	
  onde	
  uma	
  operação	
  leve	
  1ps	
  (pico	
  
seundo)	
  ao	
  invés	
  de	
  1	
  ms:	
  ao	
  invés	
  de	
  10137	
  
séculos,	
  seriam	
  10128	
  séculos	
  :-­‐)	
  
Importância	
  
•  Podemos	
  muitas	
  vezes	
  melhorar	
  o	
  tempo	
  de	
  
execução	
  de	
  um	
  programa	
  o6mizando	
  o	
  
código	
  (ex.	
  usar	
  x	
  +	
  x	
  ao	
  invés	
  de	
  2	
  x,	
  evitar	
  o	
  
re-­‐cálculo	
  de	
  expressões	
  já	
  calculadas,	
  etc.).	
  
•  Entretanto,	
  melhorias	
  muito	
  mais	
  substanciais	
  
podem	
  ser	
  ob6das	
  se	
  usarmos	
  um	
  algoritmo	
  
diferente,	
  com	
  outra	
  complexidade	
  de	
  tempo,	
  
Ex.	
  obter	
  um	
  algoritmo	
  de	
  O(n	
  log	
  n)	
  ao	
  invés	
  
de	
  O(n2).	
  
Análise	
  de	
  Algoritmos	
   44	
  
Cota	
  superior	
  ou	
  limite	
  superior	
  (upper	
  bound)	
  
Análise	
  de	
  Algoritmos	
   45	
  
Cota	
  superior	
  ou	
  limite	
  superior	
  (upper	
  bound)	
  
Análise	
  de	
  Algoritmos	
   46	
  
Analogia	
  com	
  record	
  mundial	
  
Análise	
  de	
  Algoritmos	
   47	
  
Sequência	
  de	
  Fibonacci	
  
Análise	
  de	
  Algoritmos	
   48	
  
Algoritmo	
  1:	
  função	
  fibo1(n)	
  
Análise	
  de	
  Algoritmos	
   49	
  
Algoritmo	
  2:	
  função	
  fibo2(n)	
  
Análise	
  de	
  Algoritmos	
   50	
  
Cota	
  inferior	
  (lower	
  bound)	
  
Análise	
  de	
  Algoritmos	
   51	
  
Cota	
  inferior	
  para	
  mul6plicação	
  de	
  matrizes	
  
Análise	
  de	
  Algoritmos	
   52	
  
Meta:	
  aproximando	
  as	
  duas	
  cotas	
  
Análise	
  de	
  Algoritmos	
   53	
  
Resumo	
  
Análise	
  de	
  Algoritmos	
   54	
  
Análise	
  de	
  Algoritmos	
   55	
  
Análise	
  de	
  Algoritmos	
   56	
  
Obrigado	
  
	
  
Daniel	
  Arndt	
  Alves	
  
daniel.alves@mackenzie.br	
  
Análise	
  de	
  Algoritmos	
   57	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Leinylson Fontinele
 
Introdução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosIntrodução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosElaine Cecília Gatto
 
Estrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e FunçõesEstrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e FunçõesAdriano Teixeira de Souza
 
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane FidelixCris Fidelix
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoDelacyr Ferreira
 
Levantamento Ágil de Requisitos
Levantamento Ágil de RequisitosLevantamento Ágil de Requisitos
Levantamento Ágil de RequisitosPaulo Furtado
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Prova algoritmos
Prova algoritmosProva algoritmos
Prova algoritmospronatecvja
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Gercélia Ramos
 
Algoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoAlgoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoElaine Cecília Gatto
 
Apresentação do professor e disciplina de segurança da Informação
Apresentação do professor e disciplina de segurança da InformaçãoApresentação do professor e disciplina de segurança da Informação
Apresentação do professor e disciplina de segurança da InformaçãoCleber Fonseca
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01thomasdacosta
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas OperacionaisVirgínia
 

Was ist angesagt? (20)

Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)
 
Introdução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosIntrodução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos Básicos
 
Estrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e FunçõesEstrutura de Dados - Procedimentos e Funções
Estrutura de Dados - Procedimentos e Funções
 
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
 
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempoAnálise de Algoritmos - Problemas, instâncias, algoritmos e tempo
Análise de Algoritmos - Problemas, instâncias, algoritmos e tempo
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Levantamento Ágil de Requisitos
Levantamento Ágil de RequisitosLevantamento Ágil de Requisitos
Levantamento Ágil de Requisitos
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Prova algoritmos
Prova algoritmosProva algoritmos
Prova algoritmos
 
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
Pseudocódigo - Estrutura de Repetição (Lógica de Programação)
 
O que é um Banco de Dados Relacional?
O que é um Banco de Dados Relacional?O que é um Banco de Dados Relacional?
O que é um Banco de Dados Relacional?
 
Algoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoAlgoritmos - Lógica de Programação
Algoritmos - Lógica de Programação
 
Apresentação do professor e disciplina de segurança da Informação
Apresentação do professor e disciplina de segurança da InformaçãoApresentação do professor e disciplina de segurança da Informação
Apresentação do professor e disciplina de segurança da Informação
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
Variáveis e portugol
Variáveis e portugolVariáveis e portugol
Variáveis e portugol
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Analise Algoritmos
Analise AlgoritmosAnalise Algoritmos
Analise Algoritmos
 

Andere mochten auch

Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
01 algorimos e complexidade introduç o
01   algorimos e complexidade introduç o01   algorimos e complexidade introduç o
01 algorimos e complexidade introduç oCravid Ekuikui
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Júlio Rocha
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoGustavo Carvalho
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeDelacyr Ferreira
 
Tutorial aed iii 001 - algoritmo de ordenação shellsort
Tutorial aed iii   001 - algoritmo de ordenação shellsortTutorial aed iii   001 - algoritmo de ordenação shellsort
Tutorial aed iii 001 - algoritmo de ordenação shellsortFlávio Freitas
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmosRicardo Bolanho
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesMauricio Volkweis Astiazara
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasDelacyr Ferreira
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresPedro Valente
 
Metodo de Ordenação Selection sort
Metodo de Ordenação Selection sortMetodo de Ordenação Selection sort
Metodo de Ordenação Selection sortLeno Oliveira
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetoresalfredtaddeus
 
Análise de Algoritmos - Indução Finita
Análise de Algoritmos - Indução FinitaAnálise de Algoritmos - Indução Finita
Análise de Algoritmos - Indução FinitaDelacyr Ferreira
 
Java Platform, Enterprise Edition
Java Platform, Enterprise EditionJava Platform, Enterprise Edition
Java Platform, Enterprise EditionDaniel Arndt Alves
 

Andere mochten auch (20)

Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
01 algorimos e complexidade introduç o
01   algorimos e complexidade introduç o01   algorimos e complexidade introduç o
01 algorimos e complexidade introduç o
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Ordenação
OrdenaçãoOrdenação
Ordenação
 
Análise de Algoritmos - Recursividade
Análise de Algoritmos - RecursividadeAnálise de Algoritmos - Recursividade
Análise de Algoritmos - Recursividade
 
Tutorial aed iii 001 - algoritmo de ordenação shellsort
Tutorial aed iii   001 - algoritmo de ordenação shellsortTutorial aed iii   001 - algoritmo de ordenação shellsort
Tutorial aed iii 001 - algoritmo de ordenação shellsort
 
13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 
Ordenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de ChavesOrdenação de Dados por Distribuição de Chaves
Ordenação de Dados por Distribuição de Chaves
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
7 slides
7 slides7 slides
7 slides
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
Metodo de Ordenação Selection sort
Metodo de Ordenação Selection sortMetodo de Ordenação Selection sort
Metodo de Ordenação Selection sort
 
Ordenação por inserção
Ordenação por inserçãoOrdenação por inserção
Ordenação por inserção
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Algoritmos de busca
Algoritmos de buscaAlgoritmos de busca
Algoritmos de busca
 
Análise de Algoritmos - Indução Finita
Análise de Algoritmos - Indução FinitaAnálise de Algoritmos - Indução Finita
Análise de Algoritmos - Indução Finita
 
Hiearquia Window
Hiearquia WindowHiearquia Window
Hiearquia Window
 
Java Platform, Enterprise Edition
Java Platform, Enterprise EditionJava Platform, Enterprise Edition
Java Platform, Enterprise Edition
 
Java RMI
Java RMIJava RMI
Java RMI
 

Ähnlich wie Análise de Algoritmos Mackenzie

Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NAAula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NACloves da Rocha
 
Aula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptAula_07_Complexidade_de_Algoritmos.ppt
Aula_07_Complexidade_de_Algoritmos.pptssuserd654cb1
 
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).pptssuserd654cb1
 
Tutorial aed iii 005 - algoritmo de ordenação quicksort
Tutorial aed iii   005 - algoritmo de ordenação quicksortTutorial aed iii   005 - algoritmo de ordenação quicksort
Tutorial aed iii 005 - algoritmo de ordenação quicksortFlávio Freitas
 
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.pptxPaulo Cardoso
 
SysSorting Professional
SysSorting ProfessionalSysSorting Professional
SysSorting ProfessionalMichel Alves
 
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...Alex Camargo
 
Categorias de Escalonamento e Objetivos do Algorítmo Escalonador
Categorias de Escalonamento e Objetivos do Algorítmo EscalonadorCategorias de Escalonamento e Objetivos do Algorítmo Escalonador
Categorias de Escalonamento e Objetivos do Algorítmo EscalonadorSofia Trindade
 
Algoritmos, Inteligência Artificial e Políticas Públicas
Algoritmos, Inteligência Artificial e Políticas PúblicasAlgoritmos, Inteligência Artificial e Políticas Públicas
Algoritmos, Inteligência Artificial e Políticas PúblicasNathalia Sautchuk Patricio
 
Algoritmos e linguagem pascal
Algoritmos e linguagem pascalAlgoritmos e linguagem pascal
Algoritmos e linguagem pascalangelicamenegassi
 
Algoritmos e linguagem pascal
Algoritmos e linguagem pascalAlgoritmos e linguagem pascal
Algoritmos e linguagem pascalangelicamenegassi
 
Aula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoAula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoEduardo de Lucena Falcão
 
Aula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAislan Rafael
 
Apresentação comsolid 2016
Apresentação comsolid 2016Apresentação comsolid 2016
Apresentação comsolid 2016Laryssa Muniz
 

Ähnlich wie Análise de Algoritmos Mackenzie (20)

Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NAAula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
 
0001
00010001
0001
 
000003 complexidade
000003 complexidade000003 complexidade
000003 complexidade
 
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
 
Tutorial aed iii 005 - algoritmo de ordenação quicksort
Tutorial aed iii   005 - algoritmo de ordenação quicksortTutorial aed iii   005 - algoritmo de ordenação quicksort
Tutorial aed iii 005 - algoritmo de ordenação quicksort
 
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
 
SysSorting Professional
SysSorting ProfessionalSysSorting Professional
SysSorting Professional
 
Cap1
Cap1Cap1
Cap1
 
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...
 
Categorias de Escalonamento e Objetivos do Algorítmo Escalonador
Categorias de Escalonamento e Objetivos do Algorítmo EscalonadorCategorias de Escalonamento e Objetivos do Algorítmo Escalonador
Categorias de Escalonamento e Objetivos do Algorítmo Escalonador
 
Algoritmos, Inteligência Artificial e Políticas Públicas
Algoritmos, Inteligência Artificial e Políticas PúblicasAlgoritmos, Inteligência Artificial e Políticas Públicas
Algoritmos, Inteligência Artificial e Políticas Públicas
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 
Algoritmos e linguagem pascal
Algoritmos e linguagem pascalAlgoritmos e linguagem pascal
Algoritmos e linguagem pascal
 
Algoritmos e linguagem pascal
Algoritmos e linguagem pascalAlgoritmos e linguagem pascal
Algoritmos e linguagem pascal
 
Aula01
Aula01Aula01
Aula01
 
Aula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvidoAula 1 - Estudando o problema a ser resolvido
Aula 1 - Estudando o problema a ser resolvido
 
Aula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e ProgramaçãoAula 01 - Algoritmo e Programação
Aula 01 - Algoritmo e Programação
 
Aula2
Aula2Aula2
Aula2
 
Apresentação comsolid 2016
Apresentação comsolid 2016Apresentação comsolid 2016
Apresentação comsolid 2016
 

Mehr von Daniel Arndt Alves (20)

Sessao
SessaoSessao
Sessao
 
Variaveis Superglobais
Variaveis SuperglobaisVariaveis Superglobais
Variaveis Superglobais
 
Programacao Modular
Programacao ModularProgramacao Modular
Programacao Modular
 
Strings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHPStrings, Arrays e Manipulação Datas em PHP
Strings, Arrays e Manipulação Datas em PHP
 
Introducao ao PHP
Introducao ao PHPIntroducao ao PHP
Introducao ao PHP
 
Arquitetura web
Arquitetura webArquitetura web
Arquitetura web
 
HTML Básico
HTML BásicoHTML Básico
HTML Básico
 
Histórico de Participação do Mackenzie na Maratona de Programação
Histórico de Participação do Mackenzie na Maratona de ProgramaçãoHistórico de Participação do Mackenzie na Maratona de Programação
Histórico de Participação do Mackenzie na Maratona de Programação
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Selection Sort
Selection SortSelection Sort
Selection Sort
 
Insertion Sort
Insertion SortInsertion Sort
Insertion Sort
 
Bubble Sort
Bubble SortBubble Sort
Bubble Sort
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos Distribuidos
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing Listeners
 
Gerenciadores de Layout
Gerenciadores de LayoutGerenciadores de Layout
Gerenciadores de Layout
 
Exercicios - Java Swing
Exercicios - Java SwingExercicios - Java Swing
Exercicios - Java Swing
 
Java AWT
Java AWTJava AWT
Java AWT
 
Java Swing
Java SwingJava Swing
Java Swing
 
Estrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de EnsinoEstrutura de Dados II - Plano de Ensino
Estrutura de Dados II - Plano de Ensino
 
Estrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da DisciplinaEstrutura de Dados II - Apresentação da Disciplina
Estrutura de Dados II - Apresentação da Disciplina
 

Kürzlich hochgeladen

E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...ArianeLima50
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaJúlio Sandes
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasillucasp132400
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
Universidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumUniversidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumPatrícia de Sá Freire, PhD. Eng.
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
Simulado 2 Etapa - 2024 Proximo Passo.pdf
Simulado 2 Etapa  - 2024 Proximo Passo.pdfSimulado 2 Etapa  - 2024 Proximo Passo.pdf
Simulado 2 Etapa - 2024 Proximo Passo.pdfEditoraEnovus
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasRosalina Simão Nunes
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxKtiaOliveira68
 

Kürzlich hochgeladen (20)

E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
Cultura e Literatura indígenas: uma análise do poema “O silêncio”, de Kent Ne...
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma AntigaANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
ANTIGUIDADE CLÁSSICA - Grécia e Roma Antiga
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
Governo Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 BrasilGoverno Provisório Era Vargas 1930-1934 Brasil
Governo Provisório Era Vargas 1930-1934 Brasil
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
Universidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comumUniversidade Empreendedora como uma Plataforma para o Bem comum
Universidade Empreendedora como uma Plataforma para o Bem comum
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
Simulado 2 Etapa - 2024 Proximo Passo.pdf
Simulado 2 Etapa  - 2024 Proximo Passo.pdfSimulado 2 Etapa  - 2024 Proximo Passo.pdf
Simulado 2 Etapa - 2024 Proximo Passo.pdf
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicasCenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
Cenários de Aprendizagem - Estratégia para implementação de práticas pedagógicas
 
Orações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptxOrações subordinadas substantivas (andamento).pptx
Orações subordinadas substantivas (andamento).pptx
 

Análise de Algoritmos Mackenzie

  • 1. Universidade Presbiteriana Mackenzie   Aula  2:  Análise  de  Algoritmos   Prof. Ms. Daniel Arndt Alves Faculdade  de  Computação  e  Informá;ca   Computação e Informática Faculdade de Estrutura  de   Dados  II   Análise  de  Algoritmos   1  Daniel  Arndt  Alves  
  • 2. Obje6vos   •  Por  que  analisar  a  complexidade  dos   algoritmos?   – A  preocupação  com  a  complexidade  dos   algoritmos  é  fundamental  para  projetar   algoritmos  eficientes.   – Podemos  desenvolver  um  algoritmo  e  depois   analisar  a  sua  complexidade  para  verificar  a  sua   eficiência.   – Mas  o  melhor  ainda  é  ter  a  preocupação  de   projetar  algoritmos  eficientes  desde  a  sua   concepção.   Análise  de  Algoritmos   2  
  • 3. Análise  de  Algoritmos   •  A  Análise  de  Algoritmos  é    um  campo  da   Ciência  da    Computação  que  tem  como     obje6vo  o  entendimento  da    complexidade   dos  algoritmos.   •  O  obje6vo  desta  aula  consiste  em  desenvolver   as    habilidades  de  fazer    julgamentos   elementares  da    avaliação  dos  programas.   Análise  de  Algoritmos   3  
  • 4. Análise  de  Algoritmos   •  Existem    muitos    critérios    com    os    quais     podemos    julgar  um  programa,  por  exemplo:     –  Será  que  ele  faz  o  que  se  espera  que  ele  faça?   –  Será  que  ele  funciona  corretamente    de    acordo    com   as    especificações?   –  Existe  documentação  explicando  como  usá-­‐lo  e  como   ele    trabalha?   –  O  código  está  legível?   •  Os  critérios  acima  são  muito  importantes  quando   se  escreve    soSware,    especialmente    para     grandes    sistemas.   Análise  de  Algoritmos   4  
  • 5. Eficiência  ou  Complexidade  de  Algoritmos   •  Para  um  dado  problema,  considere  dois   algoritmos  que  o  resolvem:     – Seja  n  um  parâmetro  que  caracteriza  o  tamanho   da  entrada  do  algoritmo.  Por  exemplo,  ordenar  n   números  ou  mul6plicar  duas  matrizes  quadradas   n  x  n  (cada  uma  com  n2  elementos).     – Como  podemos  comparar  os  dois  algoritmos  para   escolher  o  melhor?   Análise  de  Algoritmos   5  
  • 6. •  Existem    ainda    outros    critérios    diretamente     relacionados  com  o  desempenho:     – tempo  de  computação   – requisitos  de  memória   •  A    avaliação    de    desempenho    pode    ser     liberalmente  dividida  em  2  partes:   1.  es6ma6vas  precedentes  e     2.  testes  posteriores   Análise  de  Algoritmos   6   Complexidade  de  tempo  ou  de  espaço  
  • 7. Complexidade  de  tempo  ou  de  espaço   •  Precisamos  definir  alguma  medida  que  expresse  a   eficiência.  Costuma-­‐se  medir  um  algoritmo  em  termos   de  tempo  de  execução  ou  o  espaço  (de  memória)   u6lizado.   –  Para  o  tempo,  podemos  considerar  o  tempo  absoluto  (em   minutos,  segundos,  etc.).  Medir  o  tempo  absoluto  não  é   interessante  por  depender  fortemente  da  máquina.   –  Em  Análise  de  Algoritmos  conta-­‐se  o  número  de  operações   consideradas  relevantes  realizadas  pelo  algoritmos  e   expressa-­‐se  esse  número  como  uma  função  de  n.  Essas   operações  podem  ser  comparações,  operações   aritmé6cas,  movimento  de  dados,  etc.   Análise  de  Algoritmos   7  
  • 8. •  Considere  inicialmente  uma  es6ma6va  precedente.   Suponha    que    em    algum    ponto    do    seu    programa     encontra-­‐se  a  instrução:   x = x + 1;   •  Gostaríamos  de  determinar  dois  valores  para  esta     instrução:   –  a  duração  de  tempo  para  uma  única  execução;   –  a  quan6dade  de  vezes  que  ela  é  executada.   •  O    produto    desses    valores    será  o    tempo    total    tomado   por  esta  instrução.   •  A  segunda  esta_s6ca  é  chamada  de  contagem  de   frequência  e  varia  de  um  conjunto  de  dados  para    outro.     Análise  de  Algoritmos   8   Complexidade  de  tempo  ou  de  espaço  
  • 9. •  Uma  das  tarefas  mais  dibceis,  em  es6ma6va  de  contagem     de  frequência,  é  a  seleção  adequada  de  amostras  de  dados     •  Será  impossível    determinar    exatamente    quanto    tempo     levará  a    execução    de    qualquer    comando,    a    menos    que     tenhamos  as  informações  seguintes:   –  máquina  onde  a  instrução  será  executada;   –  conjunto  de  instruções  da  linguagem  da  máquina;   –  os  tempos  necessários  para  cada  instrução  da  máquina;   –  a  tradução  que  um  compilador  fará  do  código  fonte  para  a   linguagem    da  máquina.     •  Assim,  é  possível  determinar  esses  valores  escolhendo  uma     máquina  real  e  um  compilador  existente.   Análise  de  Algoritmos   9   Complexidade  de  tempo  ou  de  espaço  
  • 10. •  Outra  alterna6va  consiste  em  definir  um  computador   hipoté6co  (com  um  tempo  de  execução    imaginário),   porém  mantendo  os  tempos    razoavelmente  próximos   dos  equipamentos    existentes,  para  que  os  valores   resultantes  sejam    representa6vos.   •  Nenhuma  dessas  alterna6vas  mostra-­‐se  adequada,     pois  em  ambos  os  casos  o  tempo    determinado     provavelmente  não  se  aplicará  a  muitos     computadores.   •  Também  a  variação  do  compilador  de  uma  máquina   para  outra  representará  um  problema.   Análise  de  Algoritmos   10   Complexidade  de  tempo  ou  de  espaço  
  • 11. •  Todas  essas  considerações  conduzem-­‐nos  a  limitar     nossos    obje6vos    em    uma    análise    a    priori.     •  Vamos    nos    concentrar    inicialmente  apenas    no   desenvolvimento  da  contagem  de  frequência    para   todas  as  instruções       •  Considere  os  seguintes  três  exemplos:   Análise  de  Algoritmos   11   x = x + 1;   for (i = 1; i <= n; i++) x = x + 1;   for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) x = x + 1;   (a)   (b)   (c)   Complexidade  de  tempo  ou  de  espaço  
  • 12. Análise  de  Algoritmos   •  No  programa  (a)  assumimos  que  a  instrução    x = x + 1   não  está  incluída  dentro  de  nenhum  laço  explícito  ou   implícito.  Neste  caso,  a  contagem  de  frequência  é  1   (um)     •  •  No  programa  (b)  a  mesma  instrução  será  executada  n   vezes   •  No  programa  (c)  n2  vezes  (assumindo  n  >  1)   •  Os  valores  1,  n  e  n2  são  as  ordens  de  grandeza     Análise  de  Algoritmos   12   x = x + 1;   for (i = 1; i <= n; i++) x = x + 1;   for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) x = x + 1;   (a)   (b)   (c)  
  • 13. •  Em  geral,  na  análise  de  algoritmos  são  avaliadas   as  situações  (para  uma  entrada  de  tamanho  n)  da     complexidade  do:   –  pior  caso  do  algoritmo  (worst  case)  que  é  uma  função   definida  pelo  número  máximo  de  passos  u6lizados;     –  caso  médio  do  algoritmo  (average  case)  que  é  uma   função  definida  pelo  número  médio  de  passos   u6lizados;   –  melhor  caso  do  algoritmo  (best  case)  que  é  uma   função    definida  pelo  número  mínimo  de  passos   u6lizados;   Análise  de  Algoritmos   13   Pior  caso,  melhor  caso,  caso  médio  
  • 14. •  Na    análise    de    execução,    a    preocupação     principal    consiste    na    determinação    de     ordem    de    grandeza    de  um  algoritmo  (pior   caso)   Análise  de  Algoritmos   14   Pior  caso,  melhor  caso,  caso  médio  
  • 15. Pior  caso,  melhor  caso,  caso  médio   •  O  número  de  operações  realizadas  por  um   determinado  algoritmo  pode  depender  da   par6cular  instância  da  entrada.  Em  geral   interessa-­‐nos  o  pior  caso,  i.e.,  o  maior  número  de   operações  usadas  para  qualquer  entrada  de   tamanho  n.   •  Análises  também  podem  ser  feitas  para  o  melhor   caso  e  o  caso  médio.  Neste  úl6mo,  supõe-­‐se   conhecida  uma  certa  distribuição  da  entrada.   Análise  de  Algoritmos   15  
  • 16. Pior  caso,  melhor  caso,  caso  médio   •  Exemplo:  Busca  seqüencial  de  um  dado   elemento  em  um  vetor  armazenando  n   elementos  de  forma  aleatória.  Discuta  o  pior   caso,  melhor  caso  e  o  caso  médio.  No  caso   médio,  suponha  a  distribuição  uniforme  e  que   o  dado  buscado  está  dentro  do  vetor.   •  Como  muda  o  caso  médio  se  o  dado  em  geral   não  está  presente?   Análise  de  Algoritmos   16  
  • 17. Análise  de  Algoritmos   17   Pior  caso,  melhor  caso,  caso  médio  
  • 18. Complexidade  de  tempo   •  Como  exemplo,  considere  o  número  de   operações  de  cada  um  dos  algoritmos  que   resolvem  o  mesmo  problema,  como  função  de  n:   –  Algoritmo  1:  f1(n)  =  2n2  +  5n  operações   –  Algoritmo  2:  f2(n)  =  500n  +  4000  operações   •  Dependendo  do  valor  de  n,  o  Algoritmo  1  pode   requerer  mais  ou  menos  operações  que  o   Algoritmo  2.   •  (Compare  as  duas  funções  para  n  =  10  e   n  =  100).   Análise  de  Algoritmos   18  
  • 19. Complexidade  de  Tempo   – Algoritmo  1:  f1(n)  =  2n2  +  5n  operações   – Algoritmo  2:  f2(n)  =  500n  +  4000  operações   •  Um  caso  de  par6cular  interesse  é  quando  n   tem  valor  muito  grande                              ,  denominado   comportamento  assintó;co.   •  Os  termos  inferiores  e  as  constantes   mul6plica6vas  contribuem  pouco  na   comparação  e  podem  ser  descartados.   Análise  de  Algoritmos   19   n → ∞( )
  • 20. Complexidade  de  Tempo   •  O  importante  é  observar  que  f1(n)  cresce  com   n2,  ao  passo  que  f2(n)  cresce  com  n.  Um   crescimento  quadrá6co  é  considerado  pior   que  um  crescimento  linear.  Assim,  vamos   preferir  o  Algoritmo  2  ao  Algoritmo  1.   Análise  de  Algoritmos   20  
  • 21. Complexidade  de  tempo   •  Para  determinar  a  ordem  de  grandeza,  usa-­‐se     frequentemente  as  fórmulas  como:   •  no  segmento  do  programa  (c)  anterior  a   instrução    x = x + 1  é  executada   for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) x = x + 1; •  Em  geral   Análise  de  Algoritmos   21  
  • 22. Exemplo   •  Considere    o    algoritmo   para  cálculo  do  fatorial     de  um  número  inteiro  n     dado  a  seguir:   •  Cada  instrução  é  contada  uma  vez     •  O  tempo  atual  tomado  por  cada    instrução   naturalmente  poderá  variar     •  A  instrução  for  é  na  verdade  uma     combinação  de  diversas  instruções,    mas   aqui  vamos  contá-­‐la  como  uma     •  Então,  a  contagem  total    é  2n  +  1,  como  é   mostrado  na  tabela  seguinte:   Análise  de  Algoritmos   22   1 int fatorial(int n){ 2 int i, produto; 3 4 produto = 1; 5 for(i = 2; i <= n; i++) 6 produto = produto * i; 7 return produto 8 } Linhas   n   Frequência   4,  5,  7   0   3   4,  5,  7   1   3   4,  5,  6,  5,  7   2   3  +  2   4,  5,  6,  5,  6,  5,  7   3   3  +  4   4,  5,  6,  5,  6,  5,  6,  5,  7   4   3  +  6   n   3+2(n-­‐1)  =  2n  +  1   Frequentemente,  isso  é  declarado  como   O(n),  ignorando  as  constantes  
  • 23. Notação  “O”   •  Definição:  O(g(n))  =  {f(n)  :    existem  duas   constantes  c  e  n0  tais  que  |f(n)|  <=  |c*g(n)|,     para  todo  n  >  n0}     •  Como,  normalmente,  é  dibcil  determinar  com     exa6dão  f(n),  a  notação  “O”  é  u6lizada     •  •  Assim,  a  notação  “O”  fornece  um  limite   superior  para  uma  função  dentro  de  um  fator     constante   Análise  de  Algoritmos   23  
  • 24. Notação  “O”   Análise  de  Algoritmos   24  
  • 25. Notação  “O”   •  Dado  um  algoritmo,  analisamos  a  contagem  de  frequência     para  cada  instrução  e  somamos  todas   •  Isto  normalmente  resulta  em  um  polinômio  do  6po  (ck!=  0)   P(n)  =  cknk  +  ck-­‐1nk-­‐1  +  ...  +  c1n  +  c0   •  Usando  a  notação  “O”   P(n)  =  cknk  +  ck-­‐1nk-­‐1  +  ...  +  c1n  +  c0  =  O(nk)     •  Por  outro  lado,  se  qualquer  passo  for  executado  2n  vezes   ou    mais  a  expressão  será  (c  !=  0)     c2n+  P(n)  =  c2n  +  cknk  +  ck-­‐1nk-­‐1  +  ...  +  c1n  +  c0  =  O(2n)     •  Assim,  na  notação  “O”,  considera-­‐se  apenas  o  termo  de     maior  ordem     Análise  de  Algoritmos   25  
  • 26. Notação  “O”   Análise  de  Algoritmos   26  
  • 27. Notação  “O”   •  Dada  uma  função  g(n),  denotamos  por  O(g(n))   o  conjunto  das  funções:   •  Isto  é,  para  valores  de  n  suficientemente   grandes,  f(n)  é  igual  ou  menor  que  g(n).   Análise  de  Algoritmos   27   f n( ):∃ constantes c e n0 tais que 0 ≤ f n( )≤ c⋅g n( ) para n ≥ n0{ }
  • 28. Notação  “O”   •  Como  abuso  da  notação,  vamos  escrever                                        ao  invés  de                                      .   – Algoritmo  1:  f1(n)  =  2n2  +  5n  =  O(n2)   – Algoritmo  2:  f2(n)  =  500n  +  4000  =  O(n)   •  Um  polinômio  de  grau  d  é  de  ordem  O(nd).   Como  uma  constante  pode  ser  considerada   um  polinômio  de  grau  0,  então  dizemos  que   uma  constante  é  O(n0)  ou  seja,  O(1).   Análise  de  Algoritmos   28   f n( )= O g n( )( ) f n( )∈O g n( )( )
  • 29. Notação  “O”   •  A  notação   –  O(1)    indica    que    o    tempo    de    computação    é  constante,     independentemente  de  qualquer  fator   –  O(n)  chama-­‐se  linear   –  O(n2)  chama-­‐se  quadrá6ca   –  O(n3)  chama-­‐se  cúbica   –  O(2n)  chama-­‐se  exponencial   •  Os    tempos    de    computação    O(1),    O(log  n),    O(n),   O(n  log  n),    O(n2),    O(n3)    e    O(2n)    são    aqueles     comumente    encontrados    e    os    quais    vamos     trabalhar    no    decorrer    do    curso,    e    log  n  é,     normalmente,  o  logaritmo  de  n  na  base  2.   Análise  de  Algoritmos   29  
  • 30. Notação  “O”   •  Possuindo  dois  algoritmos  para  desempenhar   a  mesma  tarefa,  sendo  o    primeiro  com  um   tempo  de  computação  O(n)    e  o  segundo   O(n2),  geralmente  considera-­‐se    o  primeiro   como  superior   •  Isso  porque  à  medida  que  n  aumenta,  o   tempo  de  processamento  do  segundo     algoritmo  vai  piorar  muito  comparando  com  o     tempo  do  primeiro   Análise  de  Algoritmos   30  
  • 31. Notação  “O”   Análise  de  Algoritmos   31  
  • 32. Exercício   Análise  de  Algoritmos   32  
  • 33. Solução   1 y = 0; 2 for (i = N; i >= 0; i--) 3 y = a[i] + x * y;   Análise  de  Algoritmos   33  
  • 34. Solução   1 float horner(int N, float a[], float x){ 2 int i; 3 float y; 4 5 y = 0; 6 for (i = N; i >= 0; i--) 7 y = a[i] + x * y; 8 return y; 9 }   Análise  de  Algoritmos   34  
  • 35. Exercício   Análise  de  Algoritmos   35  
  • 36. Solução  An,n  e  Bn,n   Análise  de  Algoritmos   36  
  • 37. Solução  An,m  e  Bm,r   Análise  de  Algoritmos   37  
  • 38. Exercício   Análise  de  Algoritmos   38  
  • 39. Solução  (maior  de  a)   1 float maior(int n, float a[]){ 2 int i; 3 float x; 4 5 x = a[1]; 6 for(i = 2; i <= n; i++) 7 if(x < a[i]) 8 x = a[i]; 9 return x; 10 }   Análise  de  Algoritmos   39  
  • 40. Exercícios   Análise  de  Algoritmos   40  
  • 41. Notação  “Ω”   Análise  de  Algoritmos   41  
  • 42. Notação  “Θ”   Análise  de  Algoritmos   42  
  • 43. Importância   Análise  de  Algoritmos   43   •  (Verifique  se  resolveria  usar  uma  máquina   mais  rápida  onde  uma  operação  leve  1ps  (pico   seundo)  ao  invés  de  1  ms:  ao  invés  de  10137   séculos,  seriam  10128  séculos  :-­‐)  
  • 44. Importância   •  Podemos  muitas  vezes  melhorar  o  tempo  de   execução  de  um  programa  o6mizando  o   código  (ex.  usar  x  +  x  ao  invés  de  2  x,  evitar  o   re-­‐cálculo  de  expressões  já  calculadas,  etc.).   •  Entretanto,  melhorias  muito  mais  substanciais   podem  ser  ob6das  se  usarmos  um  algoritmo   diferente,  com  outra  complexidade  de  tempo,   Ex.  obter  um  algoritmo  de  O(n  log  n)  ao  invés   de  O(n2).   Análise  de  Algoritmos   44  
  • 45. Cota  superior  ou  limite  superior  (upper  bound)   Análise  de  Algoritmos   45  
  • 46. Cota  superior  ou  limite  superior  (upper  bound)   Análise  de  Algoritmos   46  
  • 47. Analogia  com  record  mundial   Análise  de  Algoritmos   47  
  • 48. Sequência  de  Fibonacci   Análise  de  Algoritmos   48  
  • 49. Algoritmo  1:  função  fibo1(n)   Análise  de  Algoritmos   49  
  • 50. Algoritmo  2:  função  fibo2(n)   Análise  de  Algoritmos   50  
  • 51. Cota  inferior  (lower  bound)   Análise  de  Algoritmos   51  
  • 52. Cota  inferior  para  mul6plicação  de  matrizes   Análise  de  Algoritmos   52  
  • 53. Meta:  aproximando  as  duas  cotas   Análise  de  Algoritmos   53  
  • 54. Resumo   Análise  de  Algoritmos   54  
  • 57. Obrigado     Daniel  Arndt  Alves   daniel.alves@mackenzie.br   Análise  de  Algoritmos   57