O QUE SÃO ALGORITMOS? PARTE 1.

Atualizado: 11 de set. de 2021


Tela do VISUALG, linguagem próxima ao portugol

O nome algoritmo vem do nome Al-Khwarizmi que foi um matemático, astrônomo, geógrafo e autor persa. Conhecem-se poucos detalhes de sua vida, basicamente de que ele era um erudito na Casa da Sabedoria de Bagdade.
Estátua de al-Khwãrizmi na universidade Amir Kabir em Tehran.

Ele apresentou a primeira solução sistemática das equações lineares e quadráticas. É considerado o fundador da Álgebra, um crédito que compartilha com Diofante. No século XII, traduções para o latim de sua obra sobre numerais indianos apresentou a notação posicional decimal para o Mundo Ocidental. Revisou a geografia de Ptolomeu e escreveu sobre astronomia e astrologia.

Suas contribuições tiveram um grande impacto sobre a linguagem. "Álgebra" é derivado de al-jabr, uma das duas operações que ele usou para resolver equações quadráticas. O radical de algarismo e algoritmo vem de algoritmi, a forma latina de seu nome. Além do português algarismo, seu nome também deu origem ao espanhol guarismo.

E é dai que tiramos o nome Algoritmo, até soa parecido né? Agora tente falar o nome dele três vezes sem parar.

Al-Khwarizmi, Al-Khwarizmi, Al-Khwarizmi...

Talvez ele apareça do nada com o seu mapa astral pronto.

Um dos primeiros algoritmos criados foi o algoritmo de Euclides é um método simples e eficiente de encontrar o MDC, para quem lembra ou prestou atenção nas aulas de matemática vai lembrar disso. MDC significa máximo divisor comum entre dois números inteiros diferentes de zero. É um dos algoritmos mais antigos, conhecido desde por volta de 300 antes de cristo. Neste algoritmo não exige qualquer fatoração.

O MDC de dois números inteiros é o maior número inteiro que divide ambos sem deixar resto. O algoritmo de Euclides é baseado no princípio de que o MDC não muda se o menor número for subtraído ao maior.

Por exemplo, 21 é o MDC de 252 e 105 (252 = 21 × 12; 105 = 21 × 5); já que 252 − 105 = 147, o MDC de 147 e 105 é também 21. Como o maior dos dois números é reduzido, a repetição deste processo irá gerar sucessivamente números menores, até convergir em zero.

<- Aqui do lado temos um gif que simula o algoritmo de Euclides para os números inteiros 252 e 105. As barras representam múltiplos de 21, o máximo divisor comum (MDC). Em cada passo, o número menor é subtraído ao maior, até um número ser reduzido a zero. O número restante é o MDC.

Mas o que é um algoritmo? É só matemática isso? Mas Vanny, você disse que não precisa de matemática para se trabalhar com Tecnologia da Informação!

Okaaaay! Vamos com calma!

A definição de um algoritmo é: Sequência de instruções ordenada com o objetivo de resolver um problema.

Pense nisso como um manual de instruções para montar um móvel. Você tem todos os passos e até mesmo o requerimento de quais ferramentas usar para chegar na solução do seu “problema”, que é a montagem final do seu móvel.

Você precisará ordenar e encaixar as peças e utilizar ferramentas que vão te ajudar a colocar as coisas nos lugares certos e as vezes você precisa seguir uma ordem, se não tudo dará errado.

Ou não... Talvez dê certo. E vou explicar o porque com a analogia abaixo.

Até mesmo podemos comparar um algoritmo com uma receita de bolo, onde se é passada as informações e você tem que seguir as instruções, por exemplo, um bolo não é bolo se você esquecer de colocar fermento. É um dos principais ingredientes. Os demais, podem até ser substituidos, como por exemplo o ovo, o leite e qualquer outro ingrediente, mas se caso você esquecer o fermento, isso não será um bolo, talvez um brownie.

O mesmo acontece quando se tem dois desenvolvedores diferentes e um problema em comum, se colocarmos o mesmo problema para que ambos o resolvam, nenhum deles vai fazer um código exatamente do mesmo jeito que o outro. Cada um tem um jeito diferente de se resolver um problema, de se raciocinar e isso não quer dizer que ambos estejam errados, apenas soluções diferentes para um problema comum.

Se substituir algo aqui, colocar algo desnecessário ali, faz parte. No fim das contas, o bolo sai. Talvez não com o mesmo sabor, textura ou aparência esperado. O mesmo se aplica a um código, talvez um seja mais rápido e efeciente que o outro.

ALGORITMO x PROGRAMA

Muitas pessoas confundem algoritmo com programa de computador, o que não tem nada a ver uma coisa com a outra. Nós usamos o computador para poder executar o algoritmo. E isso é devido ao fato do computador ser mais rápido e preciso na hora de processar isso do que um ser humano.

Mas antes de passar para um programa que vá compilar, primeiramente, o algoritmo deve ser transcrito para uma linguagem de programação qualquer antes do computador executar. Ou seja, a linguagem de programação não é o algoritmo em si, você traduz seu algoritmo para os comandos da determinada linguagem. O algoritmo é a lógica por trás do seu código e o programa de computador ou computador executa esses “comandos”. Já que recebeu instruções em uma linguagem em que o computador entenda.

Tenho uma outra analogia:

O português, o alemão e o tradutor.


Vocês estão em uma reunião, você não fala alemão e o alemão não fala português. Mas existe uma terceira pessoa que fala ambas as línguas. É como se eu fosse o algoritmo e o alemão o computador e o tradutor seria o compilador. Eu posso estar falando a mesma coisa que o alemão, porém, não conseguimos nos entender por conta da barreira de linguagem e é ai que o tradutor entra em jogo, traduzindo do português para o alemão e assim fazendo com que nós dois entremos em um acordo e todo mundo se entende.

Voltando ao mundo dos algoritmos... esse código escrito numa linguagem de programação deve ser transformado num programa executável num computador, portanto esse programa deverá ser compilado (chamado de processo de validação da sintaxe utilizada) e linkeditado (chamado de processo de montagem do programa executável).

O processo de criação de um programa deveria seguir essa lista (mas nem sempre isso ocorre ou ocorre dessa forma e nessa ordem), vocês vão aprender sobre esse ciclo nas aulas de engenharia de software, então prestem atenção nessas aulas (se caso o seu curso oferece essa matéria).

  1. Análise do problema

  2. Projeto do programa

  3. Implementação

  4. Testes

  5. Verificação

A intenção de criar um programa geralmente é para resolver um problema. E o primeiro passo para se resolver isso é compreendê-lo completamente. O nosso instinto é de tentar resolver a coisa toda de uma vez só o que gera frustrações e desistência, principalmente nas primeiras aulas de algoritmos ou de qualquer outra linguagem de programação.