À quelle distance pouvons-nous arriver à multiplier, ajouter et comparer linéairement (sur des entiers)?

21

Selon l'article de KW Regan "Connect the Stars" , il mentionne à la fin qu'il est toujours difficile de trouver une représentation des nombres entiers de sorte que les opérations d'addition, de multiplication et de comparaison sont calculables en temps linéaire:

Existe-t-il une représentation d'entiers de sorte que l'addition, la multiplication et la comparaison sont toutes réalisables en temps linéaire? Fondamentalement, existe-t-il un anneau linéaire ordonné discrètement?

(1) Dans quelle mesure pouvons-nous nous rapprocher de la multiplication et de l'addition linéaires du temps, sans comparaison? Ici, je suppose que les tailles de problème peuvent varier, de sorte que nous pouvons avoir besoin d'une structure / algorithme de données qui permet de changer les tailles entières.

(2) Pour le problème complet, nous pouvons supposer que nous trouverons un schéma optimal pour multiplier, additionner et comparer sur les entiers. À quelle distance pouvons-nous obtenir le plus lent de ces trois opérations (dans le pire des cas) vers le temps linéaire? Et sur cette note, quelle serait la vitesse des autres opérations?

DÉCLARATION FORMELLE DU PROBLÈME

Comme Emil Jeřábek le mentionne, nous aimerions exclure les cas insignifiants et nous concentrer sur le pire des cas pour cette question.

Nous demandons donc, pour les entiers non négatifs et où et , pouvons-nous trouver une structure / algorithme de données qui peut effectuer l'addition, la multiplication et la comparaison avec \ entre et dans temps et espace?xy0 y < n0x<n0y<nxyO(nlog(n))O(log2(n))

Matt Groff
la source
1
Je mentionnerai qu'il est possible de créer un schéma qui effectue ces opérations dans le temps sur des entiers non négatifs, où est la taille du plus grand entier (en supposant que nous connaissons avance). Je me demande si nous pouvons faire mieux, et cela en temps proportionnel aux nombres entiers en cours de calcul. n nΘ(n)nn
Matt Groff
5
@TysonWilliams: Oui! Binaire!
Jeffε
2
Au lieu d'obtenir un temps linéaire pour toutes ces opérations, y a-t-il une représentation d'entiers pour que toutes ces opérations aient le temps ? O(nlogn)
Emil Jeřábek soutient Monica
4
En fait, il y a une réponse positive triviale: représenter des entiers en binaire avec bits de remplissage. La déclaration ne devrait-elle pas inclure une condition selon laquelle la représentation devrait avoir une longueur linéaire dans la longueur de la représentation binaire? n2
Emil Jeřábek soutient Monica
5
@ EmilJeřábek: Je suppose qu'il veut que la représentation de tout entier utilise f ( n ) bits, pour une fonction f ( n ) = Θ ( log n ) . nF(n)F(n)=Θ(Journaln)
Jeffε

Réponses:

14

Probablement pas la meilleure réponse, mais c'est peut-être un point de départ utile. Si nous souhaitons représenter un entier non négatif, nous pouvons le stocker comme un ensemble de résidus nombres premiers séquentiels modulo à partir de 2. Dans cette forme, la comparaison est potentiellement difficile, mais la multiplication et l'addition peuvent être effectuées assez rapidement. Le produit des premiers nombres premiers est approximé par p n # = exp ( ( 1 + o ( 1 ) ) n log n ) . Par conséquent, pour représenter un entier N, vous avez besoin de résidus modulo les n premiers nombres premiers, oùn

pn#=exp((1+o(1))nJournaln).
Nn . Puisque nous pouvons représenter tout N < p n # en utilisant les résidus modulo les n premiers résidus premiers, nous pouvons prendre n log n log ( N ) . L'addition et la multiplication peuvent se faire directement entre des paires de résidus. Il existe n de telles paires, le nombre maximal maximal se situant autour de n log ( n ) . Ainsi, l'addition devraitN<exp((1+o(1))nJournaln)N<pn#nnJournalnJournal(N)nnJournal(n) , tandis que la multiplication via Schonhage-Strassen doit être dans O ( n log log ( N ) log log log log ( N ) log log log ( N ) ) . Puisque n log n log N , alors une approximation grossière donne n dans O ( log N / log log N )O(nJournalJournal(N))O(nloglog(N)loglogloglog(N)logloglog(N))nlognlogNnO(logN/loglogN). Cela donnerait la complexité de l'addition et de la multiplication comme approximativement et O ( log N log log log N log log log log N ) .O(logN)O(logNloglogJournalNJournalJournalJournalJournalN)
Joe Fitzsimons
la source
1
voir aussi le théorème du reste chinois
vzn
1
@vzn: Oui, j'allais le mentionner pour les comparaisons, mais il m'est alors venu à l'esprit qu'il pourrait y avoir une opération de comparaison plus rapide via une représentation mixte de radix.
Joe Fitzsimons