关于Fibonacci数所需的位数

时间:2011-03-09 15:44:10

标签: algorithm

我正在阅读S.DasGupta的算法书。以下是有关第n个Fibonacci数所需的位数的文本的文本片段。

  

将加成视为合理是合理的   单个计算机步骤,如果小   正在添加数字,32位   数字说。但第n个斐波那契   数字是关于   0.694n位长,随着n的增长,这可能远远超过32。算术   任意大的操作   不可能执行数字   在一个单一的,恒定的时间步骤。

我的问题是,例如,对于Fibonacci数F1 = 1,F2 = 1,F3 = 2,依此类推。然后用上述公式中的“n”代替,即F1的0.694n约为1,F2约为2位,但对于F3等,上述公式失败。我想我并不理解作者在这里的意思,任何人都可以帮助我理解这个吗?

由于

7 个答案:

答案 0 :(得分:7)

那么,

n              3    4     5     6     7     8
0.694n         2.08 2.78  3.47  4.16  4.86  5.55
F(n)           2    3     5     8     13    21
bits           2    2     3     4     4     5
log(F(n))      1    1.58  2.32  3     3.7   4.39

所需位数是基础2日志的四舍五入,所以这对我来说足够接近。

值0.694来自F(n)是与(φ n )/√5最接近的整数这一事实。因此log(F(n))n * log(phi) - log(sqrt(5))log(phi)为0.694。随着n越来越大,log(sqrt(5))和四舍五入迅速变得无足轻重。

答案 1 :(得分:2)

private static int nobFib(int n)  // number of bits Fib(n)  
{
    return n < 6 ? ++n/2 : (int)(0.69424191363061738 * n - 0.1609640474436813);
}  

检查n为0到500.000,n = 500.000.000,n = 1.000.000.000
它基于比奈的公式 需要它:Fibonacci序列二元图。 请参阅:http://bigintegers.blogspot.com/2012/09/fibonacci-sequence-binary-plot-edd-peg.html

答案 2 :(得分:1)

首先,about这个词非常重要,就像the nth Fibonacci number is about 0.694n bits long一样。其次,我认为作者的意思是n->infinity。尝试一些大号并检查:)

答案 3 :(得分:0)

你不能说半个......必须舍入的位数

所以这意味着

number of bits = Math.ceil(Math.max(0.694*n,32));

因此,对于n&lt; 32

,其向上取整为n> 32和32

用于32位系统

并且数字可能不准确

答案 4 :(得分:0)

我认为他只是使用Fibonacci数字来说明他的观点,即对于大数(> 32位)的加法不能再被认为是常数,因为它不仅仅涉及CPU上的单指令。

为什么公式失败?对于F3 = 2,二进制表示需要2位(3 * 0.694 = 2.082)取F50 = 12586269025,可以使用33位(50 * 0.694 = 35)表示,这仍然合理地接近真实值。

答案 5 :(得分:0)

N    F(N)      0.694*N
1      0         1       
2      1         1
3      1         1
4      2         2
5      3         2
6      5         3
7      8         4
8     13         4

等。这是我的解释。但是,这意味着你必须在超过32位之前得到f(47)= 1,836,311,903。

答案 6 :(得分:0)

作者基本上描述了大数字如何影响算法的性能。过于简单,处理器可以非常快速地添加寄存器大小的数量,如果数字超过寄存器大小,则需要执行更低级别的处理器指令。