Artigo desenvolvido juntamente com o @antonio.araujo. Todo desenvolvedor ou um engenheiro de dados fazendo um processo ETL uma hora se perguntou se aquele seu código em determinada linguagem estava sendo eficiente e caso não fosse, como ele poderia melhorar? Na área da programação, há um conceito chamado "complexidade de código", que é utilizado para avaliar a qualidade do software e quantificar numericamente a sua eficiência. Neste artigo, vamos abordar mais detalhadamente esse conceito, de modo que você terá uma resposta clara para a sua dúvida sobre a eficiência do seu código.
O que é a complexidade de código?
Complexidade de código se refere ao grau de dificuldade que um código tem de ser entendido, mantido e modificado. É uma medida da quantidade de recursos necessários para compreender e modificar o código, o que inclui o número de linhas de código, a profundidade de aninhamento das estruturas de controle, o número de loops e condicionais, a complexidade dos algoritmos e estruturas de dados utilizados, entre outros fatores.
Um código complexo pode ser difícil de manter e modificar, aumentando o tempo e o custo necessários para efetuar as alterações e introduzindo mais erros no código. Por outro lado, um código mais simples e organizado tende a ser mais fácil de entender e modificar, melhorando a sua qualidade e a eficiência no desenvolvimento do software. Por isso, a avaliação da complexidade de código é uma prática importante no processo de desenvolvimento de software.
Como funciona?
A complexidade de código pode ser avaliada de diversas formas, mas uma das formas mais comuns é através da análise de métricas de software, que são medidas quantitativas do código que ajudam a avaliar sua qualidade e complexidade. Algumas das métricas que serão tratadas nos exemplos, são elas:
Número de linhas de código: quanto maior o número de linhas de código, maior a complexidade do código.
Número de métodos e funções: quanto maior o número de métodos e funções, maior a complexidade do código.
Número de ciclos (loops) e condicionais: quanto mais loops e condicionais existirem no código, maior a complexidade.
Notação de Big O
A notação "Big O" (O) é a forma mais comum de medir a complexidade de algoritmos, pois ela fornece uma estimativa do tempo de execução em relação ao tamanho da entrada. Portanto, é amplamente utilizada na análise de algoritmos, pois permite comparar a eficiência relativa de diferentes algoritmos de forma padronizada. Além disso, a notação O é fácil de entender e usar, o que a torna a ferramenta mais popular para medir a complexidade de algoritmos. Ao saber a complexidade de um algoritmo, é possível entender como ele se comporta em diferentes tamanhos de entrada e, assim, escolher a melhor solução para um determinado problema.
Exemplos:
- O(1)
Algoritmo com complexidade constante, porque independente do tamanho da entrada o tempo de execução do código é constante. Podemos simplificar e afirma que o código é pecorrido apenas uma vez.
numero = int(input())
if numero > 0:
print(“Numero positivo”)
elif numero < 0:
print(“Numero negativo”)
else:
print(“Numero nulo”)
- O(n)
O(n) é uma medida de complexidade de algoritmos que indica que o tempo de execução do algoritmo é diretamente proporcional ao tamanho da entrada. No algoritmo abaixo orre isso, pois temos um array de tamanho 4 e utilizamos o for, com n repetições, para pecorrer ele retornando cada elemento, ou seja, pecorremos o laço 4 vezes.
valor = [10,32,40,99]
for index in range(0, len(valor)):
print(valor[index])
Conclusão
Algoritmos são sequências de instruções que resolvem problemas específicos. Eles são fundamentais para a programação de computadores, pois permitem que tarefas complexas sejam automatizadas e executadas de maneira eficiente. A complexidade de código, por sua vez, é uma medida da eficiência de um algoritmo em termos de tempo e espaço de execução. Saber a complexidade de um algoritmo é essencial para escolher a melhor solução para um determinado problema, otimizar o desempenho do software e evitar problemas de desempenho na execução do código. Em resumo, algoritmos são essenciais e a complexidade de código é uma métrica importante para garantir que os programas sejam eficientes e executem bem.