coldwa.st
Todos os guiasProgramaçãoWebDadosFerramentasBases de dadosHaskellConceitosCabal e buildsToolchainCompiladorDesempenhoEditor e HLS

Programação · conceitos · fundamentos

O que é um algoritmo?

Por ColdwastAtualizado a 14 de junho de 20267 min de leitura#algorithm#concepts#cs
Fluxos de código verde num ecrã escuro
Fluxos de código no ecrã — um algoritmo é a lógica passo a passo que código como este executa.

É 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.

Código-fonte colorido num monitor
Código-fonte colorido num monitor — o código é uma expressão concreta de um algoritmo, a ideia subjacente passo a passo.

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.

Guia independente, mantido pela comunidade. coldwa.st é um site de recursos de programação; este artigo é um texto explicativo novo e original sobre algoritmos. Os exemplos são ilustrativos; verifique as afirmações de complexidade com um texto de referência quando isso importar.