Complexité de la recherche d'un coefficient binomial égal à un nombre

19

Supposons que vous obtenez un nombre (en utilisant bits dans le codage binaire).mO(logm)

À quelle vitesse pouvez-vous trouver (ou déterminer qu'il n'existe pas)

n,kN,1<kn2:(nk)=m
?

Par exemple, étant donné l'entrée m=8436285 , on peut sortir n=27,k=10 .


Un algorithme naïf pour le problème passerait en revue toutes les valeurs possibles de n et rechercherait une valeur de k qui satisfasse la propriété.

Une observation simple est qu'il n'est pas nécessaire de vérifier des valeurs de n inférieures à logm ou supérieures à O(m) . Cependant (même si nous ne pouvions vérifier que O (1) valeurs kO(1) possibles par valeur n ), cela aboutit à un algorithme inefficace qui est exponentiel dans la taille d'entrée.kn

Une approche alternative serait de passer en revue les valeurs possibles de k (il suffit de vérifier {2,3,,2logm} ) et pour chaque vérification des n valeurs possibles . On peut alors utiliser:

(nk)k<(nk)<nkk!

Donc, pour un k donné, kil suffit de vérifier n valeurs dans la plage [mk!k,mkk] , en utilisant la recherche binaire (lorsque k est fixe, (nk) augmente de façon monotone dans n ), cela donne un algorithme polynomial fonctionnant en O(log2m) .

Cela me semble toujours inefficace et je suppose que cela pourrait être résolu en temps linéaire (dans la taille d'entrée).

RB
la source
4
Qu'avez-vous essayé jusqu'à présent? Astuce: Supposons que n été donné. Pourriez-vous résoudre ce problème alors? Quelle est la plage de valeurs possibles pour n ? Ou, supposons que k été donné; pourriez-vous le résoudre dans ce cas? Quelle est la plage de valeurs possibles pour k ?
DW

Réponses:

1

Il n'est pas vrai que (nk)k<(nk) . Par exemple (92)=36<49=(92)2 .

Je n'ai pas (encore) trouvé de solution subtile utilisant les propriétés arithmétiques des coefficients binomiaux, mais je peux suggérer une solution quelque peu bruteforce si cela aide :-)

Vous pouvez, pour chaque , résoudre pour en faisant une supposition initiale (par exemple ) et en utilisant une méthode analytique telle que Newton-Raphson. Vous voulez résoudre . La dérivée du côté gauche par rapport à est où est la fonction digamma, qui est facile à calculer .knk!mk(nk)m=0n(ψ(n+1)ψ(nk+1))(nk)ψ

La complexité d'une recherche de Newton-Raphson dépend uniquement de la complexité du calcul de la fonction et de sa dérivée, et du nombre de chiffres requis pour la solution (dans notre cas, nous avons juste besoin de l'entier le plus proche).

Donc, globalement, pour chaque la recherche devrait être (en supposant, comme vous semblez l'avoir fait, que le calcul d'un coefficient binomial prend un temps constant), la complexité totale de l'algorithme utilisant vos bornes pour serait donc .kO(1)kO(log(m))

David Durrleman
la source
2
Bien que je sois d'accord que les limites étaient éteintes (voir modifier, merci pour cela), pouvez-vous expliquer pourquoi la recherche, étant donné que prend ? kO(1)
RB