k-斐波那契算法

标签 algorithm fibonacci

我们都知道 k = 2 时的斐波那契数列。

即:1,1,2,3,5,8,13

但这是 2-斐波那契数列。像这样,我可以数三次斐波那契:

1,1,2,4,7,13,24

和 4-斐波那契:

1,1,2,4,8,15,29

……等等

我要问的是一种计算 k-斐波那契数列内的“n”元素的算法。

像这样:如果我要求 fibonacci(n=5,k=4),结果应该是:8,即 4- 中的第五个元素斐波那契数列。

我没在网上找到它。提供帮助的资源可能是 mathworld

有人吗?如果你知道 python,我更喜欢。但如果没有,任何语言或算法都可以提供帮助。

提示我认为这会有所帮助: 让我们分析一下 k-斐波那契数列,其中 k 从 1 到 5

k    fibonacci series

1    1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, ...
2    1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
3    1, 1, 2, 4, 7, 13, 24, 44, 81, ...
4    1, 1, 2, 4, 8, 15, 29, 56, 108, ...
5    1, 1, 2, 4, 8, 16, 31, 61, 120, ...

分析这一点,我们可以看到 k-斐波那契数列上的数组 [0:k] 等于 之前的斐波那契数列,一直持续到 k=1

即(我会尝试展示,但我找不到正确的表达方式):

k    fibonacci series

1    1, 
2    1, 1, 
3    1, 1, 2, 
4    1, 1, 2, 4, 
5    1, 1, 2, 4, 8, 

希望我以某种方式帮助解决了这个问题。

[python 中的解决方案(如果有人需要)]

class Fibonacci:

    def __init__(self, k):
        self.cache = []
        self.k = k

        #Bootstrap the cache
        self.cache.append(1)
        for i in range(1,k+1):
            self.cache.append(1 << (i-1))

    def fib(self, n):
        #Extend cache until it includes value for n.
        #(If we've already computed a value for n, we won't loop at all.)
        for i in range(len(self.cache), n+1):
            self.cache.append(2 * self.cache[i-1] - self.cache[i-self.k-1])

        return self.cache[n]


#example for k = 5
if __name__ == '__main__':
    k = 5
    f = Fibonacci(k)
    for i in range(10):
        print f.fib(i),

最佳答案

与 2-fibonacci 一样,动态规划是必经之路。记住早期的​​值 k s 快速计算后面的,在 O(n)时间。

另一个优化,您可以使用它来提高 k 的大值的速度而是添加 f(n-k)通过f(n-1)得到f(n) ,而只是使用 (2*f(n-1)) - f(n-k-1) .由于这仅使用 2 次查找、2 次加法和一次乘法,因此它远远优于 k。查找和 k添加时 k变大(但它仍然是 O(n) ,只是一个较小的常量乘数)。

关于k-斐波那契算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122291/

相关文章:

algorithm - 找到所有路径的复杂度是多少

algorithm - 决策树中叶子的最短可能深度(比较排序算法)

c - 调试 C 程序以求 400 万以下斐波那契数列的所有偶数项之和

c - C斐波那契实现中的循环终止

c++ - 两个数字之间的斐波那契数列

algorithm - 此循环的大 O 复杂度

algorithm - 另一个 Pollard Rho 实现

ruby-on-rails - 跟踪值(value)随时间变化的算法

python-2.7 - 在 while 循环中增加列表索引

python-3.x - 2个问题,Python OverflowError : (34, 'Result too large' ) and wrong function results