11ª Semana de Sistemas de Informação 4/10/2011 [email_address]
<ul><li>“ Pra quê perder tempo estudando um algoritmo adequado? Se compilar está de bom tamanho.” </li></ul><ul><li>“ Não ...
<ul><li>Cinco algoritmos semelhantes </li></ul><ul><li>Encontrar números primos </li></ul><ul><li>Comparar o desempenho </...
<ul><li>Um número N pertencente aos naturais é primo se possuir somente dois divisores: 1 e N. </li></ul>
 
<ul><li>int main(){ </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 50000000;  n <= 60000000;  n++){...
 
<ul><li>int main(){ </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 5000000 1 ;  n <= 60000000;  n =...
 
<ul><li>int main(){ </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 50000001; n <= 60000000; n = n +...
 
 
<ul><li>int main() { </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 50000001; n <= 60000001; n = n ...
 
<ul><li>“ Todo número composto N   possui algum  divisor primo menor ou igual a raiz quadrada de N ” . </li></ul><ul><li>B...
<ul><li>int main() { </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 50000001; n <= 60000001; n = n ...
 
<ul><li>O 5º algoritmo é cerca de 620 vezes mais eficiente do que o 1º </li></ul>Primos encontrados* Quantidade de divisõe...
 
<ul><li>É uma falácia sem vergonha! </li></ul><ul><li>SEM VERGONHA! </li></ul><ul><li>Um Hardware poderoso NÃO COMPENSA um...
Próximos SlideShares
Carregando em…5
×

Computadores modernos compensam algoritmos ineficientes?

711 visualizações

Publicada em

Palestra ministrada na "11ª Semana de Sistemas de Informação" na Faculdade 7 de Setembro. Questionei, por meio de 5 algoritmos que encontram números primos em um certo intervalo, o mito "computadores modernos compensam algoritmos ineficientes", propagado por muitos programadores iniciantes.

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
711
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Computadores modernos compensam algoritmos ineficientes?

  1. 1. 11ª Semana de Sistemas de Informação 4/10/2011 [email_address]
  2. 2. <ul><li>“ Pra quê perder tempo estudando um algoritmo adequado? Se compilar está de bom tamanho.” </li></ul><ul><li>“ Não há necessidade de se fazer um código eficiente. Os processadores são poderosos hoje em dia mesmo!” </li></ul><ul><li>“ Pra quê se preocupar com uso de memória se hoje em dia é algo que temos de sobra?” </li></ul>
  3. 3. <ul><li>Cinco algoritmos semelhantes </li></ul><ul><li>Encontrar números primos </li></ul><ul><li>Comparar o desempenho </li></ul>
  4. 4. <ul><li>Um número N pertencente aos naturais é primo se possuir somente dois divisores: 1 e N. </li></ul>
  5. 6. <ul><li>int main(){ </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 50000000; n <= 60000000; n++){ </li></ul><ul><li>for (i = 2; i < n; i++){ </li></ul><ul><li>if (n % i == 0){ </li></ul><ul><li>divisores++; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>if (divisores == 0){ </li></ul><ul><li>cout << n << &quot;t&quot;; </li></ul><ul><li>} </li></ul><ul><li>divisores = 0; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  6. 8. <ul><li>int main(){ </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 5000000 1 ; n <= 60000000; n = n + 2 ){ </li></ul><ul><li>for (i = 3 ; i < n; i = i + 2 ){ </li></ul><ul><li>if (n % i == 0){ </li></ul><ul><li>divisores++; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>if (divisores == 0){ </li></ul><ul><li>cout << n << &quot;t&quot;; </li></ul><ul><li>} </li></ul><ul><li>divisores = 0; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  7. 10. <ul><li>int main(){ </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 50000001; n <= 60000000; n = n + 2){ </li></ul><ul><li>for (i = 3; i < n; i = i + 2){ </li></ul><ul><li>if (n % i == 0){ </li></ul><ul><li>divisores++; </li></ul><ul><li>break; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>if (divisores == 0){ </li></ul><ul><li>cout << n << &quot;t&quot;; </li></ul><ul><li>} </li></ul><ul><li>divisores = 0; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  8. 13. <ul><li>int main() { </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 50000001; n <= 60000001; n = n + 2) { </li></ul><ul><li>for (i = 3; i <= n/2 ; i = i + 2) { </li></ul><ul><li>if (n % i == 0) { </li></ul><ul><li>divisores++; </li></ul><ul><li>break; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>if (divisores == 0) { </li></ul><ul><li>cout << n << &quot;t&quot;; </li></ul><ul><li>} </li></ul><ul><li>divisores = 0; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  9. 15. <ul><li>“ Todo número composto N possui algum divisor primo menor ou igual a raiz quadrada de N ” . </li></ul><ul><li>Basta testar até a raiz quadrara de N para saber se N é um número é primo. </li></ul>
  10. 16. <ul><li>int main() { </li></ul><ul><li>int n, i, divisores = 0; </li></ul><ul><li>for (n = 50000001; n <= 60000001; n = n + 2){ </li></ul><ul><li>for (i = 3; i <= sqrt(n) ; i = i + 2) { </li></ul><ul><li>if (n % i == 0) { </li></ul><ul><li>divisores++; </li></ul><ul><li>break; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>if (divisores == 0) { </li></ul><ul><li>cout << n << &quot;t&quot;; </li></ul><ul><li>} </li></ul><ul><li>divisores = 0; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  11. 18. <ul><li>O 5º algoritmo é cerca de 620 vezes mais eficiente do que o 1º </li></ul>Primos encontrados* Quantidade de divisões realizadas 1º 2° 3° 4° 5° 1 19998 4999 2501 1250 35 2 50025 12505 5007 2504 72 3 60042 15009 7511 3755 106 4 110187 27544 10038 5027 158 5 120228 30054 12548 6281 192 *No intervalo (5000;6000]
  12. 20. <ul><li>É uma falácia sem vergonha! </li></ul><ul><li>SEM VERGONHA! </li></ul><ul><li>Um Hardware poderoso NÃO COMPENSA um código ineficiente. </li></ul>

×