Complejidad de encontrar coeficiente binomial que es igual a un número

19

Suponga que está obteniendo un número m (usando bits O(logm) en codificación binaria).

¿Qué tan rápido puede encontrar (o determinar que tal no existe) ?

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

Por ejemplo, dada la entrada , uno puede generar .m=8436285n=27,k=10


Un algoritmo ingenuo para el problema revisaría todos los valores posibles para , y buscaría un valor de que satisfaga la propiedad.nk

Una observación simple es que no es necesario verificar valores de menores que mayores que . Sin embargo (incluso si pudiéramos verificar solo posibles valores por valor) esto termina en un algoritmo ineficiente que es exponencial en el tamaño de entrada.nlogmO(m)O(1)kn

Un enfoque alternativo sería repasar los posibles valores de (es suficiente para verificar ) y para cada verificación de posibles valores. Entonces podemos usar: k{2,3,,2logm}n

(nk)k<(nk)<nkk!

Entonces, para una dada solo necesitamos verificar valores en el rango , al hacerlo mediante la búsqueda binaria (cuando es fijo, aumenta monotónicamente en ), esto da un algoritmo polinomial que se ejecuta en .kn[mk!k,mkk]k(nk)nO(log2m)

Esto todavía me parece ineficiente y supongo que esto podría resolverse en tiempo lineal (en el tamaño de entrada).

RB
fuente
44
¿Qué has intentado hasta ahora? Sugerencia: Suponga que n se dio. ¿Podrías resolver esto entonces? ¿Cuál es el rango de valores posibles para n ? O suponga que se le dio k ; ¿podrías resolverlo en ese caso? ¿Cuál es el rango de valores posibles para k ?
DW

Respuestas:

1

No es cierto que (nk)k<(nk) . Por ejemplo, (92)=36<49=(92)2 .

No he encontrado (todavía) una solución sutil utilizando las propiedades aritméticas de los coeficientes binomiales, sin embargo, puedo sugerir una fuerza bruta si eso ayuda :-)

Podría, para cada , resolver tomando una conjetura inicial (por ejemplo, ) y utilizando un método analítico como Newton-Raphson. Desea resolver . La derivada del lado izquierdo con respecto a es donde es la función digamma, que es fácil de calcular .knk!mk(nk)m=0n(ψ(n+1)ψ(nk+1))(nk)ψ

La complejidad de una búsqueda de Newton-Raphson solo depende de la complejidad de calcular la función y su derivada, y el número de dígitos necesarios para la solución (en nuestro caso solo necesitamos el número entero más cercano).

Entonces, en general, para cada la búsqueda debería ser (suponiendo, como parece haberlo hecho, que calcular un coeficiente binomial toma tiempo constante), por lo tanto, la complejidad total para el algoritmo que usa sus límites para sería .kO(1)kO(log(m))

David Durrleman
fuente
2
Si bien estoy de acuerdo en que los límites estaban desactivados (ver edición, gracias por eso), ¿puedes explicar por qué la búsqueda, dado que toma ? kO(1)
RB