Algoritmos costumam aparecer em conversas sobre tecnologia como se fossem mecanismos misteriosos capazes de decidir o que vemos na internet, escolher anúncios, recomendar vídeos ou controlar sistemas complexos. A palavra realmente está ligada a muitas dessas atividades, mas seu significado básico é muito mais simples. Um algoritmo é um procedimento organizado para realizar uma tarefa ou resolver um problema.
Uma receita culinária ajuda a formar uma primeira ideia. Existe um objetivo, como preparar um alimento, e uma sequência de ações que conduz até ele. Algumas etapas precisam acontecer antes de outras, certas decisões dependem das condições encontradas e algumas ações podem ser repetidas. Um algoritmo possui características semelhantes, embora precise ser descrito com a precisão necessária para que suas operações possam ser executadas de maneira definida.
Isso não significa que qualquer lista de instruções seja automaticamente um bom algoritmo. Dizer “organize os produtos da melhor maneira” pode fazer sentido para uma pessoa, mas ainda é vago demais para uma máquina. O que significa “melhor”? Organizar pelo nome, pelo preço, pelo tamanho ou pela quantidade vendida? Antes de executar o procedimento, é necessário definir claramente o problema e os critérios utilizados.
Um exemplo simples é encontrar o maior número de uma lista. Podemos começar considerando o primeiro valor como o maior encontrado até aquele momento. Depois comparamos esse valor com o segundo. Se o segundo for maior, ele passa a ocupar essa posição. O processo continua com os números seguintes. Quando todos tiverem sido examinados, o maior valor encontrado será a resposta.
Esse procedimento contém elementos presentes em muitos algoritmos. Há dados de entrada, uma sequência de operações, comparações, decisões e um resultado. A tarefa pode ser descrita sem mencionar uma linguagem de programação específica. Depois, o mesmo algoritmo poderia ser implementado em diferentes linguagens.
Essa distinção é importante porque algoritmo e programa não são exatamente a mesma coisa. O algoritmo descreve o procedimento utilizado para resolver uma tarefa. O programa é uma implementação concreta, escrita de uma maneira que possa ser executada em determinado ambiente computacional. Um mesmo algoritmo pode aparecer em muitos programas diferentes.
Também é possível executar alguns algoritmos sem computador. Quando colocamos nomes em ordem alfabética seguindo um procedimento, fazemos algo algorítmico. Quando procuramos uma palavra em um dicionário reduzindo progressivamente a região onde ela pode estar, também seguimos uma estratégia organizada. Computadores tornaram os algoritmos especialmente importantes porque conseguem executar procedimentos de maneira extremamente rápida e repetida, mas a ideia de procedimento não nasceu com as máquinas digitais.
Nos computadores, entretanto, as instruções precisam chegar a operações que possam ser executadas. Uma pessoa pode receber a orientação “escolha uma roupa adequada para a ocasião” e usar experiência, costumes e contexto para decidir. Um computador não possui automaticamente uma regra precisa para interpretar “adequada”. Para transformar essa tarefa em um procedimento computacional, seria necessário definir quais informações serão consideradas e como elas influenciarão o resultado.
Por isso, construir um algoritmo frequentemente exige transformar uma ideia vaga em etapas mais precisas. Se o objetivo é calcular o valor de uma compra, precisamos saber quais preços considerar, como tratar quantidades, quando aplicar descontos e como calcular impostos ou outras cobranças, se existirem. Cada regra precisa ser representada de maneira que possa participar do procedimento.
Algoritmos podem incluir decisões. Um caixa eletrônico, por exemplo, pode verificar se a identificação do usuário foi aceita antes de permitir determinadas operações. Um sistema de vendas pode verificar se existe estoque antes de confirmar um pedido. Um aplicativo pode mostrar comportamentos diferentes dependendo das opções escolhidas pelo usuário. Em todos esses casos, o procedimento segue caminhos diferentes conforme determinadas condições.
Também podem existir repetições. Se um programa precisa calcular o valor total de uma compra com cinquenta itens, não é necessário escrever cinquenta vezes a mesma operação. O procedimento pode dizer que, para cada item, deve multiplicar preço por quantidade e acrescentar o resultado ao total. A repetição continua até que todos os itens tenham sido processados.
Essas estruturas simples — sequência, decisão e repetição — permitem construir procedimentos muito complexos quando combinadas. Um sistema moderno pode possuir milhares ou milhões de partes interagindo, mas seu funcionamento continua sendo realizado por operações que podem ser executadas pela máquina.
Nem sempre existe apenas um algoritmo para determinado problema. Imagine uma lista de nomes em que precisamos encontrar uma pessoa específica. Uma possibilidade é começar pelo primeiro nome e verificar todos em sequência. Essa estratégia funciona mesmo quando a lista não possui uma organização especial.
Se a lista estiver ordenada alfabeticamente, porém, podemos utilizar uma estratégia diferente. Verificamos um elemento próximo ao meio. Se o nome procurado vier antes dele na ordem alfabética, descartamos a metade posterior. Se vier depois, descartamos a metade anterior. Repetindo esse processo, reduzimos rapidamente a região em que o nome pode estar.
Os dois procedimentos podem chegar à mesma resposta, mas realizam quantidades diferentes de trabalho. Em listas pequenas, talvez a diferença seja irrelevante. Em conjuntos enormes de dados, ela pode ser decisiva. É por isso que estudar algoritmos não significa apenas descobrir um procedimento que funcione. Também envolve comparar maneiras diferentes de resolver a mesma tarefa.
A eficiência de um algoritmo indica quanto recurso ele pode exigir conforme o problema cresce. Tempo de processamento é um desses recursos, mas não o único. Um procedimento pode precisar de muita memória, produzir grande quantidade de comunicação entre computadores ou consumir mais energia. Dependendo da situação, diferentes recursos podem ser mais importantes.
Um algoritmo extremamente rápido que utiliza memória demais talvez não seja adequado para um aparelho pequeno. Outro que economiza memória, mas demora muito, pode ser inadequado para uma resposta que precisa acontecer imediatamente. A escolha depende das condições em que o sistema será utilizado.
Há ainda algoritmos que procuram uma resposta exata e outros que trabalham com aproximações. Em certos problemas, encontrar a melhor solução possível pode exigir uma quantidade enorme de processamento. Pode ser mais útil encontrar rapidamente uma solução muito boa, ainda que não exista garantia de que seja a melhor entre todas as alternativas imagináveis.
Sistemas de navegação e planejamento ajudam a entender essa diferença. Dependendo do problema, pode haver um número gigantesco de rotas ou combinações possíveis. Examinar todas elas nem sempre é uma estratégia viável. Algoritmos podem utilizar métodos que eliminam possibilidades, priorizam caminhos promissores ou procuram soluções suficientemente boas dentro do tempo disponível.
Outros algoritmos trabalham com probabilidades. Em vez de seguir um comportamento completamente determinado para produzir sempre a mesma escolha intermediária, podem utilizar elementos aleatórios ou estimativas probabilísticas. Isso pode ser útil em buscas, simulações, segurança e vários outros campos. A existência de probabilidade não deixa o processo sem regras; ela faz parte das próprias regras do procedimento.
A inteligência artificial ampliou a confusão em torno da palavra algoritmo porque muitos sistemas atuais não funcionam apenas com uma longa lista de regras escritas manualmente. Em aprendizado de máquina, parte do comportamento é obtida por meio de treinamento com dados. Um algoritmo de treinamento ajusta um modelo para que ele aprenda determinadas relações presentes nos exemplos.
Depois do treinamento, esse modelo pode receber novos dados e produzir classificações, previsões, textos, imagens ou outros resultados. Nesses casos, dizer apenas que “o algoritmo decidiu” pode esconder várias camadas diferentes. Existem procedimentos utilizados para treinar o modelo, o próprio modelo resultante, regras do sistema ao redor dele e critérios definidos pela organização responsável.
Um sistema de recomendação, por exemplo, pode analisar informações sobre conteúdos e atividades anteriores para estimar o que uma pessoa provavelmente gostaria de ver. Mas a recomendação final não surge de uma entidade abstrata chamada “algoritmo”. Ela depende de dados disponíveis, objetivos definidos, modelos utilizados e regras sobre quais conteúdos podem ser apresentados.
Os objetivos são especialmente importantes. Um sistema pode ser construído para aumentar o tempo de uso, melhorar a probabilidade de uma compra, mostrar conteúdos considerados relevantes ou equilibrar vários critérios. O algoritmo procura produzir resultados de acordo com aquilo que foi formalizado no sistema. Ele não descobre sozinho qual objetivo seria melhor para a sociedade ou para cada pessoa.
Por isso, algoritmos não são automaticamente neutros apenas porque utilizam matemática. As regras escolhidas e os dados utilizados refletem decisões anteriores. Se um sistema organiza candidatos para uma oportunidade, por exemplo, alguém precisa decidir quais características serão consideradas e como serão avaliadas. Mesmo que a execução posterior seja automática, a definição do procedimento possui consequências.
Isso também não significa que todo resultado de um algoritmo seja deliberadamente escolhido por uma pessoa. Em sistemas complexos, especialmente aqueles que aprendem com dados, desenvolvedores podem não prever cada resultado individual. Um modelo pode encontrar relações que ninguém programou diretamente caso a caso. Ainda assim, ele opera dentro de uma estrutura construída por pessoas, com dados, objetivos e métodos escolhidos de alguma forma.
Os dados possuem papel central porque um procedimento pode ser correto e ainda produzir resultados ruins quando recebe informações inadequadas. Se um algoritmo calcula rotas usando um mapa desatualizado, pode sugerir uma rua que está bloqueada. Se um sistema utiliza cadastros incorretos, suas decisões podem refletir esses erros. A qualidade do processamento não corrige automaticamente a qualidade da informação de entrada.
Há ainda situações em que o problema foi representado de maneira inadequada. Um algoritmo pode executar perfeitamente aquilo que foi definido e, mesmo assim, não resolver a necessidade real. Isso acontece quando a medida utilizada como objetivo não corresponde bem ao que as pessoas realmente desejavam.
Imagine uma escola que queira identificar estudantes que precisam de apoio e escolha utilizar apenas a quantidade de faltas como critério. O algoritmo pode contar as faltas sem nenhum erro. Ainda assim, estudantes podem precisar de apoio por muitas outras razões que não aparecem nesse dado. A precisão do cálculo não garante que o modelo utilizado represente adequadamente o problema.
Por essa razão, avaliar um algoritmo envolve mais do que verificar se seu código funciona. É necessário perguntar se o problema foi definido corretamente, se os dados são adequados, se o procedimento é eficiente e se os resultados correspondem ao objetivo real. Em aplicações importantes, também é necessário considerar consequências quando o sistema erra.
Algoritmos também possuem limites. Alguns problemas não possuem um método conhecido que encontre rapidamente a solução exata quando a quantidade de dados cresce. Outros são tão difíceis que precisamos trabalhar com aproximações ou restringir o problema. Existem ainda problemas para os quais a teoria da computação demonstra que nenhum algoritmo geral consegue produzir sempre uma resposta.
Isso reforça uma ideia fundamental: algoritmo não é sinônimo de inteligência ilimitada. Um algoritmo é uma maneira de organizar uma tarefa computacional. Alguns são extremamente simples; outros são resultado de décadas de pesquisa e utilizam estruturas matemáticas sofisticadas. Em todos os casos, porém, existe algum procedimento ou método computacional por trás do comportamento.
Também não é necessário imaginar algoritmos como entidades que existem separadas dos sistemas. Na prática, eles são executados em computadores reais, recebem dados reais e fazem parte de programas construídos para determinados objetivos. Uma plataforma não possui apenas “um algoritmo” responsável por tudo. Sistemas grandes podem utilizar inúmeros procedimentos para busca, segurança, recomendações, publicidade, armazenamento, organização de informações e muitas outras funções.
Quando alguém diz que “o algoritmo mostrou este vídeo”, a frase pode ser uma simplificação útil. Mas uma compreensão mais precisa perguntaria quais sinais foram considerados, qual objetivo orientou a recomendação, quais regras limitaram as opções e quais dados estavam disponíveis. Essas perguntas transformam algo aparentemente misterioso em um sistema que pode ser analisado.
Essa é talvez a principal vantagem de entender o que algoritmos realmente são. A palavra deixa de funcionar como explicação para qualquer comportamento tecnológico. Dizer que algo aconteceu “por causa do algoritmo” é apenas o começo. Algoritmos são procedimentos construídos para produzir determinados resultados a partir de determinadas informações.
Eles podem ser rápidos ou lentos, simples ou complexos, exatos ou aproximados. Podem seguir regras definidas diretamente ou fazer parte de sistemas que aprendem padrões a partir de dados. Podem ser muito úteis e também podem reproduzir problemas presentes nos objetivos, informações ou modelos utilizados em sua construção.
Não há necessidade de mistificação. Por trás das aplicações mais sofisticadas continuam existindo problemas que foram representados, dados que foram organizados e procedimentos que transformam entradas em resultados. Entender algoritmos é justamente aprender a olhar para essa sequência de decisões e operações. Em vez de perguntar apenas “o que o algoritmo decidiu?”, torna-se possível perguntar algo mais esclarecedor: qual problema ele está tentando resolver, com quais informações, seguindo quais critérios e por meio de qual procedimento?
