Tribonacci系列具有不同的初始值

时间:2012-09-08 13:11:35

标签: algorithm math

如果初始值是一些任意数字,如果1,2 3即T(1)= 1,T(2)= 2和T(3)= 3,如何用矩阵乘法法找到第n个tribonacci数。

如果T(n)= T(n-1)+ T(n-2)+ T(n-3)那么如果n非常大,如何找到T(n),如果有人可以,我将不胜感激用矩阵乘法法解释。如何构造初始矩阵。

2 个答案:

答案 0 :(得分:10)

矩阵乘法方法涉及使用矩阵递归关系。

对于Fibonacci系列,我们可以定义一个长度为2的向量来表示相邻的Fibonacci数。使用此向量,我们可以使用矩阵乘法定义递归关系:

enter image description here

同样,Tribonacci系列递归关系可以用这种方式编写:

enter image description here

唯一的区别是矢量和矩阵大小不同。

现在,要计算一个大的Tribonacci数,我们只应用矩阵乘法n次,我们得到:

enter image description here

可以有效地计算n(M n )幂的矩阵,因为我们可以使用求幂算法。

维基百科在Exponentiation by Squaring中描述了许多用于标量的有效取幂算法。我们可以使用相同的思想进行矩阵求幂。

我将描述一种简单的方法。首先,我们将n写为二进制数,例如:

n = 37 = 100101

然后,通过平方先前的2的幂来计算M的每个幂2:M 1 ,M 2 = M 1 M 1 ,M 4 = M 2 M 2 ,M 8 = M < sup> 4 M 4 ,M 16 = M 8 M 8 ,M 32 = M 16 M 16 ,......

最后,乘以对应于n的二进制数字的M的幂。在这种情况下,M n = M 1 M 4 M 32

在计算之后,我们可以将矩阵与前三个值的Tribonacci向量相乘,即。

enter image description here

因为矩阵具有固定的大小,所以每个矩阵乘法需要恒定的时间。我们必须进行O(log n)矩阵乘法。因此,我们可以在O(log n)时间内计算出n th Tribonacci数。

将此与常规动态编程方法进行比较,通过计算每个Tribonacci数直到n th Tribonacci数(即O(n)),需要for (i = 3 to n) {T[i] = T[i-1]+T[i-2]+T[i-3];} return T[n];时间。


我将假设您知道如何使用您选择的语言对矩阵乘法进行编码。

答案 1 :(得分:4)

考虑:

                           | a1 b1 c1 |
[f(n) f(n - 1) f(n - 2)] * | a2 b2 c2 | = [f(n + 1) f(n) f(n - 1)]
                           | a3 b3 c3 |

根据该矩阵找到矩阵中的未知数,这将是您想要的矩阵。

本案的答案是:

1 1 0
1 0 1
1 0 0

该方法是通用的,但是,即使你在k之前的术语求和,即使它们前面有常量等,它也能正常工作。