【问题标题】:Generate an array of the first M N-Bonacci Numbers生成前 M 个 N-Bonacci 数的数组
【发布时间】:2020-08-17 03:36:55
【问题描述】:

我很难理解这个问题的解决方案:

我们要编写一个函数来生成前 M 个 N-Bonacci 数。例如,如果 N = 2,那么这就是斐波那契数列 {0, 1, 2, 3, 5 ... }。如果 N = 3,则每个元素都是前 3 个数字 {0, 0, 1, 1, 2, 4, 7, ... } 的总和。

根据这个问题的解法,第i个N-Bonacci数,等于

nbonacci[i] = nbonacci[i - 1] + nbonacci[i - 1] - nbonacci[i - N - 1]

谁能解释一下这个想法是如何产生的?我知道这是一个动态编程问题,我只是不明白如何自己想出这个公式。那么在高层次上,您具体怎么看这个?

【问题讨论】:

    标签: algorithm dynamic-programming array-algorithms


    【解决方案1】:

    我们知道:

    BN(i)     = BN(i-1) + BN(i-2) +     ...       + BN(i-N)
    

    也就是说

    BN(i-1)             = BN(i-2) + BN(i-3) + ... + BN(i-N) + BN(i-N-1)
    

    我所做的只是用i-i 替换定义中的i

    换句话说(从等式两边减去最后一项):

    BN(i-1) - BN(i-N-1) = BN(i-2) + BN(i-3) + ... + BN(i-N)
    

    现在,我将这个等式代入第一个。 (你可以看到这个等式的右边正好是第一个等式的尾部,所以我可以替换这个等式的左边。)

    BN(i)     = BN(i-1) + BN(i-1) - BN(i-N-1) 
    

    这为您提供了简化的公式,可以在没有循环的情况下对其进行评估。

    【讨论】:

    • 也许更简单一点(我想我在实践中如何得到这个公式)是做 B_N(i) - B_N(i-1) = B_N(i-1) - B (i-N-1) 一旦你得到了前两行。当然在某种程度上是一样的,但是当你有一个和和的递归关系时,减去相邻项的想法一次又一次地出现。
    猜你喜欢
    • 1970-01-01
    • 2016-03-27
    • 2012-11-25
    • 2013-02-24
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多