Programação · conceitos · fundamentos
O que é um algoritmo?
É uma das palavras mais usadas na tecnologia — « o algoritmo decide », « um algoritmo mais rápido », « o feed algorítmico » — e uma das menos explicadas com rigor. Um algoritmo é uma ideia simples e fundamental que está sob toda a informática. Este guia explica o que é um algoritmo, as suas propriedades chave, exemplos retirados da vida quotidiana e do código, porque é que a eficiência importa e em que difere de um programa.
A definição curta
Um algoritmo é um procedimento finito, passo a passo, para resolver um problema ou produzir uma saída a partir de uma entrada. Dê-lhe a mesma entrada e siga os passos exatamente, e produz o mesmo resultado de cada vez. É uma receita precisa — independente de qualquer linguagem de programação em particular.
Uma analogia do quotidiano
Uma receita de cozinha é um algoritmo: uma lista definida de passos (« picar as cebolas, aquecer o azeite, adicionar e mexer durante 5 minutos ») que transforma entradas (os ingredientes) numa saída (um prato). Tal como as instruções da divisão por etapas aprendida na escola, ou os passos para montar um móvel em kit. A ideia precede largamente os computadores — a palavra vem do matemático do século IX al-Khwarizmi.
As propriedades chave
- Passos bem definidos — cada instrução é clara e sem ambiguidade.
- Finito — deve terminar após um número limitado de passos, e não correr indefinidamente.
- Entrada e saída definidas — recebe zero ou mais entradas e produz um resultado.
- Efetivo — cada passo é suficientemente elementar para ser realmente executado.
Um algoritmo é também independente da linguagem: o mesmo algoritmo de ordenação pode ser escrito em Python, Haskell, Rust ou à mão em papel. O algoritmo é a ideia; o código é uma expressão dela.
Um exemplo concreto
Para encontrar o maior número numa lista, o algoritmo é:
1. Assume the first number is the largest so far.
2. Look at each remaining number in turn.
3. If it is bigger than the largest so far, make it the new largest.
4. After the last number, the largest so far is the answer. É um algoritmo completo — escrito em linguagem comum, sem código necessário. Traduzi-lo para uma linguagem é um passo separado e mecânico.
Porque é que a eficiência importa: Big-O
Algoritmos diferentes podem resolver o mesmo problema com quantidades de trabalho muito diferentes. A notação Big-O descreve como o custo de um algoritmo cresce à medida que a entrada aumenta. Percorrer uma lista uma vez para encontrar o maior valor é O(n) — o trabalho cresce proporcionalmente ao número de elementos. Uma abordagem ingénua que comparasse cada par seria O(n²) — muito mais lenta para entradas grandes. Escolher um algoritmo melhor importa muitas vezes mais do que um computador mais rápido: uma ordenação em O(n log n) vencerá uma ordenação em O(n²) numa lista grande de cada vez.
Algoritmo vs programa
Estão relacionados mas não são a mesma coisa. Um algoritmo é o método abstrato — os passos. Um programa é uma implementação concreta de um ou mais algoritmos numa linguagem precisa, com todos os detalhes do mundo real (tratamento de entradas, erros, memória) preenchidos. Concebe-se primeiro o algoritmo, depois implementa-se. O mesmo algoritmo pode alimentar muitos programas.
FAQ
Um algoritmo é a mesma coisa que código? Não. O algoritmo é o conjunto de passos independente da linguagem; o código é uma implementação dele. O mesmo algoritmo pode ser escrito em muitas linguagens.
O que torna um algoritmo « bom »? Primeiro a correção (produz a saída certa para cada entrada válida), depois a eficiência (usa uma quantidade aceitável de tempo e memória, descrita pelo Big-O), depois a clareza.
O que é a notação Big-O? Uma forma de descrever como o tempo de execução ou a memória de um algoritmo crescem com o tamanho da entrada — por ex. O(n) linear, O(n log n), O(n²) quadrático. Compara algoritmos independentemente da máquina exata.
É preciso matemática para entender algoritmos? Uma lógica básica chega para começar. Os do quotidiano — pesquisa, ordenação, contagem — são intuitivos; a matemática torna-se útil quando se analisa e compara a sua eficiência.
Os algoritmos são o « o que fazer »; uma linguagem como Haskell ou os dados transportados por uma API são o « como » e o « com quê ». Percorra outras explicações claras no nosso índice de guias.