跃峰奥数PPT6组合计数3-9(递归方法之二维递归)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

温馨提示
为了设计教学场景互动效果的需要,课件中采用了大量“播放后隐藏”的文本,从而导致预览模式下出现诸多文本重叠,影响阅读。

但在放映模式下,这些现象都不会出现。

另外,课件中的图像均不是一次性形成,而是展现了“尝试-修改-成形”等发生过程,这可能导致预览模式下出现诸多乱码,但在放映模式下,图形则非常生动、美观。

组合计数3-9(递归方法之二维递归)
●冯跃峰
本讲内容
本节为第6板块(组合计数)第3专题(递归方法)的第9小节
(二维递归),包含如下3个部分内容:
第一部分,概述问题涉及的知识方法体系;
第二部分,思维过程剖析。

这是课件的核心部分,重在发掘
问题特征,分析如何找到解题方法。

按照教师场景授课互动效
果设计,立足于启发思维;
第三部分,详细解答展示。

提供笔者重新书写的解答(简称
“新写”),力求严谨、流畅、简练。

【递归方法】
所谓递归,就是建立“n”
的问题与“小于n”的
【1】
若干同构子问题之间的等量
关系。

通常有如下7种递归方式:
七种递归方式(1)增减递归
增加(减少)元素,得到
“n-1”(或“n+1”)的情形
(2)容斥递归a
n
=I n-f(a n-1)
(3)分拆递归将存在域分解为若干同构子区域
(4)分段递归n属于不同类时,表达式不同
(5)分类递归
将X
n
划分为两类:X
n
=A n∪B n,则
f(X n)= f(A n∪B n)= f(A n)+ f(B n)-f(A n∩B n)
=g(f(X n-1))+φ(f(X n-1))-μ(f(X n-1))。

(6)局部递归某个局部之间存在递归本节介绍“二维递归”
跃峰奥数
中的n 只棋位于折线的下方,得到棋盘的一个“棋线状态”,若棋所放的位置不同或所画的折线不同,则称为不同的棋线状态,求所有不同的棋线状态的个数。

01
P (n-1,n )
3
n
5
2
46
Q (n ,n-1)
6
425n
31A (n ,n )【题感】从条件看【1】,“棋线状态”包括:棋与线【1】,一种自然的想法是:分别考虑这两种对象有多少取法,然后相乘。

但遗憾的是,即使是只考虑对确定的放棋方式,有多少条合乎要求的折线,问题也比较复杂。

实际上,可以证明题中折线不经过对角线下方的任何点(变成上题“计数3-8”)。

但由于给定了棋子分布的限定【1】,折线条数计算【1】就非常复杂了■。

中的n 只棋位于折线的下方,得到棋盘的一个“棋线状态”,若棋所放的位置不同或所画的折线不同,则称为不同的棋线状态,求所有不同的棋线状态的个数。

01
P (n-1,n )
3
n
5
2
46
Q (n ,n-1)
6
425n
31A (n ,n )所以,宜将两者捆绑在一起进行计数,对整体的“棋线对”采用递归方法。

减元设想:对于n 阶棋线对,为了得到n-1的情形,自然的想法是去掉最后一行与最后一列【1】,便得到n-1阶棋盘的棋线对问题?否!有遗漏——
n 阶线未必通过点(n-1,n-1)【1】。

所以,我们要研究n 阶折线的位置特征,由此确定如何减元■。

中的n 只棋位于折线的下方,得到棋盘的一个“棋线状态”,若棋所放的位置不
同或所画的折线不同,则称为不同的棋线状态,求所有不同的棋线状态的个数。

01
P (n-1,n )
3
n
5
2
46
Q (n ,n-1)
6
425n
31A (n ,n )n 阶折线有2个特征:
(i )折线只能按向下、向右两个方向行走,这是因为折线长度的控制【1】。

(ii )折线在对角线上方,证明如下:
反设过下方点M (p ,q )(p>q )【1】,考察前p 行【1】,放的棋都在前q 列【1】,所以只有有q<p 只棋,存在一行没有棋【1】,矛盾。

是因棋在折线下方。

所以折线在对角线上方【1】,不通过(n ,n-1)【1】,必通过P (n-1,n )【1】。

