他们是寻找tribonacci系列第n个项(系列最多可以增加10 ^ 18个项)的优化算法吗?

时间:2019-07-14 14:04:53

标签: numbers dynamic-programming mathematical-optimization series

我正在做一个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。抱歉,如果我在格式化问题时犯了任何错误。

1 个答案:

答案 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。

https://en.wikipedia.org/wiki/Exponentiation_by_squaring