Quel est l'algorithme le plus efficace pour la divisibilité?

12

abababO(mlogmloglogm)mmax{a,b}Ω(mlogmloglogm) la limite inférieure de ce problème?

Merci et salutations, et désolé si c'est une question aussi naïve.

Leandro Zatesko
la source
AFAIK il n'y a pas de limites inférieures non triviales connues. Je crois que la multiplication et la division sont connues pour avoir essentiellement la même complexité (bien que cela puisse être jusqu'à un facteur logarithmique?) Via la méthode de Newton, et puisqu'il n'y a pas de limite inférieure non linéaire connue sur la multiplication, alors je pense que toute limite inférieure de la forme vous dites que ce serait un résultat majeur.
Steven Stadnicki
(En fait, en regardant maintenant, je pense que le facteur de journal de log disparaît parce que si vous faites un nombre non constant de multiplications, elles ne sont pas toutes de la même longueur, donc les facteurs super-linéaires peuvent être absorbés de la même manière que, par exemple, est toujours linéaire en même s'il a un nombre non constant de facteurs "linéaires".)k=1lgnn2kn
Steven Stadnicki

Réponses:

4

Remplir mes commentaires d'une réponse: puisque la divisibilité est (trivialement) réductible à la division, et puisque la division est (non trivialement) réductible à la multiplication via des approches comme la méthode de Newton, alors votre problème devrait avoir la même complexité temporelle que la multiplication entière. AFAIK, il n'y a pas de bornes inférieures connues pour la multiplication mieux que la linéaire linéaire, donc la même chose devrait être vraie de votre problème - et en particulier, car la multiplication est connue pour avoir (essentiellement) algorithmes, vos espoirs pour une borne inférieure sont presque certainement vains.O(nlognlogn)nlognloglogn

La raison pour laquelle la division réduit précisément la complexité à la multiplication - si je comprends bien - est que la méthode de Newton effectuera une séquence de multiplications de différentes tailles croissantes; cela signifie que s'il existe un algorithme de multiplication avec la complexité alors la complexité d'un algorithme de division utilisant cet algorithme de multiplication comme étape intermédiaire sera le long de - et pour toutes les classes de complexité discutées, ce n'est que .Θ(f(n))Θ(k=0lgnf(n2k))Θ(f(n))

Steven Stadnicki
la source
2
Nitpick: Je ne vois pas comment vous obtenez une limite inférieure de ce type de raisonnement, même si nous supposons qu'il n'y a pas de meilleurs algorithmes de multiplication que les meilleurs actuellement connus. Vos réductions impliquent que la divisibilité n'est pas plus difficile que la multiplication. Mais il est toujours possible que la divisibilité soit plus facile que la division et plus facile que la multiplication, car la divisibilité ne nécessite qu'une réponse oui / non au lieu d'un nombre. (Au moins, la réduction que vous mentionnez ne semble pas exclure cela.)
DW
2
@DW D'accord, et c'est un excellent point; mais je n'essayais pas d'obtenir une limite inférieure. Au contraire, le fait est que toute borne inférieure sur la divisibilité implique la borne inférieure correspondante sur la multiplication, et comme aucune de ces bornes n'est connue au-delà de la borne linéaire triviale, alors obtenir une borne inférieure meilleure que linéaire sur la divisibilité (qui fait partie de ce que OP demandé) est peu probable.
Steven Stadnicki
@DW Je ne serais pas totalement choqué d'apprendre une limite supérieure linéaire sur la divisibilité, et comme vous le dites, cela n'impliquerait rien spécifiquement sur les limites supérieures de la multiplication, mais il n'y a pas de résultats spécifiques dans cette direction AFAIK.
Steven Stadnicki
-2

Je pense qu'il existe des hacks de type védique pour certains nombres se terminant par 3,7 etc. Ou diviseurs de base 2 ^ n ...

Mais de manière générale, l'algorithme de division le plus rapide semble être la norme.

Le meilleur que je connaisse sans regarder est l'algorithme D des méthodes séminariques de Knuth ... Mais je n'ai jamais vérifié son exactitude. Il s'exécute plus ou moins O (mn-n ^ 2) où m et n sont le dividende et le diviseur ... sans factoriser la complexité de multiplication ...

Une borne inférieure pourrait cependant être étonnamment basse car votre question ne concerne que le problème de décision.

Phil
la source