O que é um algoritmo?

Prévia grátis 4 min de leitura

Algoritmos estão em todo lugar

Um algoritmo é uma sequência precisa e finita de passos bem definidos que resolve um problema específico ou executa uma tarefa específica.

Você já usa algoritmos todos os dias sem chamá-los assim:

  • Uma receita é um algoritmo: ingredientes (entrada), passos (processo), prato (saída)
  • Direções para dirigir são um algoritmo: ponto de partida, instruções curva a curva, destino
  • Procurar uma palavra em um dicionário físico: abrir no meio, comparar, ir para esquerda ou direita: isso é busca binária!

Um algoritmo não é código. Código é meramente uma forma de expressar um algoritmo.


As três propriedades

Para algo se qualificar como algoritmo, deve ter três propriedades:

1. Finitude

Deve terminar após um número finito de passos. Um loop infinito não é um algoritmo: é um bug.

# Isso NÃO é um algoritmo — nunca para
ENQUANTO verdadeiro
  IMPRIMIR "olá"
FIM ENQUANTO

# Isso É um algoritmo — para após 5 iterações
contador ← 0
ENQUANTO contador < 5
  IMPRIMIR "olá"
  contador ← contador + 1
FIM ENQUANTO

2. Definitude

Cada passo deve ser não ambíguo. Deve haver uma interpretação.

# RUIM: ambíguo
"Adicione um pouco de sal"    → Quanto é "um pouco"?

# BOM: definido
"Adicione 5 gramas de sal"    → Exatamente uma interpretação

3. Efetividade

Cada passo deve ser executável: algo que pode ser realizado.

# RUIM: não efetivo
"Encontre o sentido da vida"  → Não pode ser computado

# BOM: efetivo
"Encontre o maior número no array"  → Claro, executável

Entrada, processo, saída

Todo algoritmo segue a mesma estrutura fundamental:

flowchart LR
  I["Entrada<br/>(dados)"] --> P["Processo<br/>(passos)"] --> O["Saída<br/>(resultado)"]

Exemplo: encontrar o valor máximo

  • Entrada: Uma lista de números [42, 17, 93, 5, 68]
  • Processo: Comparar cada número, rastrear o maior visto até agora
  • Saída: 93
FUNÇÃO encontrar_max(numeros)
  max ← primeiro elemento de numeros

  PARA CADA numero EM numeros
    SE numero > max
      max ← numero
    FIM SE
  FIM PARA

  RETORNAR max
FIM FUNÇÃO

Este algoritmo tem todas as três propriedades:

  • Finito: Processa cada elemento uma vez, depois para
  • Definido: Cada comparação tem um resultado claro
  • Efetivo: Comparar dois números é uma operação básica que qualquer computador pode fazer

Algoritmos no Rails

Rails está cheio de algoritmos trabalhando nos bastidores:

Operação Algoritmo em Ação
User.find(42) Algoritmo de busca (lookup por índice)
Course.order(:position) Algoritmo de ordenação (sort do banco)
params.permit(:name, :email) Algoritmo de filtragem (whitelist)
has_secure_password Algoritmo de hashing (bcrypt)
Correspondência de rotas Algoritmo de pattern matching

Quando você escreve User.find(42), o PostgreSQL usa um índice B-tree para localizar o registro: um algoritmo de busca sofisticado que encontra qualquer registro entre milhões em apenas alguns passos.


Por que estudar algoritmos?

Você pode pensar: "Rails faz tudo por mim: por que aprender algoritmos?"

Porque entender algoritmos ajuda você a:

  1. Escolher a abordagem certa: Devo usar find ou where? each ou find_each? A resposta depende do algoritmo subjacente.
  2. Debugar problemas de performance: "Por que esta página está lenta?" frequentemente se resume a um algoritmo O(n²) escondido no seu código.
  3. Projetar features melhores: Motores de recomendação, funcionalidades de busca e sistemas de ranking todos requerem pensamento algorítmico.
  4. Passar em entrevistas técnicas: Muitas entrevistas para vagas Rails incluem perguntas sobre algoritmos.

Algoritmos vs. heurísticas

Nem todo problema tem um algoritmo que garante a resposta perfeita:

Algoritmo Heurística
Garantia Sempre correto Geralmente bom o suficiente
Velocidade Pode ser lento para resultados perfeitos Rápido, troca precisão por velocidade
Exemplo Verificar toda rota para achar a mais curta "Sempre vá em direção ao destino"
Exemplo Rails Course.order(:position) "Mostrar mais populares primeiro" (aproximação)

Saber quando você precisa de um algoritmo preciso vs. uma heurística boa o suficiente é uma habilidade profissional.


Resumo

Conceito Definição
Algoritmo Sequência finita, definida e efetiva de passos
Finitude Deve terminar
Definitude Cada passo é não ambíguo
Efetividade Cada passo é executável
Estrutura Entrada → Processo → Saída
Heurística Um atalho "bom o suficiente" quando respostas perfeitas são muito caras
Aula 1 de 7 · grátis

Continue com a aula 2

Fundamentos de pseudocódigo

Apresenta convenções de pseudocódigo, a anatomia de uma função, quatro padrões comuns e uma tabela de tradução para Ruby.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...