CSP初赛知识点讲解(十)

数列

等差数列

a[i]-a[i-1]=公差d

已知第i项为a[i],公差为d,求第k项:

a [ k ] = a [ i ] + ( k − i ) × d 。 a[k]=a[i]+(k-i)\times d。 a[k]=a[i]+(ki)×d

已知首项a[1],公差d,求和

a [ n ] = a [ 1 ] + ( n − 1 ) × d a[n]=a[1]+(n-1)\times d a[n]=a[1]+(n1)×d

S [ n ] = ( a [ 1 ] + a [ n ] ) × n ÷ 2 S[n]=(a[1]+a[n])\times n\div2 S[n]=(a[1]+a[n])×n÷2

等比数列

a [ i ] = a [ i − 1 ] × q a[i]=a[i-1]\times q a[i]=a[i1]×q(公比)。

已知第i项为a[i],公比为q,求第k项:

a [ k ] = a [ i ] × q k − i a[k]=a[i]\times q^{k-i} a[k]=a[i]×qki

已知首项a,公比q,求和

∵ S [ n ] = a + a × q + a × q 2 + . . . a × q n − 1 \because S[n]=a+a\times q+a\times q^2+...a\times q^{n-1} S[n]=a+a×q+a×q2+...a×qn1

$\therefore q\times S[n]=a\times q+a\times q^2+…a\times q^{n-1}+a \times q^n $

$\therefore (q-1)S[n]=a\times q^n-a $

∴ S [ n ] = a × ( q n − 1 ) ÷ ( q − 1 ) \therefore S[n]=a\times (q^n-1)\div(q-1) S[n]=a×(qn1)÷(q1)

数列求解方法

1:类似于f(n)=f(n-1)+n这种递推公式

可以用错位相减来求解

$f(n-1)=f(n-2)+(n-1) $

f ( 2 ) = f ( 1 ) + 2 f(2)=f(1)+2 f(2)=f(1)+2

每一项左边相加,右边相加,然后同项一减,就得到 f(n)=f(1)+常数项 ,一般f(1)或者f(0)给出了 这种时间复杂度为O(n2)

2:类似于f(n)=a*f(n-1)+b这种递推公式

重新构造一个数列,形式为 f(n)-x=a(f(n-1)-x) 求解出x的值,这样f(n)-x就是一个等比数列了,就可以求出f(n)-x 的值了,同样,也可以求出f(n)的值,推导过程如下

递推公式分析

我们从递推公式的基本形式开始:

f ( n ) = a ⋅ f ( n − 1 ) + b f(n) = a \cdot f(n-1) + b f(n)=af(n1)+b

这是一个一阶递推关系,其中每一项 ( f(n) ) 都是通过前一项 ( f(n-1) ) 乘以常数 ( a ) 并加上常数 ( b ) 计算得到的。

构造等比数列

为了简化求解这个递推关系,我们希望将其转化为一个更容易处理的形式,即等比数列。具体方法是尝试构造一个新的数列,使得它满足等比数列的性质。

我们假设:

g ( n ) = f ( n ) − x g(n) = f(n) - x g(n)=f(n)x

这里 ( x ) 是一个我们需要确定的常数。代入递推公式中:

g ( n ) = f ( n ) − x g(n) = f(n) - x g(n)=f(n)x
g ( n − 1 ) = f ( n − 1 ) − x g(n-1) = f(n-1) - x g(n1)=f(n1)x

将它们带入递推公式:

f ( n ) = a ⋅ f ( n − 1 ) + b f(n) = a \cdot f(n-1) + b f(n)=af(n1)+b

我们得到:

g ( n ) + x = a ⋅ ( g ( n − 1 ) + x ) + b g(n) + x = a \cdot (g(n-1) + x) + b g(n)+x=a(g(n1)+x)+b

展开并整理:

g ( n ) + x = a ⋅ g ( n − 1 ) + a ⋅ x + b g(n) + x = a \cdot g(n-1) + a \cdot x + b g(n)+x=ag(n1)+ax+b

移项后得到:

g ( n ) = a ⋅ g ( n − 1 ) + ( a ⋅ x + b − x ) g(n) = a \cdot g(n-1) + (a \cdot x + b - x) g(n)=ag(n1)+(ax+bx)

为了让这个新构造的数列 ( g(n) ) 成为一个等比数列,我们需要消除上式中的常数项,即需要使得:

a ⋅ x + b − x = 0 a \cdot x + b - x = 0 ax+bx=0

整理得到:

x ⋅ ( a − 1 ) = − b x \cdot (a - 1) = -b x(a1)=b

从而得到 ( x ) 的值为:

x = − b a − 1 x = \frac{-b}{a - 1} x=a1b

构造等比数列后的形式

得到了 ( x ) 的值后,原公式中的 ( g(n) ) 就变成了一个等比数列:

g ( n ) = f ( n ) − x g(n) = f(n) - x g(n)=f(n)x

因此新的递推公式为:

f ( n ) − x = a ⋅ ( f ( n − 1 ) − x ) f(n) - x = a \cdot (f(n-1) - x) f(n)x=a(f(n1)x)

等价于:

g ( n ) = a ⋅ g ( n − 1 ) g(n) = a \cdot g(n-1) g(n)=ag(n1)

这个公式表明 ( g(n) ) 是以比率 ( a ) 递增的等比数列。

求解等比数列

等比数列的通项公式为:

