Os algoritmos estão por toda parte, envolvidos em cada aspecto da Ciência da Computação. Eles também são usados em uma ampla gama de campos, como recomendações, social media, medicina, psicologia, transporte… e a lista vai longe!

Qualquer coisa que fazemos pode ser dividido em pequenos passos e essa é a essência de um algoritmo. Imagine que você acordar de manhã para ir ao trabalho e você não consegue se lembrar onde estão as chaves do carro. Como você as encontraria? Uma abordagem pode ser aplicar um algoritmo, que é um procedimento lógico passo-a-passo. Primeiro, procuramos em lugares onde costumamos colocá-los. Tentamos nos lembrar da última vez que as usou. Verifica o primeiro quarto onde entrou quando chegou em casa. Cedo ou tarde, seguindo os passos, você eventualmente encontraria as chaves do carro. Um algoritmo é uma sequência de instruções que garantem uma determinada conclusão da tarefa. Nós, como seres humanos, aplicamos algoritmos para tomar ações em todos os aspectos de nossas vidas.

Assim, conhecer algoritmos pode ser um recurso para melhorar sua vida ou mesmo a vida das outras pessoas. Você pode, por exemplo, transformar algo que leva muito tempo para ser concluído em um algoritmo que o auxilia no processo de tomada de decisão. Você pode criar um algoritmo para priorizar suas tarefas ao invés de usar uma “to-do” list. Pode criar um algoritmo, por exemplo, para prever o melhor momento de visitar uma cidade. Pode criar um algoritmo para obter sugestões de quais filmes assistir de acordo com suas preferências e dados históricos. Não há limite para o que imaginamos e podemos tornar real aplicando algoritmos!

Mas como ganhar esse conjunto de habilidades, e fazer a diferença com os algoritmos? Primeiro, vamos analisar as características de um algoritmo.

Quais são as características de um algoritmo?

Deve ser finito. Se seu algoritmo nunca para de tentar resolver o problema foi projetado para resolver, então é inútil;

Deve ter instruções bem definidas. Cada passo do algoritmo precisa ser definido com precisão; as instruções devem ser inequivocamente especificadas para cada caso;

Deve ser eficaz. O algoritmo deve resolver o problema que foi projetado para resolver. E deve ser possível demonstrar que o algoritmo converge com apenas um papel e um lápis.

Quais são os passos para aprender a codificar algoritmos?

  1. Desenvolva sua lógica de programação. Aqui vai uma lista sobre como melhorá-la.  
  2. Comece com uma linguagem de programação com a qual sinta-se confortável (se você não tiver nenhuma específica em mente, Python é recomendável – por ser considerada a mais fácil e simples de entender).
  3. Aprenda estruturas de dados. Comece com os mais básicos: strings, vetores, listas, arrays, mapas. Em seguida, fila (queue) e pilha (stack). Conclua com os mais avançados: árvores (trees), grafos (graphs) e tries.
  4. Pratique codificação de estruturas de dados. Aqui vai um bom recurso para estudo.
  5. Aprenda algoritmos simples primeiro e só então evolua para os algoritmos mais comuns. Certifique-se de compreender cada passo e não se sinta frustrado ou lento no processo. Lembre-se: não importa o quão lentamente você siga, contanto que não pare! Você pode pesquisar por vídeos também, pois facilitam a assimilação.
  6. Comece a lidar com problemas (por exemplo, no HackerRank, existem algoritmos engraçados e desafiadores). Você deve desenvolver uma estratégia de resolução de problemas, por exemplo, o método proposto por Gayle Laakmann McDowell

    Outros conselhos úteis:

    Faça perguntas. “Por que” e “o que” são realmente importantes para entender o básico de qualquer coisa! Quando você questiona a escolha, melhor irá memorizar a resposta e mais à fundo irá na fonte da informação.

    Para manter-se motivado e em dia com a curva de aprendizado, crie diariamente um algoritmo útil simples depois de aprender o básico. A realização alimenta a nossa energia.

    Tente resolver o problema sozinho primeiro, manualmente. Pegue um papel e comece a escrever os passos. Tome o tempo que for necessário ao invés de ir em busca de uma solução rápida.

    Mesmo se você descobrir a solução, não diga a si mesmo: “Está tudo bem agora, não há necessidade de implementá-lo, eu sei como ele funciona.” É um grande truque, na verdade, porque você nunca sabe o que perdeu, se não tentar e testar com corner cases

    Seja paciente. Se você começar a se sentir frustrado com um problema, deixe-o de lado e vá fazer algo que não lhe parece estressante. Então, somente após aliviar o stress, retome a tarefa.


Sugestões de livros

The Algorithm Design Manual

The Pragmatic Programmer

Cracking the Coding Interview

Github

mission-peace

Sites

Topcoder: Uma explicação sobre estruturas de dados e algoritmos.

ideserve: Uma explicação visual de alguns problemas de algoritmos.


YouTube

Tushar Roy: Uma explicação de alguns algoritmos avançados.


Fonte: DZone.com