非齐次线性递推转化为齐次线性递推的判断

非齐次递推转化为齐次递推的判断

在做leetcode爬楼梯这道题的时候:

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

官方解法里有利用矩阵快速幂的方法。而利用矩阵快速幂关键在于将一个递推式如 f ( n ) = ∑ i = 1 m f ( n − i ) f(n) = \sum_{i = 1} ^ m f(n - i) f(n)=i=1mf(ni)这样的齐次线性递推式转换为一个矩阵 m × m m\times m m×m的矩阵
[ a 1 a 2 a 3 ⋯ a m 1 0 0 ⋯ 0 0 1 0 ⋯ 0 0 0 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ 1 ] \begin{bmatrix} a_1 & a_2 & a_3 & \cdots &a_m\\ 1 & 0 & 0 & \cdots &0\\ 0 & 1 & 0 & \cdots &0\\ 0 & 0 & 1 & \cdots &0\\ \vdots & \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & 0 & \cdots & 1 \end{bmatrix} a11000a20100a30010am0001根据相互关系写出递推式 [ f ( n ) f ( n − 1 ) f ( n − 2 ) f ( n − 3 ) ⋮ f ( n − m − 1 ) ] = [ a 1 a 2 a 3 ⋯ a m 1 0 0 ⋯ 0 0 1 0 ⋯ 0 0 0 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ 1 ] [ f ( n − 1 ) f ( n − 2 ) f ( n − 3 ) f ( n − 4 ) ⋮ f ( n − m − 2 ) ] \begin{bmatrix} f(n) \\ f(n - 1) \\ f(n - 2) \\ f(n - 3) \\ \vdots \\ f(n - m - 1) \end{bmatrix} = \begin{bmatrix} a_1 & a_2 & a_3 & \cdots &a_m\\ 1 & 0 & 0 & \cdots &0\\ 0 & 1 & 0 & \cdots &0\\ 0 & 0 & 1 & \cdots &0\\ \vdots & \vdots & \vdots & \ddots & \vdots\\ 0 & 0 & 0 & \cdots & 1 \end{bmatrix} \begin{bmatrix} f(n - 1) \\ f(n - 2) \\ f(n - 3) \\ f(n - 4) \\ \vdots \\ f(n - m - 2) \end{bmatrix} f(n)f(n1)f(n2)f(n3)f(nm1)=a11000a20100a30010am0001f(n1)f(n2)f(n3)f(n4)f(nm2)

当递推式为非齐次方程时,可以将其化为齐次方程再求解,例如
f ( x ) = ( 2 x − 6 ) c + f ( x − 1 ) + f ( x − 2 ) + f ( x − 3 ) f(x)=(2x−6)c+f(x−1)+f(x−2)+f(x−3) f(x)=(2x6)c+f(x1)+f(x2)+f(x3)可以化作
f ( x ) + x c = [ f ( x − 1 ) + ( x − 1 ) c ] + [ f ( x − 2 ) + ( x − 2 ) c ] + [ f ( x − 3 ) + ( x − 3 ) c ] \begin{aligned} f(x)+xc = &[f(x−1)+(x−1)c]+[f(x−2)+(x−2)c]\\ &+[f(x−3)+(x−3)c]\end{aligned} f(x)+xc=[f(x1)+(x1)c]+[f(x2)+(x2)c]+[f(x3)+(x3)c] g ( x ) = f ( x ) + x c g(x)=f(x)+xc g(x)=f(x)+xc,那么我们又得到了一个齐次线性地推公式
g ( x ) = g ( x − 1 ) + g ( x − 2 ) + g ( x − 3 ) g(x)=g(x−1)+g(x−2)+g(x−3) g(x)=g(x1)+g(x2)+g(x3)

什么时候非齐次线性递推转化为齐次线性递推呢?小白想了个解法,希望各位大佬指教。设非齐次递推式一般式为
f ( x ) = ∑ i = 1 n f ( x − i ) + m x + n (1) f(x) = \sum_{i = 1}^n f(x - i) + mx + n\tag{1} f(x)=i=1nf(xi)+mx+n(1)目标是将其化为
f ( x ) + u x + v = ∑ i = 1 n a i [ f ( x − i ) + u ( x − i ) + v ] (2) f(x) + ux + v = \sum_{i = 1} ^ n a_i[f(x - i) + u(x - i) + v]\tag{2} f(x)+ux+v=i=1nai[f(xi)+u(xi)+v](2)然后令
g ( x ) = f ( x ) + u x + v g(x) = f(x) + ux + v g(x)=f(x)+ux+v化作对应的齐次方程为
g ( x ) = ∑ i = 1 n g ( x − i ) g(x) = \sum_{i = 1} ^ ng(x - i) g(x)=i=1ng(xi)那么问题就在于式(1)能否转化为式(2)呢?将式(2)化作
f ( x ) = ∑ i = 1 n a i [ f ( x − i ) + u ( x − i ) + v ] − u x − v = ∑ i = 1 n a i f ( x − i ) + ( ∑ i = 1 n a i − 1 ) u x + ( ∑ i = 1 n a i − 1 ) v − ∑ i = 1 n a i i u \begin{aligned} f(x) & = \sum_{i = 1} ^ n a_i[f(x - i) + u(x - i) + v] - ux - v\\ & = \sum_{i = 1} ^ n a_if(x - i) + (\sum_{i = 1} ^ na_i-1)ux + (\sum_{i = 1} ^ na_i-1)v - \sum_{i = 1} ^ na_iiu \end{aligned} f(x)=i=1nai[f(xi)+u(xi)+v]uxv=i=1naif(xi)+(i=1nai1)ux+(i=1nai1)vi=1naiiu
也就是如果等式
m x + n = ( ∑ i = 1 n a i − 1 ) u x + ( ∑ i = 1 n a i − 1 ) v − ∑ i = 1 n a i i u \bm\color{olive}{mx + n = (\sum_{i = 1} ^ na_i-1)ux + (\sum_{i = 1} ^ na_i-1)v - \sum_{i = 1} ^ na_iiu} mx+n=(i=1nai1)ux+(i=1nai1)vi=1naiiu有解,那么该非齐次方程递推便可以转化为齐次递推,根据求出的 u u u, v v v便可以求出对应的齐次递推。

小白第一次写博客,希望各位大佬指教。😉

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值