Algoritmo é uma sequência finita de instruções bem definidas que leva de uma entrada a um resultado, como uma receita que qualquer executor, pessoa ou máquina, consegue seguir sem adivinhar nada. O nome vem do matemático persa al-Khwarizmi, autor de um livro de regras de cálculo escrito por volta de 825, e hoje vale tanto para a divisão feita no papel quanto para o sistema que escolhe a rota do GPS. Quem quer aprender a criar os próprios algoritmos pode começar pelo curso gratuito de Lógica de Programação, que ensina a pensar em passos antes de qualquer linguagem.
Resposta rápida
- Algoritmo é uma sequência finita de passos bem definidos que transforma uma entrada em um resultado.
- A palavra vem de al-Khwarizmi, matemático persa do século 9, e "algarismo" tem a mesma origem.
- Pela estrutura, um algoritmo pode ser sequencial, com decisão, com repetição ou recursivo, e os reais costumam misturar esses tipos.
- Dá para escrevê-lo em português, em fluxograma, em pseudocódigo ou direto numa linguagem de programação.
O que significa algoritmo?
Um algoritmo é um procedimento: uma lista ordenada de ações que, seguida à risca, resolve um tipo de problema. O dicionário de algoritmos do NIST, o instituto de padrões dos Estados Unidos, define o termo em uma linha: um conjunto computável de passos para atingir um resultado desejado. A palavra "computável" é o que separa um algoritmo de um conselho. "Organize melhor o seu dinheiro" não é algoritmo; "anote cada gasto, some tudo no fim do mês e compare com a renda" já é.
Dois detalhes do significado costumam passar despercebidos. O primeiro é que o algoritmo resolve uma classe de problemas, e não um caso isolado: o método da divisão no papel serve para qualquer dividendo e divisor, e não só para 144 dividido por 12. O segundo é que ele não depende de computador. A máquina entrou na história por ser um executor rápido e obediente, mas as pessoas seguem algoritmos há milênios.
Para praticar a definição com um jogo de ordenar os passos de um saque no caixa eletrônico, faça a aula O que é um algoritmo, do curso de lógica.
De onde vem a palavra algoritmo?
A palavra nasceu de um nome próprio. Muhammad ibn Musa al-Khwarizmi foi um matemático persa que trabalhou em Bagdá no século 9 e escreveu, por volta de 825, um livro com as regras para calcular com os algarismos indianos, a base dos que usamos até hoje. Quando a obra foi traduzida para o latim, o nome do autor virou Algoritmi, e a palavra algorismus passou a designar o cálculo feito com esses algarismos, passo a passo.
Do mesmo nome saiu a palavra "algarismo", que em português designa cada dígito de um número. Outro livro de al-Khwarizmi, sobre equações, deu origem a "álgebra", tirada do termo árabe al-jabr, que aparece no título. Com o tempo, "algoritmo" deixou de significar só conta com algarismos e passou a nomear qualquer procedimento sistemático, inclusive os que não envolvem número algum.
A ideia é bem mais velha que a palavra. O algoritmo de Euclides, que acha o máximo divisor comum de dois números e foi descrito nos Elementos por volta de 300 a.C., é um dos mais antigos ainda em uso. O guia do algoritmo de Euclides mostra o passo a passo com exemplos.
Quais são as características de um algoritmo?
Donald Knuth, no primeiro volume de The Art of Computer Programming, de 1968, descreve cinco características que todo algoritmo precisa ter. Elas funcionam como um checklist para conferir o que você escreveu.
| Característica | O que exige | Pergunta para conferir |
|---|---|---|
| Finitude | Terminar depois de um número finito de passos | Existe algum caminho em que ele nunca para? |
| Definição | Cada passo é preciso, sem margem para interpretação | Duas pessoas executariam este passo do mesmo jeito? |
| Entrada | Recebe zero ou mais dados para trabalhar | Quais dados ele precisa receber? |
| Saída | Produz pelo menos um resultado ligado à entrada | O que ele entrega no fim? |
| Efetividade | Cada operação é simples o bastante para ser feita com lápis e papel | Algum passo exige adivinhar ou fazer o impossível? |
A finitude costuma falhar em programa: um laço de repetição sem condição de parada roda para sempre. A definição costuma faltar em receita de família: "sal a gosto" funciona para quem já cozinhou, mas não para um executor que só faz o que está escrito. Fora da lista fica uma exigência que, na prática, pesa tanto quanto as outras: o algoritmo precisa ser correto, ou seja, dar a resposta certa para toda entrada válida, inclusive nos casos extremos, como uma lista vazia ou um valor zero.
Quais são os tipos de algoritmo?
Pela estrutura, os algoritmos se dividem em quatro tipos. Os três primeiros são as estruturas básicas da programação: em 1966, Corrado Böhm e Giuseppe Jacopini mostraram que qualquer fluxograma pode ser reescrito usando só sequência, decisão e repetição, resultado que ficou conhecido como teorema do programa estruturado. A recursão é um quarto jeito de organizar a repetição.
| Tipo | Como funciona | Exemplo |
|---|---|---|
| Sequencial | Executa os passos um após o outro, sempre na mesma ordem | Calcular o troco: ler o preço, ler o valor pago e subtrair |
| Com decisão (condicional) | Escolhe um caminho conforme uma condição verdadeira ou falsa | Se a média for 6 ou mais, aprovado; senão, recuperação |
| Com repetição (iterativo) | Repete um bloco enquanto uma condição valer ou por um número fixo de vezes | Somar os gastos de cada dia do mês |
| Recursivo | Resolve o problema chamando a si mesmo para uma versão menor | Calcular o fatorial: 5! = 5 x 4! |
Quase todo algoritmo real mistura os tipos. O do caixa eletrônico é sequencial na maior parte, toma decisões (a senha confere? há saldo?) e repete (pede a senha de novo até o limite de tentativas). Além da estrutura, os algoritmos também se agrupam pela finalidade: há algoritmos de busca, de ordenação, de caminho mínimo, de compressão e de criptografia, entre muitos outros.
Como representar um algoritmo?
O mesmo algoritmo pode ser escrito de quatro jeitos, do mais solto ao mais rigoroso. O exemplo abaixo é o algoritmo que diz se um número inteiro é par ou ímpar.
Descrição narrativa
É o algoritmo em português comum, em frases numeradas:
- Peça um número inteiro.
- Divida o número por 2 e observe o resto.
- Se o resto for zero, informe que o número é par.
- Caso contrário, informe que o número é ímpar.
É a forma mais fácil de começar e a mais sujeita a ambiguidade, porque o português aceita frases com dois sentidos.
Fluxograma
O fluxograma desenha o algoritmo com formas geométricas ligadas por setas. Os símbolos seguem um padrão internacional, a norma ISO 5807, e quatro deles aparecem em quase todo fluxograma:
| Símbolo | Forma | Uso |
|---|---|---|
| Terminal | Oval (retângulo de cantos arredondados) | Início e fim do algoritmo |
| Processo | Retângulo | Uma ação ou um cálculo |
| Decisão | Losango | Uma pergunta de sim ou não, com duas saídas |
| Dados | Paralelogramo | Entrada ou saída de dados |
No exemplo, o fluxograma teria um oval de início, um paralelogramo para ler o número, um losango perguntando se o resto da divisão por 2 é zero, dois paralelogramos de saída (par e ímpar) e um oval de fim. A aula de fluxogramas do curso de lógica ensina a ler e a desenhar um fluxograma completo.
Pseudocódigo
Pseudocódigo é o algoritmo escrito em português estruturado, com palavras fixas como leia, escreva, se, senão e enquanto. Ele tem a precisão de um programa sem as regras de uma linguagem específica, e uma das versões mais conhecidas no Brasil é o Portugol. O par ou ímpar fica assim:
leia(numero)
se numero mod 2 = 0 então
escreva("par")
senão
escreva("ímpar")
fimO operador mod devolve o resto da divisão, e esse é o único cálculo do algoritmo. A aula de pseudocódigo em português apresenta os comandos leia e escreva e as regras de escrita que o curso usa.
Código em uma linguagem de programação
Por fim, o algoritmo vira programa. Em Python, o mesmo teste fica assim:
numero = int(input("Digite um número inteiro: "))
if numero % 2 == 0:
print("par")
else:
print("ímpar")A lógica é idêntica; mudou só a grafia. Por isso quem domina algoritmos troca de linguagem com pouco esforço, e o curso de Python é o passo natural depois da lógica.
Exemplos de algoritmos resolvidos em pseudocódigo
Os quatro exemplos a seguir cobrem os quatro tipos de estrutura e usam o mesmo pseudocódigo do curso de lógica. Nele, a seta <- guarda um valor numa variável e o sinal <> quer dizer "diferente de".
Algoritmo sequencial: o troco
leia(preco)
leia(pago)
troco <- pago - preco
escreva("Troco: ", troco)São quatro passos em linha reta, sem desvio. Com preço de 37,50 e pagamento de 50, o troco é 12,50. O algoritmo tem um defeito de propósito: se o valor pago for menor que o preço, ele mostra um troco negativo. Corrigir isso exige uma decisão, que é o próximo tipo.
Algoritmo com decisão: ano bissexto
Pelo calendário gregoriano, um ano é bissexto se for divisível por 4, exceto os divisíveis por 100 que não são divisíveis por 400. A regra vira uma decisão com os operadores E e OU:
leia(ano)
se (ano mod 4 = 0 E ano mod 100 <> 0) OU ano mod 400 = 0 então
escreva(ano, " é bissexto")
senão
escreva(ano, " não é bissexto")
fimTeste com três anos. 2024 é divisível por 4 e não por 100, então é bissexto. 1900 é divisível por 100 e não por 400, então não é. 2000 é divisível por 400, então é. O comando se é o assunto da aula sobre a bifurcação SE, e o guia de tabela-verdade e raciocínio lógico explica como E e OU combinam condições.
Algoritmo com repetição: a média de várias notas
leia(quantidade)
soma <- 0
contador <- 1
enquanto contador <= quantidade faça
leia(nota)
soma <- soma + nota
contador <- contador + 1
fim
escreva("Média: ", soma / quantidade)O bloco dentro do enquanto se repete uma vez por nota. A variável soma acumula os valores, e o contador impede o laço de rodar para sempre, que é a finitude na prática. Um teste de mesa, feito no papel antes de rodar no computador, mostra cada volta com as notas 7, 8 e 9:
| Momento | Nota lida | soma | contador |
|---|---|---|---|
| Antes do laço | (nenhuma) | 0 | 1 |
| Fim da volta 1 | 7 | 7 | 2 |
| Fim da volta 2 | 8 | 15 | 3 |
| Fim da volta 3 | 9 | 24 | 4 |
Com o contador em 4, a condição "4 é menor ou igual a 3" fica falsa, o laço termina e a média sai 24 dividido por 3, que é 8. Se a quantidade informada for zero, a divisão final quebra, e um algoritmo correto trataria esse caso antes. A estrutura do enquanto, com o teste feito antes de cada volta, está na aula do laço ENQUANTO.
Algoritmo recursivo: o fatorial
função fatorial(n)
se n = 0 então
retorne 1
senão
retorne n * fatorial(n - 1)
fim
fim função
escreva(fatorial(5))A função chama a si mesma com um número menor até chegar ao caso base, n = 0, que devolve 1 sem nova chamada. O cálculo de fatorial(5) desce até fatorial(0) e volta multiplicando: 1, 1, 2, 6, 24 e, por fim, 120. Sem o caso base, a função chamaria a si mesma sem parar. A aula sobre a ideia da recursão, do curso intermediário, explica por que uma função consegue resolver um problema chamando a si mesma.
Para escrever algoritmos como esses e ver o resultado na hora, o curso gratuito de Lógica de Programação tem um Playground de Lógica que roda pseudocódigo em português no navegador, sem instalar nada. Cada aula termina com um jogo, como comandar um robô, caçar erros ou prever a saída de um algoritmo.
Onde os algoritmos aparecem no dia a dia?
Vários algoritmos que rodam no celular têm nome próprio. A tabela reúne alguns dos mais comuns, com o problema que cada um resolve e onde ele aparece.
| Problema | Algoritmo ou família | Onde você encontra |
|---|---|---|
| Achar um item numa lista em ordem | Busca binária | Procurar uma palavra no dicionário, um nome numa lista de chamada |
| Colocar itens em ordem | Ordenação (inserção, merge sort, quicksort) | E-mails por data, contatos por nome, produtos por preço |
| Traçar a menor rota | Caminho mínimo, como o algoritmo de Dijkstra, de 1959 | Aplicativos de mapa e de navegação |
| Conferir se um arquivo foi alterado | Funções de hash, como o SHA-256 | Download de programas, assinatura digital |
| Transformar dados binários em texto | Codificação Base64 | Anexos de e-mail, imagens embutidas em páginas |
| Sugerir o próximo conteúdo | Sistemas de recomendação | Lojas virtuais, redes sociais, serviços de streaming |
Dá para ver dois deles funcionando no próprio navegador: o gerador de hash SHA calcula o SHA-256 de um texto, e o codificador Base64 faz a conversão nos dois sentidos.
E "o algoritmo" das redes sociais? O termo é o mesmo, mas ali se trata de um conjunto grande de programas que dá uma nota a cada publicação a partir de sinais, como as suas interações anteriores, e mostra primeiro as de nota mais alta. Os critérios exatos, na maior parte dos casos, não são públicos. A estrutura, porém, é a de qualquer algoritmo: entrada (as publicações e os sinais), processamento (a pontuação) e saída (a ordem do seu feed).
O que é eficiência de um algoritmo?
Dois algoritmos podem resolver o mesmo problema com esforços muito diferentes. Para comparar os dois de forma justa, conte os passos que cada um dá conforme a entrada cresce: o cronômetro mede também a máquina, e o mesmo código roda mais rápido num computador potente. A aula Contar passos, não segundos desenvolve essa ideia.
O exemplo clássico é procurar um nome numa lista. Na busca linear, você olha item por item e, no pior caso, olha todos. Na busca binária, que exige a lista em ordem, você olha o item do meio, descarta a metade em que o nome não pode estar e repete na metade que sobrou. No pior caso, a quantidade de comparações fica assim:
| Itens na lista | Busca linear | Busca binária |
|---|---|---|
| 10 | 10 | 4 |
| 1.000 | 1.000 | 10 |
| 1.000.000 | 1.000.000 | 20 |
| 1.000.000.000 | 1.000.000.000 | 30 |
Cada comparação da busca binária corta o problema pela metade, por isso o número de passos cresce devagar: dobrar o tamanho da lista acrescenta só uma comparação. A aula de busca binária mostra o algoritmo com o jogo de adivinhar um número.
Na ordenação acontece o mesmo. Ordenar 1.000 nomes pelo método da bolha, na versão mais simples, custa 499.500 comparações, enquanto o merge sort resolve com menos de 10 mil. Com poucos dados a diferença não aparece; com milhões, ela separa o programa que responde na hora do que trava. A notação que os programadores usam para essa comparação, o Big-O, está no guia de estruturas de dados e algoritmos.
Algoritmo, programa e linguagem de programação: qual a diferença?
O algoritmo é a solução pensada, e o programa é essa solução escrita numa linguagem de programação, o idioma que o computador sabe executar. O par ou ímpar mostrado acima em pseudocódigo e em Python é um algoritmo só, com duas grafias. Um programa de verdade costuma reunir muitos algoritmos, e um mesmo algoritmo pode ser escrito em qualquer linguagem.
Também vale separar algoritmo de heurística. Heurística é uma regra prática que costuma dar uma boa resposta, sem garantia de ser a melhor. Escolher a fila do mercado com menos pessoas é uma heurística, porque uma fila curta com carrinhos cheios pode andar mais devagar. Muitos sistemas usam heurísticas quando o cálculo exato seria lento demais para o tamanho do problema.
Como aprender a criar algoritmos do zero?
- Descreva tarefas do cotidiano em passos numerados, como se ditasse para um robô que não sabe nada. Cada "depende" que aparecer é uma decisão escondida.
- Identifique a entrada, o processamento e a saída de cada tarefa.
- Reescreva em pseudocódigo, usando só sequência, decisão e repetição.
- Faça o teste de mesa: execute o algoritmo no papel com dados de exemplo, anotando o valor de cada variável a cada passo, como na tabela das notas.
- Teste os casos extremos: zero, lista vazia, valor negativo e o maior valor possível.
- Só então traduza para uma linguagem de programação.
O curso de Lógica de Programação segue essa ordem em 16 módulos, e o guia de como aprender programação do zero ajuda a montar a rotina de estudo. Para quem já passou do básico, o curso intermediário de lógica trata de busca, ordenação, recursão e eficiência.
Para pais e professores
Crianças aprendem algoritmos com atividades de sequência, como ordenar os passos para escovar os dentes ou guiar um colega por um caminho desenhado no chão. O curso de lógica de programação para crianças leva essas ideias para jogos no navegador, e o guia de como ensinar programação para crianças sugere atividades por faixa de idade.
Conclusão
Algoritmo é um procedimento finito e preciso que transforma uma entrada em um resultado. O nome vem de al-Khwarizmi, mas a ideia é mais antiga que ele, e a estrutura cabe em quatro tipos: sequencial, com decisão, com repetição e recursivo. O algoritmo pode ser escrito em português, em fluxograma, em pseudocódigo ou em código, e a qualidade dele se mede pela correção e pela quantidade de passos que gasta. Para praticar, comece pelo curso de Lógica de Programação, siga para o curso de Python e conheça todos os cursos gratuitos do ValorFinal.
Fontes e referências
- NIST, Dictionary of Algorithms and Data Structures: algorithm: definição de algoritmo e origem da palavra no nome de al-Khwarizmi.
- Böhm e Jacopini, Communications of the ACM, 1966: artigo Flow diagrams, Turing machines and languages with only two formation rules, base do teorema do programa estruturado (sequência, decisão e repetição bastam).
- ISO 5807:1985, símbolos e convenções para fluxogramas: norma internacional dos símbolos usados em fluxogramas de programa e de sistema.
- Khan Academy: curso de Algoritmos: busca binária, ordenação, recursão e notação assintótica, em português.