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 .
la source
Réponses:
L'approche évidente est:
(1) Calculez une approximation pour . Vous pouvez approcher à l' intérieur d' une erreur de l' additif 1 en comptant le nombre de bits dans la représentation binaire donnée, et à l' intérieur d' une erreur d'additif ε en regardant en outre au sommet O ( log 1Journal2( 3n) ϵ bits de l'entrée. Il suffirait de choisir une valeur constante deε,sorte que (après combinaison avec l'erreur dansétape (2)) Le résultat final extrémités au seinune erreur additifune/2de correct.O ( log1ϵ) ϵ 1 / 2
(2) Calculez une approximation pour . Je ne connais pas les algorithmes pour cela, mais je m'attends à ce qu'ils prennent un polynôme temporel dans le nombre de bits de précision dont vous avez besoin, et vous n'avez besoin que de O ( log n ) bits de précision.Journal2( 3 ) O ( logn )
(3) Divisez la réponse à (1) par la réponse à (2) et arrondissez à l'entier le plus proche.
Ainsi, la première étape prend du temps linéaire (dans la plupart des modèles de calcul, mais peut-être pas pour certains sous-alimentés comme les machines de Turing à tête unique ) et les étapes restantes doivent être polylogarithmiques.
la source
Pour tout entier , l'écriture de 3 n en binaire nécessite exactement L = ⌈ log 2 ( 3 n ) + 1 ⌉ bits. Une algèbre élémentaire implique que L - 2n > 0 3n L = ⌈ log2( 3n) + 1 ⌉
Pour toute longueur de bitL≥1, il y a au plus un entier dans cette plage. Ainsi, étant donné une puissance entière de3qui estLbitslong, l'exposant doit être le nombre entier
n=⌊L-1
la source
la source