Supposons que vous obtenez un nombre (en utilisant bits dans le codage binaire).
À quelle vitesse pouvez-vous trouver (ou déterminer qu'il n'existe pas)
Par exemple, étant donné l'entrée , on peut sortir .
Un algorithme naïf pour le problème passerait en revue toutes les valeurs possibles de et rechercherait une valeur de qui satisfasse la propriété.
Une observation simple est qu'il n'est pas nécessaire de vérifier des valeurs de inférieures à ou supérieures à . Cependant (même si nous ne pouvions vérifier que O (1) valeurs k possibles par valeur n ), cela aboutit à un algorithme inefficace qui est exponentiel dans la taille d'entrée.
Une approche alternative serait de passer en revue les valeurs possibles de (il suffit de vérifier ) et pour chaque vérification des valeurs possibles . On peut alors utiliser:
Donc, pour un k donné, il suffit de vérifier valeurs dans la plage , en utilisant la recherche binaire (lorsque est fixe, augmente de façon monotone dans ), cela donne un algorithme polynomial fonctionnant en .
Cela me semble toujours inefficace et je suppose que cela pourrait être résolu en temps linéaire (dans la taille d'entrée).