Algoritmo que toma um problema como entrada e retorna a solução para o problema, geralmente após resolver um número possível de soluções.