杭州电子科技大学ACM培训03 递推求解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
今天, 今天,
你
了吗? 了吗?
2010-12-5
1
每周一星( ): 每周一星(2):
Hoxily
2010-12-5
2
第三讲
递推求解
2010-12-5
3
先来看一个超级简单的例题:
有5人坐在一起,当问第5个人多少岁, 他说比第4个人大2岁,问第4个人多少 岁,他说比第3个人大2岁,依此下去, 问第一个人多少岁,他说他10岁,最 后求第5个人多少岁? 如果所坐的不是5人而是n人,写出第 n个人的年龄表达式。
2010-12-5
26Baidu Nhomakorabea
附加题:1465不容易系列之一 附加题:1465不容易系列之一
某人写了n封信和n个信封,如果 所有的信都装错了信封。求所有 的信都装错信封,共有多少种不 同情况。
2010-12-5
27
分析思路: 分析思路:
N=1和 易得解~,假设F(N 1)和 ~,假设F(N1、当N=1和2时,易得解~,假设F(N-1)和 F(N-2)已经得到 重点分析下面的情况: 已经得到, F(N-2)已经得到,重点分析下面的情况: 当有N封信的时候,前面N 封信可以有N 2、当有N封信的时候,前面N-1封信可以有N-1 或者 N-2封错装 前者,对于每种错装,可从N 3、前者,对于每种错装,可从N-1封信中任 意取一封和第N封错装,故=F(N-1)*(N-1) 意取一封和第N封错装, =F(N-1)*(N4、后者简单,只能是没装错的那封和第N封 后者简单,只能是没装错的那封和第N 交换信封,没装错的那封可以是前面N 交换信封,没装错的那封可以是前面N-1 封中的任意一个, F(N(N封中的任意一个,故= F(N-2) * (N-1)
2010-12-5 11
思考:如何用递推解决? 思考:如何用递推解决?
结论—— 结论 F(n)=F(n-1)+4(nF(n)=F(n-1)+4(n-1)+1
2010-12-5
12
另外一种结论: 另外一种结论:
Zn = 2n ( 2n + 1 ) / 2 + 1 - 2n = 2 n^2 – n + 1
2010-12-5
24
结论: 结论:
所以,通过以上的分析, 所以,通过以上的分析,可以得到递推的通 项公式: 项公式: F(n)=F(n-1)+F(n-2)+F(nF(n)=F(n-1)+F(n-2)+F(n-4) (n>3) 然后就是对n<=3 的一些特殊情况的处理了, 然后就是对n<=3 的一些特殊情况的处理了, 显然: 显然: 没有人也是合法的, F(0)=1 (没有人也是合法的,这个可以特殊 处理,就像0的阶乘定义为1一样) 处理,就像0的阶乘定义为1一样) F(1)=1 F(2)=2 F(3)=4
2010-12-5
7
简单思考题: 简单思考题:
在一个平面上有一个圆和n条直线, 在一个平面上有一个圆和n条直线, 这些直线中每一条在圆内同其他直 线相交,假设没有3 线相交,假设没有3条直线相交于 一点, 一点,试问这些直线将圆分成多少 区域。 区域。
2010-12-5
8
是不是这个—— 是不是这个
2010-12-5
19
最后一个思考题(有点难度) 最后一个思考题(有点难度)
2010-12-5
20
分析过程( 分析过程(1)
设:F(n)表示n个人的合法队列,则: F(n)表示n个人的合法队列, 表示
按照最后一个人的性别分析,他要么是男, 按照最后一个人的性别分析,他要么是男, 要么是女,所以可以分两大类讨论: 要么是女,所以可以分两大类讨论: 如果n 1、如果n个人的合法队列的最后一个人是 则对前面n 男,则对前面n-1个人的队列没有任何限 他只要站在最后即可,所以, 制,他只要站在最后即可,所以,这种情 况一共有F(n F(n况一共有F(n-1);
2010-12-5 21
分析过程( 分析过程(2)
如果n 2、如果n个人的合法队列的最后一个 人是女,则要求队列的第n 人是女,则要求队列的第n-1个人务必 也是女生,这就是说, 也是女生,这就是说,限定了最后两 个人必须都是女生, 个人必须都是女生,这又可以分两种 情况: 情况:
2010-12-5
2010-12-5
15
简单分析—— 简单分析
14 2 1 1 2 4 3 5 3 4 7 8 1 2 10 11 6 9 6 3 2 1 4 8 7 12 5 13
n=1 n=1
n=2 n=2
n=3 n=3
n=4 n=4
F(1)=2 F(n)=F(n-1)+2(nF(n)=F(n-1)+2(n-1)
为什么? 为什么?
2010-12-5
13
总结:递推求解的基本方法: 总结:递推求解的基本方法:
首先,确认:能否容易的得到简单情况的解? 首先,确认:能否容易的得到简单情况的解? 然后,假设:规模为N 的情况已经得到解决。 然后,假设:规模为N-1的情况已经得到解决。 最后,重点分析:当规模扩大到N时,如何枚 最后,重点分析:当规模扩大到N 举出所有的情况, 举出所有的情况,并且要确保对于每一种子 情况都能用已经得到的数据解决。 情况都能用已经得到的数据解决。 强调: 强调: 1、编程中的空间换时间的思想 并不一定只是从N 2、并不一定只是从N-1到N的分析
F(1)=2; F(n) = F(n-1)+n; 化简后: F(n) = n(n+1)/2 +1;
2010-12-5 9
太简单了? 太简单了?
来个稍微麻烦一些的☺ 来个稍微麻烦一些的☺
2010-12-5
10
2050) 例:(2050)折线分割平面
问题描述: 问题描述: 平面上有n条折线, 平面上有n条折线,问这些折线最多能将平面分割 成多少块? 成多少块? 样例输入 1 2 样例输出 2 7
2010-12-5
25
附加题(看看效果~): 附加题(看看效果~):
不容易系列之(3) 不容易系列之(3) —— LELE的RPG难题 LELE的RPG难题
有排成一行的n个方格,用红(Red)、粉 有排成一行的n个方格,用红(Red)、 (Red) (Pink)、 (Green)三色涂每个格子 三色涂每个格子, (Pink)、绿(Green)三色涂每个格子,每格涂 一色,要求任何相邻的方格不能同色, 一色,要求任何相邻的方格不能同色,且首 尾两格也不同色.求全部的满足要求的涂法. 尾两格也不同色.求全部的满足要求的涂法.
2010-12-5
17
再思考题: 再思考题:
有1×n的一个长方形,用1×1、1×2、1×3的骨牌铺 的一个长方形, 满方格。例如当n=3时为1 n=3时为 的方格(如图), ),此时用 满方格。例如当n=3时为1×3的方格(如图),此时用 的骨牌铺满方格,共有四种铺法。 1×1,1×2,1×3的骨牌铺满方格,共有四种铺法。
201003《ACM程序设计》在线作业 《 程序设计》 程序设计 (3)——递推求解 ) 递推求解
2010-12-5
30
2010-12-5 16
思考题(2046): 思考题(2046):
在2×n的长方形方格中,用n个1×2的骨牌铺满方格, 的长方形方格中, 的骨牌铺满方格, 例如n=3 n=3时 方格,骨牌的铺放方案有三种( 例如n=3时,为2×3方格,骨牌的铺放方案有三种(如 输入n ,输出铺放方案的总数 图), 输入n ,输出铺放方案的总数
2010-12-5 4
显然可以得到如下公式: 显然可以得到如下公式:
化简后的公式: F(n)=10+(n-1)*2
2010-12-5 5
数列: Fibnacci 数列:
即:1、2、3、5、8、13、21、34…
2010-12-5 6
思考: 思考:
递推公式的意义——? 有了公式,人工计算的方法? 常见的编程实现方法?(优缺点?)
22
分析过程( 分析过程(3)
2.1、如果队列的前n 2.1、如果队列的前n-2个人是合法的队 则显然后面再加两个女生, 列,则显然后面再加两个女生,也一定 是合法的,这种情况有F(n F(n是合法的,这种情况有F(n-2);
2010-12-5
23
分析过程( 分析过程(4)
2.2、但是,难点在于,即使前面n 2.2、但是,难点在于,即使前面n-2个 人不是合法的队列, 人不是合法的队列,加上两个女生也有 可能是合法的,当然,这种长度为n 可能是合法的,当然,这种长度为n-2 的不合法队列,不合法的地方必须是尾 的不合法队列, 就是说,这里说的长度是n 巴,就是说,这里说的长度是n-2的不 合法串的形式必须是“F(n-4)+男 合法串的形式必须是“F(n-4)+男+女”, 这种情况一共有F(n F(n这种情况一共有F(n-4).
2010-12-5 14
思考题: 思考题:平面分割方法
问题的提出: 问题的提出: 设有n条封闭曲线画在平面上, 设有n条封闭曲线画在平面上,而任 何两条封闭曲线恰好相交于两点, 何两条封闭曲线恰好相交于两点,且任何 三条封闭曲线不相交于同一点, 三条封闭曲线不相交于同一点,问这些封 闭曲线把平面分割成的区域个数。 闭曲线把平面分割成的区域个数。
输入: 输入: 0<=n<=30) n(0<=n<=30); 输出: 输出: 铺法总数
2010-12-5
18
典型例题
分析过程: 分析过程:
仔细分析最后一个格的铺法, 仔细分析最后一个格的铺法,发 现无非是用1 1,1×2,1× 现无非是用1×1,1×2,1×3三种铺 很容易就可以得出: 法,很容易就可以得出: f(n)=f(n-1)+f(n-2)+f(nf(n)=f(n-1)+f(n-2)+f(n-3); 其中f(1)=1,f(2)=2,f(3)=4 其中f(1)=1,f(2)=2,f(3)=4
2010-12-5 28
得到如下递推公式: 得到如下递推公式:
基本形式:d[1]=0; d[2]=1 递归式:d[n]= (n-1)*( d[n-1] + d[n-2])
这就是著名的错排公式☺ 这就是著名的错排公式☺
2010-12-5
29
课后任务: 课后任务:
DIY在线作业: DIY在线作业: 在线作业
你
了吗? 了吗?
2010-12-5
1
每周一星( ): 每周一星(2):
Hoxily
2010-12-5
2
第三讲
递推求解
2010-12-5
3
先来看一个超级简单的例题:
有5人坐在一起,当问第5个人多少岁, 他说比第4个人大2岁,问第4个人多少 岁,他说比第3个人大2岁,依此下去, 问第一个人多少岁,他说他10岁,最 后求第5个人多少岁? 如果所坐的不是5人而是n人,写出第 n个人的年龄表达式。
2010-12-5
26Baidu Nhomakorabea
附加题:1465不容易系列之一 附加题:1465不容易系列之一
某人写了n封信和n个信封,如果 所有的信都装错了信封。求所有 的信都装错信封,共有多少种不 同情况。
2010-12-5
27
分析思路: 分析思路:
N=1和 易得解~,假设F(N 1)和 ~,假设F(N1、当N=1和2时,易得解~,假设F(N-1)和 F(N-2)已经得到 重点分析下面的情况: 已经得到, F(N-2)已经得到,重点分析下面的情况: 当有N封信的时候,前面N 封信可以有N 2、当有N封信的时候,前面N-1封信可以有N-1 或者 N-2封错装 前者,对于每种错装,可从N 3、前者,对于每种错装,可从N-1封信中任 意取一封和第N封错装,故=F(N-1)*(N-1) 意取一封和第N封错装, =F(N-1)*(N4、后者简单,只能是没装错的那封和第N封 后者简单,只能是没装错的那封和第N 交换信封,没装错的那封可以是前面N 交换信封,没装错的那封可以是前面N-1 封中的任意一个, F(N(N封中的任意一个,故= F(N-2) * (N-1)
2010-12-5 11
思考:如何用递推解决? 思考:如何用递推解决?
结论—— 结论 F(n)=F(n-1)+4(nF(n)=F(n-1)+4(n-1)+1
2010-12-5
12
另外一种结论: 另外一种结论:
Zn = 2n ( 2n + 1 ) / 2 + 1 - 2n = 2 n^2 – n + 1
2010-12-5
24
结论: 结论:
所以,通过以上的分析, 所以,通过以上的分析,可以得到递推的通 项公式: 项公式: F(n)=F(n-1)+F(n-2)+F(nF(n)=F(n-1)+F(n-2)+F(n-4) (n>3) 然后就是对n<=3 的一些特殊情况的处理了, 然后就是对n<=3 的一些特殊情况的处理了, 显然: 显然: 没有人也是合法的, F(0)=1 (没有人也是合法的,这个可以特殊 处理,就像0的阶乘定义为1一样) 处理,就像0的阶乘定义为1一样) F(1)=1 F(2)=2 F(3)=4
2010-12-5
7
简单思考题: 简单思考题:
在一个平面上有一个圆和n条直线, 在一个平面上有一个圆和n条直线, 这些直线中每一条在圆内同其他直 线相交,假设没有3 线相交,假设没有3条直线相交于 一点, 一点,试问这些直线将圆分成多少 区域。 区域。
2010-12-5
8
是不是这个—— 是不是这个
2010-12-5
19
最后一个思考题(有点难度) 最后一个思考题(有点难度)
2010-12-5
20
分析过程( 分析过程(1)
设:F(n)表示n个人的合法队列,则: F(n)表示n个人的合法队列, 表示
按照最后一个人的性别分析,他要么是男, 按照最后一个人的性别分析,他要么是男, 要么是女,所以可以分两大类讨论: 要么是女,所以可以分两大类讨论: 如果n 1、如果n个人的合法队列的最后一个人是 则对前面n 男,则对前面n-1个人的队列没有任何限 他只要站在最后即可,所以, 制,他只要站在最后即可,所以,这种情 况一共有F(n F(n况一共有F(n-1);
2010-12-5 21
分析过程( 分析过程(2)
如果n 2、如果n个人的合法队列的最后一个 人是女,则要求队列的第n 人是女,则要求队列的第n-1个人务必 也是女生,这就是说, 也是女生,这就是说,限定了最后两 个人必须都是女生, 个人必须都是女生,这又可以分两种 情况: 情况:
2010-12-5
2010-12-5
15
简单分析—— 简单分析
14 2 1 1 2 4 3 5 3 4 7 8 1 2 10 11 6 9 6 3 2 1 4 8 7 12 5 13
n=1 n=1
n=2 n=2
n=3 n=3
n=4 n=4
F(1)=2 F(n)=F(n-1)+2(nF(n)=F(n-1)+2(n-1)
为什么? 为什么?
2010-12-5
13
总结:递推求解的基本方法: 总结:递推求解的基本方法:
首先,确认:能否容易的得到简单情况的解? 首先,确认:能否容易的得到简单情况的解? 然后,假设:规模为N 的情况已经得到解决。 然后,假设:规模为N-1的情况已经得到解决。 最后,重点分析:当规模扩大到N时,如何枚 最后,重点分析:当规模扩大到N 举出所有的情况, 举出所有的情况,并且要确保对于每一种子 情况都能用已经得到的数据解决。 情况都能用已经得到的数据解决。 强调: 强调: 1、编程中的空间换时间的思想 并不一定只是从N 2、并不一定只是从N-1到N的分析
F(1)=2; F(n) = F(n-1)+n; 化简后: F(n) = n(n+1)/2 +1;
2010-12-5 9
太简单了? 太简单了?
来个稍微麻烦一些的☺ 来个稍微麻烦一些的☺
2010-12-5
10
2050) 例:(2050)折线分割平面
问题描述: 问题描述: 平面上有n条折线, 平面上有n条折线,问这些折线最多能将平面分割 成多少块? 成多少块? 样例输入 1 2 样例输出 2 7
2010-12-5
25
附加题(看看效果~): 附加题(看看效果~):
不容易系列之(3) 不容易系列之(3) —— LELE的RPG难题 LELE的RPG难题
有排成一行的n个方格,用红(Red)、粉 有排成一行的n个方格,用红(Red)、 (Red) (Pink)、 (Green)三色涂每个格子 三色涂每个格子, (Pink)、绿(Green)三色涂每个格子,每格涂 一色,要求任何相邻的方格不能同色, 一色,要求任何相邻的方格不能同色,且首 尾两格也不同色.求全部的满足要求的涂法. 尾两格也不同色.求全部的满足要求的涂法.
2010-12-5
17
再思考题: 再思考题:
有1×n的一个长方形,用1×1、1×2、1×3的骨牌铺 的一个长方形, 满方格。例如当n=3时为1 n=3时为 的方格(如图), ),此时用 满方格。例如当n=3时为1×3的方格(如图),此时用 的骨牌铺满方格,共有四种铺法。 1×1,1×2,1×3的骨牌铺满方格,共有四种铺法。
201003《ACM程序设计》在线作业 《 程序设计》 程序设计 (3)——递推求解 ) 递推求解
2010-12-5
30
2010-12-5 16
思考题(2046): 思考题(2046):
在2×n的长方形方格中,用n个1×2的骨牌铺满方格, 的长方形方格中, 的骨牌铺满方格, 例如n=3 n=3时 方格,骨牌的铺放方案有三种( 例如n=3时,为2×3方格,骨牌的铺放方案有三种(如 输入n ,输出铺放方案的总数 图), 输入n ,输出铺放方案的总数
2010-12-5 4
显然可以得到如下公式: 显然可以得到如下公式:
化简后的公式: F(n)=10+(n-1)*2
2010-12-5 5
数列: Fibnacci 数列:
即:1、2、3、5、8、13、21、34…
2010-12-5 6
思考: 思考:
递推公式的意义——? 有了公式,人工计算的方法? 常见的编程实现方法?(优缺点?)
22
分析过程( 分析过程(3)
2.1、如果队列的前n 2.1、如果队列的前n-2个人是合法的队 则显然后面再加两个女生, 列,则显然后面再加两个女生,也一定 是合法的,这种情况有F(n F(n是合法的,这种情况有F(n-2);
2010-12-5
23
分析过程( 分析过程(4)
2.2、但是,难点在于,即使前面n 2.2、但是,难点在于,即使前面n-2个 人不是合法的队列, 人不是合法的队列,加上两个女生也有 可能是合法的,当然,这种长度为n 可能是合法的,当然,这种长度为n-2 的不合法队列,不合法的地方必须是尾 的不合法队列, 就是说,这里说的长度是n 巴,就是说,这里说的长度是n-2的不 合法串的形式必须是“F(n-4)+男 合法串的形式必须是“F(n-4)+男+女”, 这种情况一共有F(n F(n这种情况一共有F(n-4).
2010-12-5 14
思考题: 思考题:平面分割方法
问题的提出: 问题的提出: 设有n条封闭曲线画在平面上, 设有n条封闭曲线画在平面上,而任 何两条封闭曲线恰好相交于两点, 何两条封闭曲线恰好相交于两点,且任何 三条封闭曲线不相交于同一点, 三条封闭曲线不相交于同一点,问这些封 闭曲线把平面分割成的区域个数。 闭曲线把平面分割成的区域个数。
输入: 输入: 0<=n<=30) n(0<=n<=30); 输出: 输出: 铺法总数
2010-12-5
18
典型例题
分析过程: 分析过程:
仔细分析最后一个格的铺法, 仔细分析最后一个格的铺法,发 现无非是用1 1,1×2,1× 现无非是用1×1,1×2,1×3三种铺 很容易就可以得出: 法,很容易就可以得出: f(n)=f(n-1)+f(n-2)+f(nf(n)=f(n-1)+f(n-2)+f(n-3); 其中f(1)=1,f(2)=2,f(3)=4 其中f(1)=1,f(2)=2,f(3)=4
2010-12-5 28
得到如下递推公式: 得到如下递推公式:
基本形式:d[1]=0; d[2]=1 递归式:d[n]= (n-1)*( d[n-1] + d[n-2])
这就是著名的错排公式☺ 这就是著名的错排公式☺
2010-12-5
29
课后任务: 课后任务:
DIY在线作业: DIY在线作业: 在线作业