计算大整数的位数


10

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

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

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

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


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

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

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

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

Answers:


1

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

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

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

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

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


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

@DW:vzn发表评论后,我回到这个问题。我的证明如下:一个整数的比特的数量1个+ 日志ÿ 。因此,位的数量X 2 ķ1个+ 2 ķ日志X 。此外,2 k log xlog x相同,但将k个位置向左移动。因此,2 ķ日志X 给你(至少)ķ的第一比特y1+logyx2k1+2klogx2klogxlogxk2klogxk。因此,如果您可以通过将结果减 1来计算 x 2 k的位数,则可以获得 log x的前 k位。这有意义吗?logxx2k1klogx
布鲁诺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.