(p ,q )
p
q
A(m,n)
13m
52466
42
5
n
3
1
0【命题拓广】在m ×n 棋盘放m 只棋(m≤n ),每个格至多放一只棋,任何两只棋不同行、不同列,自左上角顶点至右下角顶点沿格径画一条长为m+n 的折线,使m 只棋位于折线下方。

设不同棋线对数目为f (m ,n ),下面建立二维递归关系。

先考虑m=1的情形【1】:折线下方必有格,设有i 个格(1≤i ≤n )【1】,则放一只棋子有i 种方法。

2
n
3
1
i 个格
所以f (1,n )=Σi=1n i=n (n+1)/2。

再考虑m=n 的情形(此时只能去掉行),其折线必过点P (n-1,n )【1】。

去掉最后一行【1】,恰去掉一只棋,得到(n-1)×n 棋盘的棋线状态,不同状态共f (n-1,n )种。

添加第n 行,在“空列”中放棋【1】,有唯一方法,是因m=n 时只有去掉的棋所在列为空列【1】。

于是,此时棋线对恰有f (n-1,n )种。

01
3
n
5
2
46
6425m
31A(m,n)
i 1
对m ×n 棋盘中的任意一个中棋线状态,其
折线可分为如下两类:
(i )折线过点P (m-1,n )【1】。

去掉最后一行【1】,该行恰去掉一只棋【1】,剩下m-1只棋,状态变为(m-1)×n 的棋线状态【1】。

最后考虑m<n 的情形【1】,此时的化归,可能去掉行也可能去掉列。

反之(一对多),对(m-1)×n 的棋线状态,在(m-1)×n 棋盘最下端补上一行【1】,此行的棋可放在(m-1)×n 棋盘的n-m+1个没有棋的列中【1】,有n-m+1种放法,得到(n-m+1)f (m-1,n
)个棋线状态。

下面考虑折线过Q (m ,n-1)的情形■。

i 1
此时,m 只棋都位于折线的下方,从而最后
一列没有棋,去掉最后一列【1】,仍有m 只棋,得到一个m ×(n-1)的棋线状态【1】,共有f (m ,n-1)种可能。

(ii )折线过点Q (m ,n-1)【1】。

13m
52466
42
5
n
3
1
0Q (m ,n-1)
反之,对m ×(n-1)的一个棋线状态,其中已有m 只棋,每行都有一只棋。

此时,只能在最右端补上一列空格(不增加棋)【1】,有唯一的方法,得到f (m ,n-1)个m ×n 的棋线状态。

综合两种情况,得f (m ,n )=f (m ,n-1)+(n-m+1)f (m-1,n )。

至此,我们已得到1个边界值【1】,和2个递归式【1】,由
f (1,n )= = ,f (n ,n )= f (n-1,n )。

