Complexidade de encontrar o coeficiente binomial igual a um número


19

Suponha que você esteja obtendo um número m (usando O(logm) bits na codificação binária).

Quão rápido você pode encontrar (ou determinar que isso não existe) ?

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

Por exemplo, dada a entrada m=8436285 , pode-se produzir n=27,k=10 .


Um algoritmo ingênuo para o problema examinaria todos os valores possíveis para n e procuraria um valor de k que satisfaça a propriedade.

Uma observação simples é que não há necessidade de verificar valores n menores que logm ou maiores que O(m) . No entanto (mesmo se pudéssemos verificar apenas O(1) possíveis valores de k por n valor), isso termina em um algoritmo ineficiente que é exponencial no tamanho da entrada.

Uma abordagem alternativa seria revisar os possíveis valores de k (basta verificar {2,3,,2logm} ) e, para cada verificação, os possíveis n valores. Podemos então usar:

(nk)k<(nk)<nkk!

Portanto, para um determinado k , precisamos apenas verificar n valores no intervalo [mk!k,mkk] , ao fazer isso usando a pesquisa binária (quando k é corrigido, (nk) está aumentando monotonicamente em n ), isso fornece um algoritmo polinomial em execução em O(log2m) .

Isso ainda me parece ineficiente e acho que isso poderia ser resolvido em tempo linear (no tamanho da entrada).


4
O que você tentou até agora? Dica: suponha que n foi fornecido. Você poderia resolver isso então? Qual é o intervalo de valores possíveis para n ? Ou, suponha que k foi dado; você poderia resolvê-lo nesse caso? Qual é o intervalo de valores possíveis para k ?
DW

Respostas:


1

Não é verdade que (nk)k<(nk) . Por exemplo (92)=36<49=(92)2 .

Ainda não encontrei uma solução sutil usando propriedades aritméticas dos coeficientes binomiais, no entanto, posso sugerir uma força bruta, se isso ajudar :-)

Você pode, para cada , resolver adotando uma estimativa inicial (por exemplo, ) e usando um método analítico como Newton-Raphson. Você deseja resolver . A derivada do lado esquerdo em relação a é que é a função digamma, fácil de calcular .knk!mk(nk)m=0n(ψ(n+1)ψ(nk+1))(nk)ψ

A complexidade de uma pesquisa de Newton-Raphson depende apenas da complexidade da computação da função e de sua derivada e do número de dígitos necessários para a solução (no nosso caso, apenas precisamos do número inteiro mais próximo).

Portanto, para cada a pesquisa deve ser (assumindo, como você parece ter feito, que calcular um coeficiente binomial leva tempo constante); portanto, a complexidade total do algoritmo que usa seus limites para seria .kO(1)kO(log(m))


2
Embora eu concorde que os limites estejam desativados (consulte editar, obrigado por isso), você pode explicar por que a pesquisa, dado leva ? kO(1)
RB
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.