Suponga que está obteniendo un número (usando bits en codificación binaria).
¿Qué tan rápido puede encontrar (o determinar que tal no existe) ?
Por ejemplo, dada la entrada , uno puede generar .
Un algoritmo ingenuo para el problema revisaría todos los valores posibles para , y buscaría un valor de que satisfaga la propiedad.
Una observación simple es que no es necesario verificar valores de menores que mayores que . Sin embargo (incluso si pudiéramos verificar solo posibles valores por valor) esto termina en un algoritmo ineficiente que es exponencial en el tamaño de entrada.
Un enfoque alternativo sería repasar los posibles valores de (es suficiente para verificar ) y para cada verificación de posibles valores. Entonces podemos usar:
Entonces, para una dada solo necesitamos verificar valores en el rango , al hacerlo mediante la búsqueda binaria (cuando es fijo, aumenta monotónicamente en ), esto da un algoritmo polinomial que se ejecuta en .
Esto todavía me parece ineficiente y supongo que esto podría resolverse en tiempo lineal (en el tamaño de entrada).