我已经提供了三个递归函数fun1(int )
,fun2(int )
,fun3(int)
。所有这三个功能都相互依赖,即
fun1(m) = a * fun2(m-1) - b * fun3(m-1)
fun2(m) = c * fun1(m-1) - d * fun3(m-1)
fun3(m) = e * fun1(m-1) + f * fun2(m-1)
我必须找到任何这些功能的价值。如何有效地做到这一点(在时间复杂度和非递归方法方面)?
答案 0 :(得分:4)
您可以将三个方程表示为矩阵乘法:
[f1(m)] = [0 a -b] [f1(m-1)]
[f2(m)] = [c 0 -d] [f2(m-1)]
[f3(m)] = [e f 0] [f3(m-1)]
然后:
[f1(m)] = [0 a -b]^m [f1(0)]
[f2(m)] = [c 0 -d] [f2(0)]
[f3(m)] = [e f 0] [f3(0)]
假设您知道f1(0),f2(0),f3(0)的值,您可以计算O(log m)中f1(m),f2(m)和f3(m)的值)通过平方乘法计算矩阵幂来进行算术运算。
答案 1 :(得分:-1)
如果你的系数a,b,c,d,e,f不依赖于m,而是绝对常数(或者甚至是不依赖于m的变量中的任意多项式),那么你描述的重复被称为'线性”。这种情况完全由Petkovšek's algorithm解决。
该算法基本上可以让人计算所谓的重现的封闭形式。这里将详细介绍:https://www.math.upenn.edu/~wilf/AeqB.html