Sabemos realmente o que é um algoritmo?!
São termos cada vez mais populares no quotidiano de cada um, mas sabe realmente o que é um algoritmo e do que precisa para ser processado?
Começarei esse artigo com a seguinte afirmação:
Todos (sim, realmente todos ????) os problemas podem ser resolvidos de maneira simples: com algoritmos modelados e lógica.
Primeiramente, irei introduzir um pilar da forma de raciocínio que possibilitou todo o avanço tecnológico que temos atualmente, o Pensamento Computacional:
- Decomposição
Consiste em dividir problemas complexos em partes menores e mais fáceis de resolver. Por exemplo: se tentar construir um prédio de 20 andares de uma vez só, poderia parecer impossível, correto? Mas se tijolo a tijolo construir o primeiro andar, e depois de vários pequenos passos evoluir para o segundo, até chegar ao vigésimo, seria um problema com uma solução mais visível (ora, exatamente como acontece na prática ????).
É exatamente assim que ocorre com grandes problemas computacionais e algoritmos complexos como o caso do Google e Facebook, que possuem “infinitas” linhas de código, mas que foram construídos passo a passo.
O que é um Algoritmo?
Na disciplina de lógica, há uma regra para prova de teoremas denominada Generalização Universal na qual deduzimos algo para depois criarmos uma regra. Poderíamos passar dias a discutir sobre este artifício, mas tentarei aplicá-la nesse artigo de forma simples. Vejamos o seguinte algoritmo:
Preparação de bacalhau com natas.
Ingredientes |
Preparação |
Batata 500g |
1-Pré-cozinhar o Bacalhau a 200 graus |
Bacalhau 400g |
2-Corte as batatas |
Azeite 100ml |
3-Cozinhar o bacalhau num tacho |
Natas 250ml |
4-Juntar as batatas e acrescentar as natas |
E teremos como resultado uma saborosa refeição ???? (e talvez um peso maior na balança) …
Generalizando a preparação de bacalhau com natas, podemos inferir que um Algoritmo é uma sequência de instruções bem definidas utilizada para resolver problemas. Em resumo: vai receber algo, depois modificar ou realizar um trabalho com o que recebeu, e por fim, devolver uma saída.
Algumas analogias importantes:
- Recebe um ou mais (inputs) entradas, na nossa linguagem ????
Essas entradas não são mais do que os dados que nosso algoritmo vai receber do mundo exterior. No nosso exemplo, os ingredientes (batata, bacalhau, azeite e natas).
- Irá realizar uma sequência de passos: poderá alterar as nossas entradas (inputs), modificá-las, agrupar ou separar dependendo do contexto. Ou seja, seguir uma sequência bem definida de ações. No nosso exemplo, a preparação (1-Pré-aqueça o bacalhau, 2-Corte as batatas, 3-Cozinhar o bacalhau num tacho e 4-Juntar as batatas e acrescentar as natas).
- Irá realizar uma sequência de passos: poderá alterar as nossas entradas (inputs), modificá-las, agrupar ou separar dependendo do contexto. Ou seja, seguir uma sequência bem definida de ações. No nosso exemplo, a preparação (1- Pré-aqueça o bacalhau, 2- Corte as batatas, 3- Cozinhar o bacalhau num tacho e 4- Juntar as batatas e acrescentar as natas).
- Por fim, o nosso algoritmo irá produzir uma saída (output). É o que finalmente se pretende, ou seja, a nossa solução final. No nosso exemplo, é finalmente o bacalhau com natas pronto para ser saboreado ????
O que são testes lógicos?
No mundo real, utilizamos testes lógicos intermitentemente, mas na maioria das vezes de forma inconsciente. Utilizando a nossa preparação de bacalhau com natas novamente, faço-lhe as seguintes perguntas:
- E se não tivéssemos forno para pré-aquecer o bacalhau, como manda o passo 1?
- E se as batatas já estivessem sido cortadas, seria necessário cortá-las novamente como sugere o passo 2?
De maneira geral, testes lógicos são uma (ou mais) pergunta(s) que fazemos e esperamos como resultado apenas dois valores específicos: Verdadeiro ou Falso. Depois desses resultados, normalmente, tomamos uma decisão específica ou um caminho alternativo.
Ao fazermos a pergunta “Temos forno para pré-aquecer o bacalhau?”, teremos dois resultados possíveis, verdadeiro ou falso. Agora, é importante notarmos que dependendo do nosso resultado, tomaríamos uma decisão diferente para a continuação do nosso algoritmo.
Vamos supor que se a nossa resposta fosse verdadeira (temos o forno), então o nosso próximo passo seria obviamente começar o pré-aquecimento. De maneira análoga, se a resposta fosse falsa (ou seja, não possuímos o forno), o nosso caminho seria ramificado para a compra de um, já que em hipótese alguma poderíamos ficar sem jantar o nosso querido bacalhau com natas ????.
Dito isto, os testes lógicos são primordiais para ultrapassarmos nossos obstáculos. Visto que no mundo real temos diversas variáveis que irão determinar qual o caminho que devemos seguir para obtermos o resultado esperado.
Para finalizar, revisitarei a afirmação que fizemos ao começar o artigo: Ao dividirmos o nosso problema (por mais complexo que seja) em uma sequência de instruções mais simples (Algoritmo), e se aliarmos com Testes Lógicos bem estruturados, a solução poderá ser entregue nas nossas mãos.
Agradeço pela atenção até aqui, até o próximo artigo.
Tiago.