Não sei como defini-lo com elegância, mas basicamente quero implementar um algoritmo de pesquisa de força bruta, mas existem muitas maneiras diferentes de enumerar através do espaço de pesquisa. Isso pode ser ingênuo da minha parte, mas imagino que a maneira como escolho enumerar através do espaço de pesquisa possa afetar muito se meu algoritmo funciona ou não na prática.
Considere o seguinte problema de decisão como um exemplo simplificado.
Entrada: Um polinômio com coeficientes inteiros e um número natural .
Pergunta: Existe tal que ?
Agora, pode haver muitos algoritmos diferentes para resolver esse problema, mas decido escolher uma abordagem de força bruta. Considere as seguintes estratégias para enumerar através do espaço de pesquisa.
Estratégia Ascendente: Eu poderia verificar se é 0, então , então , ..., até encontrar um tal que ou tente cada .
Estratégia descendente: eu poderia verificar se é 0, então , então , ..., até encontrar um tal que ou tente todo .
Popularidade Estratégia: Eu poderia armazenar uma lista pequena da maioria das soluções populares e julgar os primeiro antes de tentar os números em .
Estratégia da peneira: eu poderia fazer uma espécie de enumeração da peneira. Eu tento todos os números divisíveis por 2 em , depois os números divisíveis por 3 em , depois 5, depois 7, depois 11, depois 13 e assim por diante. (Supondo que eu tenha acesso a uma grande lista pré-calculada de números primos.)
Estratégia de aleatoriedade: Talvez exista uma estratégia de enumeração interessante que utilize uma grande seqüência de bits aleatórios.
Basicamente, pretendo responder às seguintes perguntas sobre algoritmos de pesquisa de força bruta:
Pergunta A: Existem benefícios em escolher uma estratégia de enumeração específica?
Pergunta B: Existem exemplos de problemas de pesquisa em que, na prática, você escolheria uma estratégia de enumeração interessante? Sinto que pode haver alguns problemas de pesquisa em que, na prática, uma variante da Estratégia de Popularidade funciona efetivamente.