Peut-on calculer


11

Je cherche un algorithme efficace pour le problème:

Entrée : l'entier positif (stocké sous forme de bits) pour un entier . n 03nn0

Sortie : Le nombre .n

Question : Peut-on calculer partir des bits de en temps ?3 n O ( n )n3nO(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 n2 m ( 2 n + 1 )

{2n3m:n0 et m0}
N={1,2,}
2m3n2m(2n+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 )nm2m(2n+1)n1mO(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 )m2m3n3nO(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 )nn3nO(n)O(n2)O(n2)

Il semble que nous devrions être en mesure d'exploiter sachant que l'entrée est une puissance de .3


2
Quel est votre modèle exact de calculs? Quelles opérations sont autorisées en temps ? (Si nous pouvions faire de l'arithmétique avec des nombres tels que log 2 3, ce serait très utile ...)O(1)Journal23
Yuval Filmus

3
Le downvoter peut-il expliquer le downvote? Cela ne semble pas du tout être une question banale. Quel est le meilleur temps de fonctionnement sous un modèle de calcul raisonnable?
Yuval Filmus

1
J'imagine des bandes avec des 0, des 1 et des cellules vides (avec un nombre infini de bandes). Je souhaite que les opérations de basculement d'un bit et de décalage gauche / droite s'exécutent en temps . (Si nous avons un marqueur le 0-ème bit sur une bande infinie, alors le décalage gauche / droite est obtenu en décalant le marqueur). Contrairement à une machine Turing, je ne veux pas que cela prenne du temps pour déplacer un pointeur. Ainsi, "basculer le 0-ème bit" prend le même temps que "basculer le 124126-ème bit". O(1)
Rebecca

Cela pourrait être en quelque sorte lié à cette question
J.-E.

La borne inférieure de évidente? Ω(n)
Boris Bukh

Réponses:


9

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 1log2(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(Journal1ϵ)ϵ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(Journaln)

(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.


3
Je crois que le calcul de à t bits de précision prend du temps O ( M ( t ) log t ) , où M ( t ) O ( t log t 2 log t ) est le temps de multiplier t -bit Nombres. Voir Brent - Zimmermann, loria.fr/~zimmerma/mca/pub226.htmlJournal2(3)tO(M(t)Journalt)M(t)O(tJournalt2Journalt)t
Ryan O'Donnell

Merci pour la référence, et excuses d'être trop paresseux pour le rechercher moi-même.
David Eppstein

9

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>03nL=Journal2(3n)+1 Pour toute longueur de bitL1, 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

L-2Journal23nL-1Journal23.
L13L
n=L-1Journal23.

4

k3n3nmoddixk3nmod5k35k3φ(5k)=5k-1×4

nmodφ(5k)k3nnmod43n3nmod535nmod4O(1)3nmod25e25nmod20O(1)nmod45nmodφ(5k-1)3nmod5k5nmodφ(5k)

kn

O(n)k=O(n)O(1)O(n)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.