From 421390ade8daed86768f894c6d22a406ec0a9e3b Mon Sep 17 00:00:00 2001 From: Eduardo Klosowski Date: Mon, 17 Oct 2022 15:24:12 -0300 Subject: [PATCH] =?UTF-8?q?Adiciona=20artigo:=20Quest=C3=B5es=20para=20est?= =?UTF-8?q?udo=20de=20algoritmos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fatorial.png | Bin 0 -> 9421 bytes .../fibonacci.png | Bin 0 -> 8644 bytes content/questoes-para-estudo-de-algoritmos.md | 82 ++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 content/images/eduardoklosowski/questoes-para-estudo-de-algoritmos/fatorial.png create mode 100644 content/images/eduardoklosowski/questoes-para-estudo-de-algoritmos/fibonacci.png create mode 100644 content/questoes-para-estudo-de-algoritmos.md diff --git a/content/images/eduardoklosowski/questoes-para-estudo-de-algoritmos/fatorial.png b/content/images/eduardoklosowski/questoes-para-estudo-de-algoritmos/fatorial.png new file mode 100644 index 0000000000000000000000000000000000000000..b999023c792e990239164b36c7bd454e3f71f0d0 GIT binary patch literal 9421 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 D-1iLD literal 0 HcmV?d00001 diff --git a/content/images/eduardoklosowski/questoes-para-estudo-de-algoritmos/fibonacci.png b/content/images/eduardoklosowski/questoes-para-estudo-de-algoritmos/fibonacci.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa54d20faf1f3a6cc5bc3e83621e7f2b0cfddfc GIT binary patch literal 8644 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 P^e?6)uO?RwHVOVO*}aL- literal 0 HcmV?d00001 diff --git a/content/questoes-para-estudo-de-algoritmos.md b/content/questoes-para-estudo-de-algoritmos.md new file mode 100644 index 000000000..615920d0a --- /dev/null +++ b/content/questoes-para-estudo-de-algoritmos.md @@ -0,0 +1,82 @@ +Title: Questões para estudo de algoritmos +Slug: questoes-para-estudo-de-algoritmos +Date: 2022-10-17 15:00 +Category: Python +Tags: python, performance +Author: Eduardo Klosowski +Email: eduardo_klosowski@yahoo.com +Github: eduardoklosowski +Twitter: eduklosowski +Site: https://dev.to/eduardoklosowski +About_author: Mestre em computação aplicada, programador backend com conhecimento de DevOps + +Recentemente li o texto do Maycon Alves, ["3 algoritmos para você sua lógica"](https://mayconbalves.com.br/3-algoritmos-para-voc%C3%AA-sua-l%C3%B3gica/), onde são apresentados 3 problemas para treinar a lógica e escrita de algoritmos: [cálculo de fatorial](https://pt.wikipedia.org/wiki/Fatorial), [identificar se um número é primo](https://pt.wikipedia.org/wiki/N%C3%BAmero_primo), e [calcular os valores da sequência de Fibonacci](https://pt.wikipedia.org/wiki/Sequ%C3%AAncia_de_Fibonacci). São problemas interessantes, e após resolvê-los, pode-se fazer outras perguntas que levam a um entendimento mais profundo desses algoritmos. Eu recomendo que leiam o texto do Maycon primeiro e tentem implementar uma solução para esses problemas propostos, e com isso feito, vamos discutir um pouco sobre eles. + +## Analisando as soluções + +No texto do Maycon, tem uma dica sobre o problema da sequência de Fibonacci, onde é dito que ele pode ser resolvido usando recursividade ou *loops*. Vamos analisar essas opções. + +Uma solução recursiva pode ser implementada como a baixo. O código dessa solução é simples e se aproxima bastante da descrição matemática do problema. + +```python +def fibonacci(n): + if n <= 1: + return n + return fibonacci(n - 2) + fibonacci(n - 1) +``` + +Enquanto uma solução iterativa (com *loop*) pode ser um pouco mais complicada de se ler: + +```python +def fibonacci(n): + a = 0 + b = 1 + for i in range(n - 1): + a, b = b, a + b + return b +``` + +Essas mesmas técnicas podem ser utilizadas para resolver o cálculo do fatorial. Onde uma implementação recursiva e outra iterativa podem ser vistas a baixo: + +```python +def fatorial(n): + if n <= 1: + return 1 + return n * fatorial(n - 1) +``` + +```python +def fatorial(n): + valor = 0 + for i in range(1, n + 1): + valor *= i + return valor +``` + +Com essas soluções implementadas, vem uma pergunta: Existe alguma diferença entre elas, além da diferença de como isso está expresso no código? Um primeiro teste que pode ser feito é de desempenho visando observar quanto tempo cada implementação leva para calcular a resposta. Os testes foram executados em um notebook com processador Intel Core i7-6500U CPU @ 2.50GHz, memória RAM DDR4 2133MHz, no Python 3.9.2 do Debian 11, desativamente o *garbage collector* do Python durante a execução das funções para ter um resultado com menos variação, apresentados como uma média de 10 execuções ([código utilizado](https://github.com/eduardoklosowski/blog/tree/main/content/2022-10-17-questoes-para-estudo-de-algoritmos)). + +O gráfico a baixo mostra o tempo de execução das implementações que calculam os valores da sequência de Fibonacci, onde é possível observar que a implementação iterativa mantém uma linearidade do tempo conforme vai se pedindo números maiores da sequência, diferente da implementação recursiva, que a cada valor quase dobra o tempo de execução. + +![Gráfico do tempo de execução Fibonacci](images/eduardoklosowski/questoes-para-estudo-de-algoritmos/fibonacci.png) + +E a baixo pode-se observar o gráfico para as implementações que calculam o fatorial, que devido aos tempos serem mais baixos, possui uma variação um pouco maior, e é possível observar uma tendência de reta para as duas implementações, com a implementação recursiva tendo um ângulo um pouco mais íngreme, implicando em um algoritmo mais lento. + +![Gráfico do tempo de execução fatorial](images/eduardoklosowski/questoes-para-estudo-de-algoritmos/fatorial.png) + +A partir desses dois gráficos algumas perguntas podem ser feitas: Por que a implementação recursiva do Fibonacci apresentou uma curva que se aproxima de uma exponencial e não de uma reta como as demais? Qual a diferença para a implementação recursiva do fatorial que explicar isso? Implementações recursivas são sempre piores que as implementações iterativas, ou existem casos em elas superem ou se equivalem as iterativas? + +Saindo um pouco desses gráficos, outras questões podem ser levantadas, como: Existe mais algum aspecto ou característica além do tempo de execução (e facilidade de leitura do código) para a escolha entre uma implementação ou outra? Considerando que essas funções vão rodar em um servidor, existe alguma coisa que possa ser feita para melhorar a performance dessas funções, como reaproveitar resultados já calculados para se calcular novos resultados? Como isso poderia ser feito? Quais são as desvantagens dessa abordagem? + +Olhando para o problema de verificar se um número é primo, existe o [crivo de Eratóstenes](https://pt.wikipedia.org/wiki/Crivo_de_Erat%C3%B3stenes), ele é uma implementação eficiente? Existem casos em que ele pode ser uma boa solução ou não? O exemplo a baixo (retirado da Wikipédia) mostra o processo para encontrar todos os números primos até 120, existe alguma forma de adaptá-lo para executar diversas vezes reaproveitando o que já foi calculado, como sempre retornar o próximo número primo? + +![Exemplo do crivo de Eratóstenes](https://upload.wikimedia.org/wikipedia/commons/8/8c/New_Animation_Sieve_of_Eratosthenes.gif) + +## Considerações + +Se você nunca se deparou com perguntas desse tipo, seja bem-vindo a área de análise de algoritmos, onde após se ter uma solução, busca-se analisar e descrever o comportamento do algoritmo, e até a busca de algoritmos mais eficientes. E trazendo para o dia a dia de um desenvolvedor, essas questões podem ser a resposta do motivo do código funcionar muito bem no computador de quem desenvolveu, mas demorar muito ou apresentar problemas para rodar no servidor de produção, ou com o tempo (e crescimento do volume de dados) começar a dar problemas. + +Nesse artigo eu apenas levantei as perguntas, deixo que cada um busque as respostas, que existem. Sintam-se livres para me procurar para discutir alguma questão ou orientações para encontrar as respostas, seja nos comentários do texto no [dev.to](https://dev.to/eduardoklosowski/questoes-para-estudo-de-algoritmos-5dab) ou no [Twitter](https://twitter.com/eduklosowski). + +--- + +Esse artigo foi publicado originalmente no [meu blog](https://eduardoklosowski.github.io/blog/), passe por lá, ou siga-me no [DEV](https://dev.to/eduardoklosowski) para ver mais artigos que eu escrevi.