Algorithm 具有相互依赖关系的递归算法的复杂度计算

Algorithm 具有相互依赖关系的递归算法的复杂度计算,algorithm,recursion,time-complexity,recurrence,tiling,Algorithm,Recursion,Time Complexity,Recurrence,Tiling,我最近写了一个基于递归算法的程序,解决了用2x1多米诺骨牌平铺3xn板的方法: F(n)=F(n-2)+2*G(n-1) G(n)=G(n-2)+F(n-1) F(0)=1,F(1)=0,G(0)=0,G(1)=1 我尝试使用我知道的方法,如递归树和扩展,来计算复杂性,但没有得到任何答案。事实上,我从未遇到过这样的递归,其中的关系是相互依赖的 我是否使用了错误的方法,或者可能以错误的方式使用了这些方法?如果是这样的话,有人能提供解决方案吗 编辑:我在CS Stack Exchange中问了同样的

我最近写了一个基于递归算法的程序,解决了用2x1多米诺骨牌平铺3xn板的方法:

F(n)=F(n-2)+2*G(n-1)

G(n)=G(n-2)+F(n-1)

F(0)=1,F(1)=0,G(0)=0,G(1)=1

我尝试使用我知道的方法,如递归树和扩展,来计算复杂性,但没有得到任何答案。事实上,我从未遇到过这样的递归,其中的关系是相互依赖的

我是否使用了错误的方法,或者可能以错误的方式使用了这些方法?如果是这样的话,有人能提供解决方案吗

编辑:我在CS Stack Exchange中问了同样的问题,那里也给出了一个很好的答案。
它是指数型的。剩下要做的就是找到基地。首先定义一个向量值函数
V(n)
,如下所示

       ( F(n)   )
V(n) = ( F(n-1) )
       ( G(n)   )
       ( G(n-1) )
现在我们有了
V(n)=A*V(n-1)
其中
A
是一些矩阵。如果我没有搞砸,矩阵是:

[ 0 1 2 0 ]
[ 1 0 0 0 ]
[ 1 0 0 1 ]
[ 0 0 1 0 ]
根据您的初始条件:

       ( 1 )
V(1) = ( 0 )
       ( 1 )
       ( 0 )
现在我们有以下规则<代码>V(n+1)=A^n*V(1)。如果你熟悉矩阵数学,这个指数的增长主要是由领先的特征值决定的。(检查后)恰好是
sqrt(2+sqrt(3))

所以
F(n)=O(sqrt(2+sqrt(3))^n)


(这背后的理论通常用斐波那契数列来解释,但它可以应用于任何差分方程。)

你可以试着问一下,因为他们更擅长解决理论问题。另见:@JohnKugelman当然!感谢您的指导。