DEV Community

Cover image for Um bom algoritmo e sua importancia para um código mais ágil
Erik Ferreira de Lima
Erik Ferreira de Lima

Posted on

Um bom algoritmo e sua importancia para um código mais ágil

Há um tempo tenho me deparado com alguns problemas de código que tem me tirado de certa forma o sono, que é a performance e como alcançá-la e aplicá-la em cada objetivo da melhor forma possível dentro do projeto ou problema que preciso solucionar.

Então resolvi estudar mais a fundo a construção de algoritmos melhores que fosse menos complexo e que trouxesse uma execução mais fluida para a solução na qual estava trabalhando.

Mas antes, o que é um algoritmo em si?

Um algoritmo é uma lista de etapas que explicam como fazer alguma coisa. Por exemplo, um algoritmo pode explicar como cozinhar um bolo, como resolver uma equação matemática ou como encontrar o caminho mais curto entre duas cidades em um mapa. Algoritmos são usados em computadores para fazer tarefas específicas de forma automatizada. Por exemplo, um algoritmo pode ser usado para organizar uma lista de nomes em ordem alfabética ou para fazer uma busca por um termo específico em uma base de dados. Algoritmos são importantes porque nos ajudam a resolver problemas de forma rápida e precisa.

Considerando que se for mal otimizada ou mal construída essa receita pode ocasionar em um processo mais demorado ou até desastroso por isso a importância de entender a fundo como construir um algoritmo que funcione da melhor forma possível em cada situação.

Aí vem o estudo “A complexidade de algoritmos”

Imagine que você tem que montar um quebra-cabeça. Alguns quebra-cabeças são muito simples e só têm algumas peças, então eles são fáceis de montar. Outros quebra-cabeças são muito complicados e têm milhares de peças, então eles podem levar muito tempo para serem montados. Isso é parecido com a complexidade de um algoritmo.

Alguns algoritmos são simples e só precisam de poucas etapas para rodar, enquanto outros são complicados e precisam de muitas etapas. Algoritmos mais complexos podem levar mais tempo para rodar, assim como montar um quebra-cabeça complexo pode levar muito tempo. Além disso, assim como você precisa de espaço para colocar todas as peças de um quebra-cabeça enquanto a monta, o computador precisa de espaço na memória para armazenar os dados que o algoritmo está usando enquanto ele roda. Por isso, é importante tentar criar algoritmos que tenham a menor complexidade possível, para que eles rodem rapidamente e usem pouco espaço na memória.

Um bom exemplo é:

Imagine que você tem uma lista de números e precisa encontrar o número mais alto na lista. Você poderia escrever um algoritmo simples que fizesse isso da seguinte maneira:

Defina uma variável chamada “maior número” e inicialize-a com o primeiro número da lista.
Repita os seguintes passos para cada número restante na lista:
Se o número atual for maior do que a variável “maior número”, atualize “maior número” para ser esse número atual.
Quando terminar de ver todos os números, a variável “maior número” será o número mais alto da lista.
Esse é um algoritmo de ordenação e é simples porque só precisa de 4 etapas para encontrar o número mais alto e para essa situação funciona muito bem pois há poucos números para repetirmos e ordenar até obter o resultado.

Assim como há diversas receitas diferentes para diversos gostos diferentes, não é diferente com os algoritmos computacionais,

Agora, imagine que você precisa fazer a mesma coisa, mas a lista tem milhões de números. Se você usar o mesmo algoritmo, ele vai levar muito tempo para ver todos os números e encontrar o mais alto. Para resolver esse problema, você poderia escrever um algoritmo mais complexo que usa uma técnica chamada “divisão e conquista” para encontrar o número mais alto mais rapidamente.

Esse algoritmo seria mais complexo porque teria mais etapas, mas rodaria mais rapidamente do que o algoritmo simples, o que implica que a performance do algoritmo depende do caso em que ele é aplicado. O algoritmo mais simples utilizaria menos memória, porém levaria o dobro ou o triplo do tempo para realizar a mesma pesquisa, o que colocando na balança tornaria a tarefa desnecessariamente demorada.

A complexidade de um algoritmo é importante porque ela determina quanto tempo e espaço o algoritmo precisa para rodar. Algoritmos mais complexos podem levar mais tempo para rodar e precisar de mais espaço na memória, o que pode ser um problema em algumas situações. Por isso, é importante tentar criar algoritmos que tenham a complexidade adequada aquela situação.

Vou deixar alguns links abaixo para caso queiram estudar um pouco mais sobre esse assunto super importante na área do desenvolvimento em grande escala.

Neste link você consegue visualizar, compreender e aprender os algoritmos e estruturas de dados;
Visualgo

Neste há um chamado algoritmos de ordenação:
TreinaWeb

Top comments (0)