计算大整数的位数


10

给定二进制表示的两个整数和n,计算x n的位大小的复杂度是多少?xnxn

这样做的一种方式是计算通过计算的近似日志2(X )以足够的精度。看来可以在O (M (k )log k )中完成以k位精度计算log 2(x ),其中M (1+⌊log2⁡(xn)⌋=1+⌊nlog2⁡(x)⌋log2⁡(x)log2⁡(x)kO(M(k)log⁡k)是计算长度为 k的两个整数的乘积所需的时间。如果 s是 x和 n 的位大小的边界(如果我没有出错),这将产生一个复杂度大约为 O (s log 2 s )的(不是特别简单的)算法。M(k)kO(slog2⁡s)sxn

我们可以击败,其中s是x和n的大小(如果它们具有可比较的大小)?是否有一种简单的算法可以使这种复杂性更好?O(slog2⁡(s))sxn

注意:我对诸如图灵机之类的理论模型的复杂性感兴趣。


建议将其迁移/“推广”到理论计算机科学
— vzn14年

@vzn:我认为这没有用...
— Bruno

为什么不?这个问题让我想起了上Dysons猜想例如算法的攻击,如覆盖RJLipton 1,2
— VZN

仅仅是因为我找到了问题的答案,所以无需在其他地方问这个问题。
— 布鲁诺2014年

Answers:


1

[编辑]根据建议,我编辑答案以提供更多详细信息。

我的第二个问题的答案是否定的:

主张。计算高达精度k的至少与计算x 2 k的位大小一样困难。log⁡(x)kx2k

证明。让表示整数y的位大小。第一通知,对于非负整数ÿ,的比特大小ý是1 + ⌊ 日志ÿ ⌋。|y|yyy1+⌊log⁡y⌋

因此,。现在2 k log (x ) 是log (x )向左移动k个位置。因此,只需将x 2 k的位大小减1,然后将结果k的位置向右移动,就可以计算出精度为k的log (x )。|x2k|=1+⌊2klog⁡x⌋2klog⁡(x)log⁡(x)klog⁡(x)k1x2kk


1
为什么的位数可以让您计算对数x到k的精度?您的减少实际有效吗?如果n = 2 k的特殊情况比n的所有其他可能值(非2的幂)容易/难得多,该怎么办?您有办法排除这种可能性吗?x2klog⁡xkn=2kn
— DW

@DW:vzn发表评论后,我回到这个问题。我的证明如下:一个整数的比特的数量是1个+ ⌊ 日志ÿ ⌋。因此,位的数量X 2 ķ是1个+ ⌊ 2 ķ日志X ⌋。此外,2 k log x与log x相同,但将k个位置向左移动。因此,⌊ 2 ķ日志X ⌋给你(至少)ķ的第一比特y1+⌊log⁡y⌋x2k1+⌊2klog⁡x⌋2klog⁡xlog⁡xk⌊2klog⁡x⌋k。因此,如果您可以通过将结果减 1来计算 x 2 k的位数,则可以获得 log x的前 k位。这有意义吗?log⁡xx2k1klog⁡x
— 布鲁诺2014年

是的,这对我来说更有意义!特别是因为您只是试图显示硬度。我可以鼓励您使用更详细的说明来更新您的答案吗?感谢您返回此文档,并记录下您自己问题的答案。
— DW
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.