g ( n ) = g ( 1 ) ⋅ a n − 1 g(n) = g(1) \cdot a^{n-1} g(n)=g(1)an1

其中 ( g(1) = f(1) - x )。代入上面的 ( g(n) = f(n) - x ):

f ( n ) − x = ( f ( 1 ) − x ) ⋅ a n − 1 f(n) - x = (f(1) - x) \cdot a^{n-1} f(n)x=(f(1)x)an1

最后可以解出 ( f(n) ) 的通项公式:

f ( n ) = x + ( f ( 1 ) − x ) ⋅ a n − 1 f(n) = x + (f(1) - x) \cdot a^{n-1} f(n)=x+(f(1)x)an1

进一步展开:

f ( n ) = − b a − 1 + ( f ( 1 ) + b a − 1 ) ⋅ a n − 1 f(n) = \frac{-b}{a - 1} + \left(f(1) + \frac{b}{a - 1}\right) \cdot a^{n-1} f(n)=a1b+(f(1)+a1b)an1

结论

通过构造新的数列 ( g(n) = f(n) - x ),我们将原递推公式转化为了等比数列,并通过求解得到 ( x ) 的值。这样,原始递推公式的通项公式也就得到了:

f ( n ) = − b a − 1 + ( f ( 1 ) + b a − 1 ) ⋅ a n − 1 f(n) = \frac{-b}{a - 1} + \left(f(1) + \frac{b}{a - 1}\right) \cdot a^{n-1} f(n)=a1b+(f(1)+a1b)an1

这个方法的关键在于将递推关系简化为等比数列,从而使求解变得简单。

3:类似于f(n)=f(n-1)+f(n-2)这种递推公式(每一项 前有系数)

这里可以用的方法是**“常数变换法”Method of Constant Coefficients)或有时称为"递推关系的齐次化"**(Homogenization of Recurrence Relation)。这种方法主要用于解决线性递推关系,尤其是当递推关系涉及多个前项时,比如像斐波那契数列这种情况。

方法概述

对于递推关系:

f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n) = f(n-1) + f(n-2) f(n)=f(n1)+f(n2)

我们希望将其转化为一个更容易处理的形式。通过构造新的数列并引入系数,我们可以简化原递推关系,使其转化为更容易求解的形式。

步骤解释

  1. 构造新数列并引入系数:

    我们假设:

    f ( n ) + a ⋅ f ( n − 1 ) = b ⋅ ( f ( n − 1 ) + a ⋅ f ( n − 2 ) ) f(n) + a \cdot f(n-1) = b \cdot (f(n-1) + a \cdot f(n-2)) f(n)+af(n1)=b(f(n1)+af(n2))

    这里,( a ) 和 ( b ) 是需要确定的常数。

  2. 展开并整理等式:

    代入假设并展开上面的公式:

    f ( n ) + a ⋅ f ( n − 1 ) = b ⋅ f ( n − 1 ) + b ⋅ a ⋅ f ( n − 2 ) f(n) + a \cdot f(n-1) = b \cdot f(n-1) + b \cdot a \cdot f(n-2) f(n)+af(n1)=bf(n1)+baf(n2)

    将等式展开并比较左右两边的系数,可以得到:

    f ( n ) = ( b − a ) ⋅ f ( n − 1 ) + b ⋅ a ⋅ f ( n − 2 ) f(n) = (b - a) \cdot f(n-1) + b \cdot a \cdot f(n-2) f(n)=(ba)f(n1)+baf(n2)

  3. 确定 ( a ) 和 ( b ) 的值:

    为了使原递推关系和新构造的关系一致,我们要求:

    b − a = 1 以及 b ⋅ a = 1 b - a = 1 \quad \text{以及} \quad b \cdot a = 1 ba=1以及ba=1

    这两个方程可以解出 ( a ) 和 ( b ) 的值。

    解第一个方程: b = a + 1 b = a + 1 b=a+1

    代入第二个方程:

    ( a + 1 ) ⋅ a = 1 (a + 1) \cdot a = 1 (a+1)a=1

    解这个二次方程:

    a 2 + a − 1 = 0 a^2 + a - 1 = 0 a2+a1=0

    通过解这个方程得到 ( a ) 的值:

    a = − 1 ± 5 2 a = \frac{-1 \pm \sqrt{5}}{2} a=21±5

    选取一个解(通常取正的根):

    a = − 1 + 5 2 (称为黄金分割比  ϕ  的倒数) a = \frac{-1 + \sqrt{5}}{2} \quad \text{(称为黄金分割比 \(\phi\) 的倒数)} a=21+5 (称为黄金分割比 ϕ 的倒数)

    然后 b = a + 1 = 1 + 5 2 b = a + 1 = \frac{1 + \sqrt{5}}{2} b=a+1=21+5

  4. 构造新递推关系并求解:

    通过引入 ( a ) 和 ( b ),我们得到了一个新的等式:

    f ( n ) + ϕ ⋅ f ( n − 1 ) = m f(n) + \phi \cdot f(n-1) = m f(n)+ϕf(n1)=m

    其中 ( m ) 是一个常数。这相当于我们将递推关系转化为了一个可以求解的齐次递推关系,然后可以使用前面提到的等比数列方法求解。

总结

这种方法是一种递推关系的齐次化方法,通过引入适当的常数 ( a ) 和 ( b ),将复杂的递推关系转换成更易于求解的形式。通过这个过程,你可以将问题简化,进而找到递推关系的通解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值