Suponha que você esteja obtendo um número (usando bits na codificação binária).
Quão rápido você pode encontrar (ou determinar que isso não existe) ?
Por exemplo, dada a entrada , pode-se produzir .
Um algoritmo ingênuo para o problema examinaria todos os valores possíveis para e procuraria um valor de que satisfaça a propriedade.
Uma observação simples é que não há necessidade de verificar valores menores que ou maiores que . No entanto (mesmo se pudéssemos verificar apenas possíveis valores de por valor), isso termina em um algoritmo ineficiente que é exponencial no tamanho da entrada.
Uma abordagem alternativa seria revisar os possíveis valores de (basta verificar ) e, para cada verificação, os possíveis valores. Podemos então usar:
Portanto, para um determinado , precisamos apenas verificar valores no intervalo , ao fazer isso usando a pesquisa binária (quando é corrigido, está aumentando monotonicamente em ), isso fornece um algoritmo polinomial em execução em .
Isso ainda me parece ineficiente e acho que isso poderia ser resolvido em tempo linear (no tamanho da entrada).