查找等于一个数字的二项式系数的复杂性


19

假设您得到一个数字m(使用二进制编码中的O(logm)位)。

您能在(找到(或确定不存在)n,k \的速度有多快

ñķñ1个<ķñ2ñķ=

例如,给定输入=8436285,可以输出ñ=27ķ=10


针对该问题的幼稚算法将遍历n的所有可能值ñ,并搜索满足该属性的kķ

一个简单的观察结果是,无需检查小于\ log m或大于O(\ sqrt m)n值。但是(即使我们只能检查每个nO(1)个可能的k值),这最终导致效率低下的算法,该算法的输入大小成指数增长。ñ日志ØØ1个ķñ

一种替代方法是遍历k的可能值ķ(足以检查{232日志}),并为每次检查确定可能的ñ值。然后,我们可以使用:

ñķķ<ñķ<ñķķ

因此,对于一个给定的我们只需要检查在范围内的值,使用二进制搜索(当固定时,在单调递增),这给出了在。ķñ[ķķķķ]ķñķñØ日志2

这对我来说似乎仍然效率低下,我想这可以在线性时间(输入大小)中解决。


4
你都尝试了些什么?提示:假设也给出了。那你能解决这个吗?的可能值范围是多少?或者,假设为给定值;在那种情况下你能解决吗?的可能值的范围是多少?Ñ ķ ķññķķ
DW

Answers:


1

是不正确的。例如。 9ñ-ķķ<ñķ92=36<49=9-22

我尚未(使用二项式系数的算术属性)找到一种微妙的解决方案,但是如果有帮助,我可以建议使用一种蛮力的解决方案:-)

你可以,对于每个,求解通过采取初始猜测(比方说),并使用分析方法例如牛顿-拉夫逊。您想求解。相对于的左侧导数为,其中是digamma函数,易于计算。Ñ ķ ķñ ÑķķÑψÑ+1-ψñ-ķ+1 Ññķ-=0ñ ψψñ+1个-ψñ-ķ+1个ñķψ

Newton-Raphson搜索的复杂度仅取决于计算函数及其导数的复杂度以及解决方案所需的位数(在我们的情况下,我们只需要最接近的整数)。

所以,总体来说每个搜索应该是(假设,你似乎都做了,该计算二项式系数需要一定的时间),因此对于使用范围为算法的总复杂将是ķØ1个ķØ日志


2
虽然我同意没有界线(请参见编辑,谢谢),您能解释一下为什么给定O 1 )进行搜索吗?ķØ1个
RB 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.