i Σn
i 1
=2)1(n +n 初值:m=2时,若n=2,只能用前一递归式【1】,f (2,2)=f (1,2)=1+2=3。

若n>2,则f (2,n )= f (2,n-1)+(n-1)f (1,n )
= f (2,n-1)+(n-1)×f (m ,n )=f (m ,n-1)+(n-m+1)f (m-1,n )。

(m<n )
= f (2,n-1)+。

2
)
1-(n 2
n 于是,f (2,3)= f (2,2)+ 2
)
1-3(32
⋅=3+12=15 =3×5 =3×(2+3)。

将结果分解为乘积形式【1】,以便用序号“m ,n”表示,当然,其中5需要拆成2+3【1】。

f (2,4)= f (2,3)+ 2)1-4(42
⋅=15+30=45 =3×3×5 同构表示为:n (m+n )【1】,此外,“连乘”可用组合数表示。

5
38
1
424⋅⋅⋅+⋅=)(【1】2)1(n +n
初值:m=2时,若n=2,只能用前一递归式【1】,f (2,2)=f (1,2)=1+2=3。

若n>2,则f (2,n )= f (2,n-1)+(n-1)f (1,n )
= f (2,n-1)+(n-1)×= f (2,n-1)+ 。

2
)1-(n 2n 于是,f (2,3)= f (2,2)+ 2
)1-3(32⋅=3+12=15 =3×5 =3×(2+3)。

f (2,4)= f (2,3)+ 2)1-4(42⋅=15+30=45 =3×3×5 538
1424⋅⋅⋅+⋅=)(2)1(n +n 用序号表示,借助排列组合数【1】替代非m 、n 的数【1】。

)!(3232+=。

)!(4242+=前一个表达式需稍作修改。

f (1,n )= = ,f (n ,n )= f (n-1,n )。

i Σn
i 1=2)1(n +n f (m ,n )=f (m ,n-1)+(n-m+1)f (m-1,n )。

(m<n )
= f (2,n-1)+(n-1)×= f (2,n-1)+ 。

2
)1-(n 2n 于是,f (2,3)= f (2,2)+ 2
)1-3(32⋅=3+12=15 =3×5 =3×(2+3)。

f (2,4)= f (2,3)+ 2)1-4(42⋅=15+30=45 =3×3×5 538
1424⋅⋅⋅+⋅)(2)1(n +n 。

)!(3232+=进一步,f (2,5)= f (2,4)+ 2)1-5(52
⋅=45+60=105 =3×5×7 先考虑同构表示【1】。

!)!(32352⋅+=至此,还没完全用序号“m ,n”表示,将其中的3修改为“5-2”【1】。

)!()!(322-525⋅+。

)!()!(322-323⋅+。

)!(442+=。

)!()!(322-424⋅+=
= f (2,n-1)+(n-1)×= f (2,n-1)+ 。

2
)1-(n 2n 于是,f (2,3)= f (2,2)+ 2
)1-3(32⋅=3+12=15 =3×5 f (2,4)= f (2,3)+ 2)1-4(42⋅=15+30=45 =3×3×5 2)1(n +n 由此可得,f (2,n )= 。

)!()!(322-2n ⋅+n 但这并不正确,还需作些修改!
进一步,f (2,5)= f (2,4)+ 2)1-5(52
⋅=45+60=105 =3×5×7 。

!)!(32352⋅+=。

)!()!(32
2-525⋅+。

)!()!(322-323⋅+=。

)!()!(32
2-424⋅+=
由此猜想,f (2,n )= 。

)!()!(322-2n ⋅+n 取m=3,则n=3时,f (3,3)=15=3×5 。

!)!()!(3233-333⋅⋅+=若n=4,则f (3,4)= f (3,3)+2 f (2,4)=15+2×45=105 =3×5×7
22
212-2n ⋅⋅+!)!()!(n f (m ,n )=f (m ,n-1)+(n-m+1)f (m-1,n )。

这在因式:23中分离出一个因子2即可【1】。

同构表示,先凑阶乘【1】,再凑方幂【1】。

64213-434⨯⨯⋅+=)!()!(。

!)!()!(323
13-434⨯⋅+=但与前述猜想存在差异【1】,f (2,n )的分母应该有一个因子“2!【1】”
【1】
=
由此猜想,f (2,n )= 。

)!()!(322-2n ⋅+n 取m=3,则n=3时,f (3,3)=15=3×5 。

!)!()!(32
33-333⋅⋅+=若n=4,则f (3,4)= f (3,3)+2 f (2,4)=15+2×45=105 =3×5×7
22
212-2n ⋅⋅+!)!()!(n f (m ,n )=f (m ,n-1)+(n-m+1)f (m-1,n )。

64213-434⨯⨯⋅+=)!()!(。

!)!()!(323
13-434⨯⋅+==于是,f (m ,n )= m m m n m n 21-⨯⋅+!)!()!(。

)!
()!(m n m n m -!m 21+⋅=如何证明?可采用递归中的“同一法”:用通式构造一个新序
递归关系:f(n,n)= f(n-1,n)
f(m,n)=f(m,n-1)+(n-m+1)f(m-1,n)(m<n),

为验证第一个递归式,可分别写出两边的表示式
【1】
直接验证即可。

递归关系:f(n,n)= f(n-1,n)
f(m,n)=f(m,n-1)+(n-m+1)f(m-1,n)(m<n),
第一个递归关系符合
【1】。

对于第二个递归式
【1】,因为右边比左边复杂
【1】
,宜从右
边入手,将其化简到与左边一致即可。

递归关系:f(n,n)= f(n-1,n)
f(m,n)=f(m,n-1)+(n-m+1)f(m-1,n)(m<n),
第一个递归关系符合。

【1】
【另解】对于n 阶正方形棋盘,其答案(2n-1)!!非常简单,这自然使我们寻找简单的解法。

注意到(2n-1)!!=1×3×…×(2n-1)是n 个数的连乘积,自然
想到能否分n 步完成棋线对的构造,其中第i 步有(2i-1)种方法。

这样,完成整个事件共有(2n-1)!!种方法。

【分步计数】我们将棋盘的方格分割为n
列【1】,考察每个列上棋子与折线的位置。

每个列都恰含有折线的一个长为1的横向
线段【1】,称为该列的“隔板”【1】。

显然,折线由每列的隔板唯一确定。

01P (3n 5246
Q (n ,n-
6425n 31A (
假定先放好了棋子,称第i 行格含有棋的
列为A i (1≤i ≤n )【3】。

A 1A 2A 3记安排A i 在各列排列中的顺序(顺序排
列)、并确定该列上隔板的位置的方法数
为f (i )。

则f (1)=1=2×1-1■。

再考虑f (2),A 2可排在A 1的前面或后面,有两种方法。

但不同排法导致隔板排法数不同,须分类讨论。

【分类计数】如果A 2排在A 1的前面【1】,则A 2上隔板不低于A 1上的隔板,只能放在最顶端【1】,有唯一排法。

A 1A 2如果A 2排在A 1的后面【1】,则A 2上隔板不高于A 1上的隔板且在A 2中棋子的上方【1】,有2种排法【1】。

A 1A 2所以,f (2)=1+2=3=2×2-1。

对于f (3),A 3可排在A 1、A 2形
成的3个“空”中,分3种情形讨论。

如果A 3排在最前面【1】,则A 3上隔板不低于A 1上的隔板,只能放在最顶端【1】,有唯一排法。

如果A 3排在A 1、A 2之间【1】,则A 3上隔板不高于左侧隔板【1】且不低于它右侧隔板【1】。

需先确定其两侧两列上隔板的位置,从而需要对前面A 1、A 21212
33
【分类计数】如果A 2排在A 1的前面【1】,则A 2上隔板不低于A 1上的隔板,只能放在最顶端【1】,有唯一排法。

A 1A 2如果A 2排在A 1的后面【1】,则A 2上隔板不高于A 1上的隔板且在A 2中棋子的上方【1】,有2种排法【1】。

A 1A 2所以,f (2)=1+2=3=2×2-1。

对于f (3),A 3可排在A 1、A 2形成的3个“空”中,分3种情形讨论。

如果A 3排在最前面【1】,则A 3上隔板不低于A 1上的隔板,只能放在最顶端【1】,有唯一排法。

1
2
1
2
33
我们要证明,对A 1、A 2及其隔板的任何一种安排,排A 3及其隔板的安排都有相同种方法(合乎乘法原理特征),所以将A 1、A 2的排法作为第一级分类;将A 3的排法作为第二级分类。

跃峰奥数
【分类计数】如果A 2排在A 1的前面【1】,则A 2上隔板不低于A 1上的隔板,只能放在最顶端【1】,有唯一排法。

A 1A 2如果A 2排在A 1的后面【1】,则A 2上隔板不高于A 1上的隔板且在A 2中棋子的上方【1】,有2种排法【1】。

A 1A 2所以,f (2)=1+2=3=2×2-1。

对于f (3),A 3可排在A 1、A 2形成的3个“空”中,分3种情形讨论。

如果A 3排在最前面【1】,则A 3上隔板不低于A 1上的隔板,只能放在最顶端【1】,有唯一排法。

1
2
1
2
33
以下证明:不管前面排定的A 1、A 2的顺序及隔板位置如何(一级分类),排A 3及A 3上的隔板的方法数都是(按A 3的位置进行2级分类):f (3)=2×3-1=5■。

跃峰奥数
首先,由乘法原理,安排A
1、A
2
及其隔板有f(1)f(2)=1×3=3种方法,如下
图,其中注意从左向右隔板的高度是非严格递降的。

对第1种情形(一级分类)
【1】,(1)如果A
3
排在最前面(二级分类)
【1】
,则
A3上隔板不低于A2上的隔板【1】,只能放在最顶端,有唯一排法;
(2)如果A
3排在A
1
、A
2
之间,则A
3
上隔板不高于A
2
上的隔板
【1】
且不低于A
1

的隔板
【1】
,只能放在最顶端,有唯一排法;
(3)如果A
3排在最后面
【1】
,则A
3
上隔板不高于A
1
上的隔板
【1】
且在A
3
中棋子的
上方
【1】,有3种排法
【1】。

所以,第1种情形中排定A
3及其隔板的方法数:f(3)=1+1+3=5
■。

1
2
31
2
1
2
3
跃峰奥数
对第2种情形
【1】,因为前两列的隔板与第1种情形一致
【1】
,所以,第2种情形中
排A
3
及其隔板的方法数也是:f(3)=1+1+3=5。

对第3种情形
【1】,(1)如果A
3
排在最前面,则A
3
上隔板不低于A
1
上的隔板
【1】

只能放在最顶端,有唯一排法;
(2)如果A
3排在A
1
、A
2
之间,则A
3
上隔板不高于A
1
上的隔板
【1】
且不低于A
2
上的
隔板
【1】,有2种排法
【1】

(3)如果A
3排在最后面
【1】
,则A
3
上隔板不高于A
2
上的隔板
【1】
且在A
3
中棋子的
上方
【1】,有2种排法
【1】。

所以,第3种情形中排A
3及其隔板的方法数:f(3)=1+2+2=5
■。

1
2
3
1
2
1
2跃峰奥数
这里,A i 表示第i 行含棋(简称含i 号棋)的列,B i 表示A 1,A 2,…,A n 中暂时排在第i 个位置的列(简称当前的第i 列)。

计算排A k+1及A k+1上的隔板的方法数,显然不能穷举前面排定的A 1,A 2,…,A k 所有可能位置,需要找一个具有一般性的“代表”进行论证,这就需要引入适当的参数。

【引入容量参数】记已排定的A 1,A 2,…,A k 的顺序为(B 1,B 2,…,B k )【1】,其中B 1,B 2,…,B k 是A 1,A 2,…,A k 的一个排列【1】。

B j+1
…B k
B j B 1
A 3A 2
A 1A 4
【分类计数】如果A k+1排在B 1的前面【1】,则A k+1上隔板不低于A 1上隔板【1】,只能放在顶端,有唯一排法;2
3
1
4
跃峰奥数
【引入容量参数】记已排定的A 1,A 2,…,A k 的顺序为(B 1,B 2,…,B k )【1】,其中B 1,B 2,…,B k 是A 1,A 2,…,A k 的一个排列【1】。

B j+1
…B k
B j B 1
A 3
A 2
A 1A
4
如果A k+1排在B j 、B j+1(j ≤k-1)之间【1】,则A k+1上隔板不高于B j 上的隔板【1】且不低于B j+1上的隔板【1】。

显然,A k+1上的隔板放置的方法,取决于B j 、B j+1上隔板所在直线间的距离【1】。

2
3
1
4
由于“距离”不确定,还需进一步引入容量参数来刻画■。

跃峰奥数
【分类计数】如果A k+1排在B 1的前面【1】,则A k+1上隔板不低于A 1上隔板【1】,只能放在顶端,有唯一排法;A k+1A k+1
【容量参数】设B j 、B j+1上隔板所在直线之距离为d j (1≤j ≤k-1)【1】,则A k+1排在B j 、B j+1之间时,A k+1上的隔板有d j +1种放法【3】。

B
j+1
…B k
B j
B 1
A 3
A 2
A 1
A 4
d j
如果A k+1排在B k 的后面【1】,则A k+1上隔板不高于B k 上的隔板【1】且在A k+1中棋子的上方【1】。

设B k 上隔板及A k+1放棋格上边界所在直线之间的距离为d k 【1】,则A k+1排在B k 的后面时,A k+1上的隔板有d k +1种放法【3】。

d k
所以,
f (k+1)=1+Σj=1k (d j +1)A k+1
=(k+1)+Σj=1k d j。

下面计算Σj=1k d j 【1】■。

跃峰奥数
【整体思考】注意到从左向右隔板的高度是非严格递降的,所以Σj=1k d j 就是A 1上隔板所在直线与A k+1中棋子格上边界所在直线之距离【1】。

B j+1

B k
B j
B 1
A 3A 2A 1A 4
d j
d k
A k+1
Σj=1k d j 第k+1行
=k 。

所以f (k+1)=(k+1)+Σj=1k d j =(k+1)+k=2k+1,结论对k+1成立。

由归纳原理,对任何1≤i ≤n ,f (i )=2i-1。

因为A 1中棋子在第1行【1】,A k+1中棋子在第k+1行【1】,所以Σj=1k d j =k 【1】。

最后,由乘法原理,所有棋线对的个数为∏k=1n f (k )=(2n-1)!!■。

跃峰奥数
【新写1】设m ×n 棋盘中不同棋线状态的数目为f (m ,n )。

当m=1时,设折线下方有i (1≤i≤n )个格,则放一只棋子有i 种方法,所以f (1,n )=Σi=1n i=n (n+1)/2。

当m=n 时,折线必须经过点P (n-1,n )到达A (n ,n )。

去掉棋盘的最后一行,恰去掉一只棋,得到(n-1)×n 棋盘的棋线状态,有f (n-1,n )种。

添加第n 行,第n 的棋只能放在无棋的列中,有唯一的放法,所以f (n ,n )=f (n-1,n )。

当m<n 时,折线可分为如下两类:(i )折线过点P (m-1,n )。

对m ×(n-1)的一个棋线状态,在最下端补上一行,棋可放在n-m+1个没有棋的列中,有n-m+1种放法,得到m ×n 棋盘的(n-m+1)f (m-1,n )个棋线状态。

(ii )折线过点Q (m ,n-1)。

此时,m 只棋都位于折线的下方,从而最后一列没有棋,去掉最后一列,仍有m 只棋,得到一个m ×(n-1)的棋线状态,有f (m ,n-1)种。

反之,对m ×(n-1)的一个棋线状态,其中已有m 只棋,只能在最右端补上一列空格,有唯一的方法,得到f (m ,n-1)个m ×n 的棋线状态。

所以f (m ,n )=f (m ,n-1)+(n-m+1)f (m-1,n )。

【确定边界值】【减元递归】
【二维递归】

【归纳通式】【递归“同一法”】
【从繁到简】
【答题】
下面演示另一个解答
■。

【新写2】称第i 行格含有棋的列为A i (1≤i ≤n ),称折线在A i 上的横向线段为A i 上的隔板。

我们证明安排A i 在各列中的顺序及A i 上隔板的位置的方法数f (i )=2i-1。

对i 归纳,当i=1时,f (1)=1=2×1-1。

设结论对1≤i ≤k 成立,考虑f (k+1)。

记已排定的A 1,A 2,…,A k 的顺序为(B 1,B 2,…,B k ),其中B 1,B 2,…,B k 是A 1,A 2,…,A k 的一个排列,且由折线的特征,B 1,B 2,…,B k 上的隔板高度依次不增。

如果A k+1排在B 1的前面,此时A 1必定在A k+1的后面,但A k+1上的隔板不低于A 1上的隔板,所以A k+1上隔板有唯一排法;如果A k+1排在B j 、B j+1(1≤j ≤k-1)之间,设B j 、B j+1上隔板所在直线之间的距离为d j (1≤j ≤k-1),则排A k+1上的隔板有d j +1种方法。

如果A k+1排在B k 的后面,设B k 上的隔板及A k+1中棋子格的上边界所在直线之间的距离为d k ,则排A k+1上的隔板有d k +1种放法。

所以,f (k+1)=1+Σj=1k (d j +1)=(k+1)+Σj=1k d j 。

其中Σj=1k d j =k ,因为它是A 1上隔板所在直线与A k+1中棋子格上边界所在直线之间的距离。

所以f (k+1)=(k+1)+Σj=1k d j =(k+1)+k=2k+1。

由乘法原理,所有棋线对的个数为∏k=1n f (k )=(2n-1)!!。

【分步计数】【顺序排列】【容量参数】■■。

相关文档
最新文档