Je cherche un algorithme efficace pour le problème:
Entrée : l'entier positif (stocké sous forme de bits) pour un entier . n ≥ 0
Sortie : Le nombre .
Question : Peut-on calculer partir des bits de en temps ?3 n O ( n )
Il s'agit d'une question théorique motivée par ma réponse à une question math.SE Comment trouver une formule pour cette bijection? . Dans cette question, l'auteur a voulu trouver une bijection à partir de et les nombres naturels . J'ai proposé comme solution. Une autre réponse y affirmait "il n'y a pas de formule simple", ce qui me fait me demander à quel point (sur le plan du calcul) la solution proposée est simple.N = { 1 , 2 , … } 2 m 3 n ↦ 2 m ( 2 n + 1 )
Avec ma solution proposée, si nous connaissons et , nous pouvons facilement calculer (écrire les chiffres binaires de suivi de suivi de zéros). Cela prend du temps .m 2 m ( 2 n + 1 ) n 1 m O ( n + m )
Trouver partir des bits de revient à trouver le bit le moins significatif (qui peut être calculé en comptant les décalages de bits à droite, en laissant en mémoire). Cela prend du temps .2 m 3 n 3 n O ( m )
Cependant, nous devons également trouver , ce qui pourrait être plus difficile. Il serait possible de trouver en divisant à plusieurs reprises par , mais cela semble inutile. Cela nécessite opérations de division, chacune prenant du temps , c'est donc un temps au total. [En fait, après chaque itération, le nombre de chiffres diminuera linéairement, mais cela se traduira toujours par un temps .]n 3 n O ( n ) O ( n 2 ) O ( n 2 )
Il semble que nous devrions être en mesure d'exploiter sachant que l'entrée est une puissance de .