我正在做一个Microsoft面试问题,问题是要找到Tribonacci系列的N个项,其中n可以非常大(即10 ^ 18)。
我曾尝试在此问题上实现Dp,但由于本系列非常庞大,因此无法成功。
基本上尝试了一种简单的技术,在该技术中,我可以预先计算出某个术语的项,并将返回所需的答案,但是由于N不能达到10 ^ 18,因此无法成功。
T(n)= T(n-1)+ T(n-2)+ T(n-3)// T(0)= T(1)= 0,T(2)= 1 >
//如果T(n)是大商店T(n)= T(n)%10 ^ 9 +7
我知道我没有以最佳方式尝试解决此问题,我们将不胜感激。
P.S。抱歉,如果我在格式化问题时犯了任何错误。
答案 0 :(得分:0)
斐波那契类型的序列可以转换为将矩阵提升为幂的函数,而矩阵又可以通过使用重复平方来优化。我不确定为什么在面试问题中会问到这个问题,因为建立这种联系将需要该方法的先验知识(因为我怀疑有人在面试期间开发了这种算法)。
对于斐波那契序列{0,1,1,2,3,5 ...},矩阵为
M = 1 1
1 0
并且F(n + 1)=(M ^ n)[0] [0]
对于Tribonacci序列{0,0,1,1,2,4,7,13,...},矩阵为
M = 1 1 1
1 0 0
0 1 0
and T(n + 2)=(M ^ n)[0] [0]
对于Tetranacci序列{0,0,0,1,1,2,4,8,15,...},矩阵为
M = 1 1 1 1
1 0 0 0
0 1 0 0
0 0 1 0
and T(n + 3)=(M ^ n)[0] [0]
Wiki文章通过重复平方来求幂,这将n <= 10 ^ 18的循环数减少到大约64。