1.6. Por Que Estudar Algoritmos?¶
Cientistas da computação aprendem por experiência. Nós aprendemos vendo os outros resolverem problemas e resolvendo problemas por nós mesmos. Estar exposto a diferentes técnicas de resolução de problemas e ver como diferentes algoritmos são projetados nos ajuda a atacar o próximo problema desafiador que nos são dados. Considerando vários algoritmos diferentes, podemos começar a desenvolver o reconhecimento de padrões para que, da próxima vez que um problema semelhante surgir, sermos mais capazes de resolvê-lo.
Algoritmos são frequentemente bem diferentes uns dos outros. Considere o
exemplo do sqrt
visto anteriormente. É inteiramente possível que existam
muitas maneiras diferentes de implementar os detalhes para calcular a função
raiz quadrada. Um algoritmo pode usar muito menos recursos que outro. Um
algoritmo pode levar 10 vezes mais tempo para retornar o resultado que outro.
Gostaríamos de ter alguma maneira de comparar essas duas soluções. Mesmo que os
dois produzam um resultado correto, um talvez seja “melhor” que o outro. Nós podemos
sugerir que um é mais eficiente ou que um simplesmente funciona mais rápido ou
usa menos memória. Ao estudarmos algoritmos, podemos aprender técnicas de análise
que nos permitem comparar e contrastar soluções baseadas unicamente
em suas próprias características, não as características do programa ou
computador utilizado para implementá-los.
Na pior das hipóteses, podemos ter um problema intratável, o que significa que não há algoritmo que possa resolver o problema em um quantidade de tempo realista. É importante ser capaz de distinguir entre aqueles problemas que têm soluções, aqueles que não têm, e aqueles onde existem soluções mas exigem muito tempo ou outros recursos para trabalhar razoavelmente.
Com frequência haverão conflitos que nós precisaremos identificar e resolver. Como cientistas da computação, além de nossa capacidade de resolver problemas, também precisaremos conhecer e entender técnicas para avaliação de soluções. Ao final, sempre há muitas maneiras de resolver um problema. Encontrar uma solução e então decidir se ela é boa são tarefas que vamos fazer várias e várias vezes.