【发布时间】:2016-05-27 09:23:18
【问题描述】:
斐波那契数列是从0和1开始,然后将最后两个数字相加得到下一个。
所有正整数都可以表示为一组斐波那契数的总和,而无需重复。例如:13 可以是集合 {13}、{5,8} 或 {2,3,8} 的总和。但是,正如我们已经看到的,一些数有不止一个集合,其总和就是这个数。如果我们添加集合不能有两个连续的斐波那契数的约束,那么我们对每个数都有一个唯一的表示。
我们将使用二进制序列(只有零和一)来做到这一点。例如,17 = 1 + 3 + 13。那么,17 = 100101。详细解释见图2。
我想把一些整数变成这个表示,但是整数可能非常大。如何有效地做到这一点。
【问题讨论】:
-
en.wikipedia.org/wiki/Fibonacci_coding 表明贪婪的方法确实有效。
-
非常大是什么意思?它们适合 64 位吗?
-
小于 100 斐波那契适合 64 位。因此,如果您的整数被限制为 64 位,只需硬编码一个包含您需要的所有 fib 数字的表。请参阅此处的列表或自己计算一次。 maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html