本人屯了几本算法书,打算尽快在大三结束之前汲取完。所以将其中一些有趣的地方记录下来吧,毕竟算法还是很有趣的,虽然学习的过程中常常伴随着痛苦

《信息学奥赛一本通》

五种常见的递推关系

1.Fibonacci数列

斐波那锲数列是形如这样的数列:1、1、2、3、5、8、13、21、34、55、89,在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

如比较著名的兔子问题和上台阶问题 都是斐波那锲数列的应用。想了解更多可以看这里

2.Hanoi塔问题

问题的提出:Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图3-11所示。
要求把a柱上n个圆盘按下述规则移到c柱上:

算法书中的精华(连载中)

(1)一次只能移一个圆盘;
  (2)圆盘只能在三个柱上存放;
  (3)在移动过程中,不允许大盘压小盘。
  问将这n个盘子从a柱移动到c柱上,总计需要移动多少个盘次?

解:设hnh_n为n个盘子从a柱移到c柱所需移动的盘次。显然,当n=1时,只需把a 柱上的盘子直接移动到c柱就可以了,故h1h_1=1。当n=2时,先将a柱上面的小盘子移动到b柱上去;然后将大盘子从a柱移到c 柱;最后,将b柱上的小盘子移到c柱上,共记3个盘次,故h2h_2=3。以此类推,当a柱上有n个盘子时,总是先借助c柱把上面的n-1个盘子移动到b柱上,然后把a柱最下面的盘子移动到c柱上;再借助a柱把b柱上的n-1个盘子移动到c柱上;总共移动hn1h_n-1+1+hn1h_n-1个盘次。

hn=2hn1+1h_n=2h_n-1+1 边界条件:h1=1h_1=1

3.平面分割问题

问题的提出:设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。

:设an为n条封闭曲线把平面分割成的区域个数。 由图3-13可以看出:a2-a1=2;a3-a2=4;a4-a3=6。

算法书中的精华(连载中)

从这些式子中可以看出anan1=2(n1)a_n-a_{n-1}=2(n-1)。当然,上面的式子只是我们通过观察4幅图后得出的结论,它的正确性尚不能保证。下面不妨让我们来试着证明一下。当平面上已有n-1条曲线将平面分割成an1a_n-1个区域后,第n-1条曲线每与曲线相交一次,就会增加一个区域,因为平面上已有了n-1条封闭曲线,且第n条曲线与已有的每一条闭曲线恰好相交于两点,且不会与任两条曲线交于同一点,故平面上一共增加2(n-1)个区域,加上已有的an1a_n-1个区域,一共有an1+2(n1)a_n-1+2(n-1)个区域。

所以本题的递推关系是an=an1+2(n1)a_n=a_{n-1}+2(n-1),边界条件是a1=1a_1=1

4.Catalan数

Catalan数首先是由Euler在精确计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,它经常出现在组合计数问题中。
问题的提出:在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数目用hnh_n表示,hnh_n即为Catalan数。例如五边形有如下五种拆分方案(图3-14),故h5=5h_5=5。求对于一个任意的凸n边形相应的hnh_n
算法书中的精华(连载中)

算法书中的精华(连载中)

Catalan数是比较复杂的递推关系,尤其在竞赛的时候,选手很难在较短的时间里建立起正确的递推关系。当然,Catalan数类的问题也可以用搜索的方法来完成,但是,搜索的方法与利用递推关系的方法比较起来,不仅效率低,编程复杂度也陡然提高。

5、第二类Stirling数

在五类典型的递推关系中,第二类Stirling是最不为大家所熟悉的。也正因为如此,我们有必要先解释一下什么是第二类Strling数

【定义2】 n个有区别的球放到m个相同的盒子中,要求无一空盒,其不同的方案数用S(n,m)S(n,m)表示,称为第二类Stirling数。
下面就让我们根据定义来推导带两个参数的递推关系——第二类Stirling数。
解:设有n个不同的球,分别用b1,b2,bnb_1,b_2,……b_n表示。从中取出一个球bnb_nbnb_n的放法有以下两种:
   ①bnb_n独自占一个盒子;那么剩下的球只能放在m-1个盒子中,方案数为S(n1,m1)S(n-1,m-1)
   ②bnb_n与别的球共占一个盒子;那么可以事先将b1,b2,bn1b_1,b_2,……b_{n-1}这n-1个球放入m个盒子中,然后再将球bnb_n可以放入其中一个盒子中,方案数为mS(n1,m)m\cdot S(n-1,m)
综合以上两种情况,可以得出第二类Stirling数定理:
   S(n,m)=mS(n1,m)+S(n1,m1)(n>1,m>=1)S(n,m)=m\cdot S(n-1,m)+S(n-1,m-1) (n>1,m>=1)
边界条件可以由定义2推导出:
    S(n,0)=0S(n,1)=1S(n,n)=1S(n,k)=0(k>n)S(n,0)=0;S(n,1)=1;S(n,n)=1;S(n,k)=0(k>n)。
第二类Stirling数在竞赛中较少出现,但在竞赛中也有一些题目与其类似,甚至更为复杂。读者不妨自己来试着建立其中的递推关系。
小结:通过上面对五种典型的递推关系建立过程的探讨,可知对待递推类的题目,要具体情况具体分析,通过找到某状态与其前面状态的联系,建立相应的递推关系。

相关文章:

  • 2022-12-23
  • 2021-11-17
  • 2021-12-23
  • 2022-01-12
  • 2021-11-03
  • 2021-07-29
  • 2022-12-23
猜你喜欢
  • 2021-12-10
  • 2021-05-06
  • 2021-11-13
  • 2021-06-21
  • 2021-12-09
  • 2021-11-04
  • 2022-12-23
相关资源
相似解决方案