2016-08-16 72 views
0

是否有可能非常大的十进制数(含d位)二进制表示转换在O(d)时间?转换带10^6个数字的十进制数到它的二进制表示

这里d = log(n),其中d是十进制数中的数字,即:例如10^6。所以这个数字明显小于10 ^(10^6)。

如果有一个算法,需要O(d)O(d Ç步骤。请分享。其中d是十进制数中的位数。

+5

如果我阅读正确,答案是否定的,您不能将十进制数转换为O(log n)中的二进制表示,其中n是数字位数。由于每个数字都需要扫描,因此时间复杂度至少为O(n)。如果我没有正确阅读,你应该解决你的问题。 –

+1

该语言与缩放到数字位数的时间应该没有多大关系。 – Evert

+0

我正在尝试为10^6数字的数字找到二进制表示。任何人都可以建议一个最佳的方式来这样做? –

回答

3

O(d)没有一个。

证明(不严格):

甲十进制数可写成的总和超过x(k)*10^kk,其中x(k)k个数位(起始于至少显著数字)。

10由两个因子2和5组成。2是一个简单的位移,但是5具有2位设置。这样做的结果是,在添加数字k时必须加以处理的位数不受任何常数的限制。对于任何konstant m,有一个k,使得1*10^k中的非零位数大于m

因此,每位数字所需的(最大)工作量将不会保持不变,随着k的增加,它将增加。