Executando verificação de segurança...
3

Big O - A importância e a influência de saber analisar algoritmos.

O objetivo do post não é ensinar Big O Notation.

Importância

Big O é uma notação para analisar os piores casos de algoritmos, e afinal, qual o valor de conhece-la?

Muitos podem pensar que é algo fútil e apenas utilizado para ser cobrado em provas da faculdade e entrevistas de emprego. Entretanto, seu propósito está em estudar a complexidade de tarefas computacionais para aplicar algoritmos mais eficientes para casos apropriados.

Ficou difícil? Vamos facilitar...

Imagine que você tenha uma lista de números, ordenada, da seguinte forma:

1, 10, 24, 37, 61, 89, 121

A partir disso, você deve criar um código para dizer se um número X está ou não na lista. O método que você provavelmente pensou em codificar foi: ir de número em número, desde o início, e comparar cada um com o número X, caso seja igual você retornaria True, caso nenhum seja igual, False.
Essa não é uma aplicação ruim, visto que a lista de números é pequena. Com esse método, você faria no máximo 7 operações (tamanho da lista), já que se o número X não estiver na lista, você terá que ir até o final para verificar tal fato.

Contudo, imagine que agora seja dada uma lista, ordenada, com 10^8 números e você tenha a mesma tarefa. Concorda que serão necessárias 10^8 consultas? AAAAHH, isso é um número extremamente grande.

E se eu dissesse que é possível buscar tal número X, na mesma lista, com menos de 30 operações, seria incrível não é mesmo?

E SIM, É POSSÍVEL!!!

O método que faz isso nessa incrível velocidade é chamado de Binary Search. E agora, consegue ver a importância de saber analisar seus algoritmos? Poder desenvolver códigos e lógicas mais eficientes que retornam o mesmo resultado de forma mais veloz.

Influência

Assim, você pode estar se perguntando, mas isso realmente afeta o meu dia a dia?

COM TODA CERTEZA.

Imagina se a Google não soubesse implementar algoritmos mais eficientes e toda vez que você fosse fazer uma simples pesquisa tivesse que ficar esperando minutos ou até horas para receber o resultado, seria horrível, concorda?

Apesar disso, para criar seu site de portfólio ou projeto pessoal básico, provavelmente você não irá se preocupar com Big O e implementação de métodos extremamente eficientes, visto que a demanda de informações será baixa e isso não afetará o projeto.

Sendo assim, pode-se concluir que uma boa parte dos desenvolvedores acredita que analisar algoritmos seja perda de tempo, visto que tal análise é de fato relevante em projetos de grande escala, os quais, não são a maiora existente. Mas não caia nessa, se você quer se tornar um excelente profissional da área, conhecer métodos mais eficientes é de extrema importância.

Conclusão

Vamos utilizar um pouco da notação Big O?

Na aplicação primordial o máximo de operações era sempre o tamanho exato da lista de números, ou seja, apresenta complexidade:

O(N), em que N é o tamanho da lista.

Já na aplicação otimizada, o máximo de operações cresce de forma logarítmica, apresenta complexidade:

O(log N), em que N é o tamanho da lista.

Dessa forma, podemos ver no seguinte gráfico que o primeiro método apresenta um crescimento das operações computacionais muito mais rápido que do segundo método, ou seja, o primordial demora mais que o otimizado para retornar uma resposta.

O(n) vs O(log n)

Continue estudando

Caso queira saber como analisar suas implementações em função da Big O Notation, indico esses dois vídeos no youtube: Vídeo 01 | Vídeo 02.

Caso queira treinar e aplicar o conceito de Binary Search em outra situação, diferente da apresentada no post, acesse esse post do Programiz e tente resolver esse desafio do LeetCode.

Fonte:
McDowell. Cracking the Coding Interview, 6th Edition. Julho de 2015.
Cormen, et al. Introduction to Algorithms, 3rd Edition. Setembro de 2009.

Carregando publicação patrocinada...
2

Ótimo conteúdo, mas eu tenho a impressão que ao fazer o título como uma pergunta você convida pessoas que iriam te responder a entrar e afasta aqueles que não sabem, sendo que você não está fazendo uma pergunta..?
Enfim, fora esse feedback sobre o título, eu queria dizer que eu passei a usar a notação pra dizer nas minhas dailys que tal implementação em tal tarefa foi da melhor forma possivel. Fora isso não utilizo muito, a notação em sí não é nem de longe tão importante quanto saber qual a complexidade do meu algorítimo (mas se vc sabe qual é, a notação é apenas uma notação mesmo, acaba entendendo os dois)

1

Muito obrigado pelo feedback @joaonevesc, vou tentar organizar melhor minhas ideias para transmitir exatamente aquilo o qual eu esperava com o meu post.

Isso, visto que a minha ideia era exatamente mostrar a importância de entender a complexidade de algoritmos e não somente o Big O. 😀