第2章 递归与分治策略(0-算法思想)

合集下载

递归与分治策略计算机算法设计与分析第3版

递归与分治策略计算机算法设计与分析第3版
M=2时,A(n,2)=A(A(n-1,2),1)=2A(n-1,2),和 A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)= 2^n 。
M=3时,类似的可以推出
Байду номын сангаас
222 2
M=4时,A(n,4)的增长速度非常快n,以至于没有适当的数学式
子来表示这一函数。
2.1 递归的概念
A(0, m) 1
A(n,0) n 2
m0 n2
A(n, m) A( A(n 1, m),m 1) n, m 1
2.1 递归的概念
例3 Ackerman函数 前2例中的函数都可以找到相应的非递归方式定义:
n! 1 2 3 (n 1) n
F(n)
1 5
1
2
n1
5
1
2
第2章 递归与分治策略
学习要点: 理解递归的概念。 掌握设计有效算法的分治策略。 通过下面的范例学习分治策略设计技巧。 (1)二分搜索技术; (2)大整数乘法; (3)Strassen矩阵乘法; (4)棋盘覆盖; (5)合并排序和快速排序; (6)线性时间选择; (7)最接近点对问题; (8)循环赛日程表。
分治与递归像一对孪生兄弟,经常同时应用在 算法设计之中,并由此产生许多高效算法。
下面来看几个实例。
2.1 递归的概念
例1 阶乘函数 阶乘函数可递归地定义为:
1 n0 n! n(n 1)! n 0
边界条件 递归方程
边界条件与递归方程是递归函数的二个要素,递归函 数只有具备了这两个要素,才能在有限次计算后得出 结果。
{
if (n <= 1) return 1;
return fibonacci(n-1)+fibonacci(n-2);

算法之2章递归与分治

算法之2章递归与分治

算法分析(第二章):递归与分治法一、递归的概念知识再现:等比数列求和公式:1、定义:直接或间接地调用自身的算法称为递归算法。

用函数自身给出定义的函数称为递归函数。

2、与分治法的关系:由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。

在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。

这自然导致递归过程的产生。

分治与递归经常同时应用在算法设计之中,并由此产生许多高效算法。

3、递推方程:(1)定义:设序列01,....na a a简记为{na},把n a与某些个()ia i n<联系起来的等式叫做关于该序列的递推方程。

(2)求解:给定关于序列{n a}的递推方程和若干初值,计算n a。

4、应用:阶乘函数、Fibonacci数列、Hanoi塔问题、插入排序5、优缺点:优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。

缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

二、递归算法改进:1、迭代法:(1)不断用递推方程的右部替代左部(2)每一次替换,随着n的降低在和式中多出一项(3)直到出现初值以后停止迭代(4)将初值代入并对和式求和(5)可用数学归纳法验证解的正确性2、举例:-----------Hanoi塔算法----------- ---------------插入排序算法----------- ()2(1)1(1)1T n T nT=−+=()(1)1W n W n nW=−+−(1)=021n-23()2(1)12[2(2)1]12(2)21...2++2 (121)n n n T n T n T n T n T −−=−+=−++=−++==++=−(1)2 ()(1)1((n-2)+11)1(2)(2)(1)...(1)12...(2)(1)(1)/2W n W n n W n n W n n n W n n n n =−+−=−−+−=−+−+−==++++−+−=−3、换元迭代:(1)将对n 的递推式换成对其他变元k 的递推式 (2)对k 进行迭代(3)将解(关于k 的函数)转换成关于n 的函数4、举例:---------------二分归并排序---------------()2(/2)1W n W n n W =+−(1)=0(1)换元:假设2kn =,递推方程如下()2(/2)1W n W n n W =+−(1)=0 → 1(2)2(2)21k k k W W W−=+−(0)=0(2)迭代求解:12122222321332133212()2(2)212(2(2)21)212(2)22212(2)2*2212(2(2)21)2212(2)222212(2)3*2221...2(0)*2(22...21)22k k k k k k k k k k k k k k k k k k k k k k k k W n W W W W W W W W k k −−−−−−−+−+−−−=+−=+−+−=+−+−=+−−=+−+−−=+−+−−=+−−−==+−++++=−1log 1n n n +=−+(3)解的正确性—归纳验证: 证明递推方程的解是()(1)/2W n n n =−()(1)1W n W n n W =−+−(1)=0,(n 1)=n +n=n(n-1)/2+n =n[(n-1)/2+1]=n(n+1)/2n W W +方法:数学归纳法证 n=1,W(1)=1*(1-1)/2=0假设对于解满足方程,则()---------------快速排序--------------------->>>平均工作量:假设首元素排好序在每个位置是等概率的112()()()(1)0n i T n T i O n n T −==+=∑ >>>对于高阶方程应该先化简,然后迭代(1)差消化简:利用两个方程相减,将右边的项尽可能消去,以达到降阶的目的。

《算法设计与分析》(全)

《算法设计与分析》(全)
巢湖学院计算机科学与技术系
1.1、算法与程序
程序:是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。 例如操作系统,是一个在无限循环中执行的程序, 因而不是一个算法。 操作系统的各种任务可看成是单独的问题,每一个 问题由操作系统中的一个子程序通过特定的算法来实 现。该子程序得到输出结果后便终止。
渐近分析记号的若干性质
(1)传递性: ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= O(g(n)), g(n)= O (h(n)) f(n)= O (h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); ➢ f(n)= o(g(n)), g(n)= o(h(n)) f(n)= o(h(n)); ➢ f(n)= (g(n)), g(n)= (h(n)) f(n)= (h(n)); (2)反身性: ➢ f(n)= (f(n));f(n)= O(f(n));f(n)= (f(n)). (3)对称性: ➢ f(n)= (g(n)) g(n)= (f(n)) . (4)互对称性: ➢ f(n)= O(g(n)) g(n)= (f(n)) ; ➢ f(n)= o(g(n)) g(n)= (f(n)) ;
巢湖学院计算机科学与技术系
渐近分析记号的若干性质
规则O(f(n))+O(g(n)) = O(max{f(n),g(n)}) 的证明: ➢ 对于任意f1(n) O(f(n)) ,存在正常数c1和自然数n1,使得对
所有n n1,有f1(n) c1f(n) 。 ➢ 类似地,对于任意g1(n) O(g(n)) ,存在正常数c2和自然数
巢湖学院计算机科学与技术系
第1章 算法引论

计算机专业课《算法》_第二章 递归与分治策略

计算机专业课《算法》_第二章 递归与分治策略

“Hanoi 塔”问题演示 a 初始 a 步骤1 a
c
b
c
“Hanoi 塔”问题程序
void hanoi(int n,a,b,c)
{ if n == 1 move( 1, a, b );
else { hanoi( n-1, a, c, b );
move(n, a, b ); hanoi( n-1, c,b, a) ;
• 递归优点:结构清晰,可读性强
• 递归缺点:递归算法的运行效率较低,无论是耗 费的计算时间还是占用的存储空间都比非递归算 法要多。
整数划分问题的递归关系q(n,m)
如设p(n)为正整数n的划分数,则难以找到递归关系 • q(n,m):正整数n的不同的划分中,最大加数不 大于m的划分个数个数 q(n,m)=
1 q(n,n) 1+q(n,n-1) q(n,m-1)+q(n-m,m) n=1, m=1 n<m n=m n>m>1
递归函数举例(5)
学习要点
理解递归的概念。 掌握设计有效算法的分治策略。
通过典型范例,学习分治策略设计技巧。
2.1 递归的概念
• 递归算法:一个直接或间接地调用自身的算法 • 递归方程:对于递归算法,一般可把时间代 价表示为一个递归方程 • 递归函数:使用函数自身给出定义的函数 • 解递归方程最常用的方法是进行递归扩展
递归函数举例(1)
• 阶乘函数 n !=
1 n(n-1)! n=1 n>1
• Fibonacci数列
1 n=0
F(n)=
1 F(n-1)+F(n-2)
n=1 n>1
初始条件与递归方程是递归函数的二个要素

第二章递归与分治

第二章递归与分治
2019/3/24 计算机算法设计与分析 7
正整数的划分





在正整数的所有不同划分中,将最大加数n1不 大于m的划分个数记为q(n, m),可以建立如下 的递归关系: 的二元递归函数: n= 1 n, 或m m =1 q (n, m) { 1 (1) q(n, 1)=1, q(1, m) 最简单情形: =1 ≥1; q(n, m) = 1 + q(n, n –1) n ≤ m if (n < 1) || (m < 1) return 0; 递归关系: (2) q(n, n) = 1 + q(n, n–1),n>1; q(n, m– 1)+q(n –m, m) if (n == 1) || (m == 1) return 1; n>m>1 产生的新情况: if (n == 1) || (n < m) return 1 + q(n, n–1); return q(n, m –1) q(n m, } n>m>1 (3) q(n, m) =q (n, m+ –1) +–q (nm); –m, m), (4) q(n, m) = q(n, n),=n < mn) 。 整数 n的划分数 ρ(n) q (n, 。

2019/3/24 计算机算法设计与分析 3
Hanoi塔问题
例 Hanoi 1:Hanoi 塔的解可以很自然地看成这样一个过程: 塔问题:有A、B、C三根柱子。A
上有n个圆盘,自下而上由大到小地叠在一起。 于是可得到如下的程序: (1)先将A上面 现要将 A上的全部圆 n –1 个盘移至 C。 void Hanoi(int n, int Fr, int To, int As) { 盘移到B上,并要求: if (n > 0) { (2)再将 A上剩下 (1)每次只能移动一个 Hanoi(n–1, Fro, Ass, To); 的1 个盘移至 B。 圆盘; (2)任何时刻都 B C A Move(Fro, To); 不允许将较大的圆盘 Hanoi(n–1, Ass, To, Fro)} (3) 最后将C上的 压在较小的圆盘上; } n–(3) 1个盘移至 B。A、B、 圆盘只能在 C三个柱子间移动。

c02 递归与分治策略分解

c02 递归与分治策略分解

T(n)
=n
n/2
n/2
n/2
n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4
算法总体思想
将求出的小规模的问题的解合并为一个更大规 模的问题的解,自底向上逐步求出原来问题的 解。
{ if (n <= 1) return 1; return fibonacci(n-1)+fibonacci(n-2);
T(n)
=n
n/2
n/2
n/2
n/2
T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4) T(n/4)T(n/4)T(n/4)T(n/4
算法总体思想
将求出的小规模的问题的解合并为一个更大规 模的问题的解,自底向上逐步求出原来问题的 解。
第2章 递归与分治策略
学习要点: 理解递归的概念。 掌握设计有效算法的分治策略。 通过下面的范例学习分治策略设计技巧。
1)二分搜索技术; (2)大整数乘法; 3)Strassen矩阵乘法; 4)棋盘覆盖; 5)合并排序和快速排序; 6)线性时间选择; (7)最接近点对问题; (8)循环赛日程表。
算法总体思想
2.1 递归的概念
直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。
由分治法产生的子问题是原问题的较小模式, 为使用递归技术提供了方便。反复应用分治 手段,使子问题与原问题类型一致而其规模 却不断缩小,最终使子问题缩小到很容易直 接求出其解。这自然导致递归过程的产生。

算法之2章递归与分治

算法之2章递归与分治

算法分析(第二章):递归与分治法一、递归的概念知识再现:等比数列求和公式:1、定义:直接或间接地调用自身的算法称为递归算法。

用函数自身给出定义的函数称为递归函数。

2、与分治法的关系:由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。

在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。

这自然导致递归过程的产生。

分治与递归经常同时应用在算法设计之中,并由此产生许多高效算法。

3、递推方程:(1)定义:设序列01,....na a a简记为{na},把n a与某些个()ia i n<联系起来的等式叫做关于该序列的递推方程。

(2)求解:给定关于序列{n a}的递推方程和若干初值,计算n a。

4、应用:阶乘函数、Fibonacci数列、Hanoi塔问题、插入排序5、优缺点:优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。

缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

二、递归算法改进:1、迭代法:(1)不断用递推方程的右部替代左部(2)每一次替换,随着n的降低在和式中多出一项(3)直到出现初值以后停止迭代(4)将初值代入并对和式求和(5)可用数学归纳法验证解的正确性2、举例:-----------Hanoi塔算法----------- ---------------插入排序算法----------- ()2(1)1(1)1T n T nT=−+=()(1)1W n W n nW=−+−(1)=021n-23()2(1)12[2(2)1]12(2)21...2++2 (121)n n n T n T n T n T n T −−=−+=−++=−++==++=−(1)2 ()(1)1((n-2)+11)1(2)(2)(1)...(1)12...(2)(1)(1)/2W n W n n W n n W n n n W n n n n =−+−=−−+−=−+−+−==++++−+−=−3、换元迭代:(1)将对n 的递推式换成对其他变元k 的递推式 (2)对k 进行迭代(3)将解(关于k 的函数)转换成关于n 的函数4、举例:---------------二分归并排序---------------()2(/2)1W n W n n W =+−(1)=0(1)换元:假设2kn =,递推方程如下()2(/2)1W n W n n W =+−(1)=0 → 1(2)2(2)21k k k W W W−=+−(0)=0(2)迭代求解:12122222321332133212()2(2)212(2(2)21)212(2)22212(2)2*2212(2(2)21)2212(2)222212(2)3*2221...2(0)*2(22...21)22k k k k k k k k k k k k k k k k k k k k k k k k W n W W W W W W W W k k −−−−−−−+−+−−−=+−=+−+−=+−+−=+−−=+−+−−=+−+−−=+−−−==+−++++=−1log 1n n n +=−+(3)解的正确性—归纳验证: 证明递推方程的解是()(1)/2W n n n =−()(1)1W n W n n W =−+−(1)=0,(n 1)=n +n=n(n-1)/2+n =n[(n-1)/2+1]=n(n+1)/2n W W +方法:数学归纳法证 n=1,W(1)=1*(1-1)/2=0假设对于解满足方程,则()---------------快速排序--------------------->>>平均工作量:假设首元素排好序在每个位置是等概率的112()()()(1)0n i T n T i O n n T −==+=∑ >>>对于高阶方程应该先化简,然后迭代(1)差消化简:利用两个方程相减,将右边的项尽可能消去,以达到降阶的目的。

大学_计算机算法设计与分析第4版(王晓东著)课后答案下载

大学_计算机算法设计与分析第4版(王晓东著)课后答案下载

计算机算法设计与分析第4版(王晓东著)课后答
案下载
计算机算法设计与分析第4版内容简介
第1章算法概述
1.1 算法与程序
1.2 算法复杂性分析
1.3 NP完全性理论
算法分析题1
算法实现题1
第2章递归与分治策略
2.1 递归的概念
2.2 分治法的基本思想
2.3 二分搜索技术
2.4 大整数的乘法
2.5 Strassen矩阵乘法
2.6 棋盘覆盖
2.7 合并排序
2.8 快速排序
2.9 线性时间选择
2.10 最接近点对问题
第3章动态规划
第4章贪心算法
第5章回溯法
第6章分支限界法
第7章随机化算法
第8章线性规划与网络流
附录A C++概要
参考文献
计算机算法设计与分析第4版目录
本书是普通高等教育“十一五”__规划教材和国家精品课程教材。

全书以算法设计策略为知识单元,系统介绍计算机算法的设计方法与分析技巧。

主要内容包括:算法概述、递归与分治策略、动态规划、贪心算法、回溯法、分支限界法、__化算法、线性规划与网络流等。

书中既涉及经典与实用算法及实例分析,又包括算法热点领域追踪。

为突出教材的`可读性和可用性,章首增加了学习要点提示,章末配有难易适度的算法分析题和算法实现题;配套出版了《计算机算法设计与分析习题解答(第2版)》;并免费提供电子课件和教学服务。

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

等角螺曲线 = Fibonacci正方形积木 +1/4圆周
2.1 递归的概念
例2 Fibonacci数列 2,鹦鹉螺:等角螺曲线,向径和切线的夹角永远不变的曲线
2.1 递归的概念
例3 Ackerman函数 当一个函数及它的一个变量是由函数自身定义时,称这个函数 是双递归函数。 Ackerman函数A(n,m)定义如下:
1 n0 F ( n) 1 n 1 F (n 1) F (n 2) n 1
边界条件
递归方程
第n个Fibonacci数可递归地计算如下: int fibonacci(int n) T(1) = O(1) { T(n) = T(n-1)+T(n-2)+O(1) if (n <= 1) return 1; return fibonacci(n-1)+fibonacci(n-2); 解得:T(n) = O((3/2)^n) }
下面来看几个实例。


2.1 递归的概念
例1 阶乘函数 阶乘函数可递归地定义为: 边界条件
n0 1 n! n(n 1)! n 0
递归方程
边界条件与递归方程是递归函数的二个要素,递归函数只 有具备了这两个要素,才能在有限次计算后得出结果。
2.1 递归的概念
例2 Fibonacci数列 无穷数列1,1,2,3,5,8,13,21,34,55,……,称为 Fibonacci数列。它可以递归地定义为:
n 111
(2) q(n,m)=q(n,n),mn; 最大加数n1实际上不能大于n。因此,q(1,m)=1。
2.1 递归的概念
例5 整数划分问题 前面的几个例子中,问题本身都具有比较明显的递归关系,因 而容易用递归函数直接求解。 在本例中,如果设p(n)为正整数n的划分数,则难以找到递归关 系,因此考虑增加一个自变量:将最大加数n1不大于m的划分个 数记作q(n,m)。可以建立q(n,m)的如下递归关系。 (3) q(n,n)=1+q(n,n-1); 正整数n的划分由n1=n的划分和n1≤n-1的划分组成。 (4) q(n,m)=q(n,m-1)+q(n-m,m),n>m>1; 正整数n的最大加数n1不大于m的划分由n1=m的划分和 n1≤m-1 的划分组成。
2.1 递归的概念
例3

Ackerman函数
A(n,m)的自变量m的每一个值都定义了一个单变量 函数: M=0时,A(n,0)=n+2 M=1时,A(n,1)=A(A(n-1,1),0)=A(n-1,1)+2,和 A(1,1)=2故A(n,1)=2*n M=2时,A(n,2)=A(A(n-1,2),1)=2A(n-1,2),和 A(1,2)=A(A(0,2),1)=A(1,1)=2,故A(n,2)= 2^n 。
2.1 递归的概念
例5 整数划分问题 前面的几个例子中,问题本身都具有比较明显的递归关系,因 而容易用递归函数直接求解。 在本例中,如果设p(n)为正整数n的划分数,则难以找到递归关 系,因此考虑增加一个自变量:将最大加数n1不大于m的划分个 数记作q(n,m)。可以建立q(n,m)的如下递归关系。 (1) q(n,1)=1,n1; 当最大加数n1不大于1时,任何正整数n只有一种划分形式, n 即

M=3时,类似的可以推出 n M=4时,A(n,4)的增长速度非常快,以至于没有适当 的数学式子来表示这一函数。
2
2
2 2
2.1 递归的概念
例3 Ackerman函数 前2例中的函数都可以找到相应的非递归方式定义:
n! 1 2 3 ( n 1) n
1 5 1 F ( n) 2 5
n 1
1 5 2
n 1

本例中的Ackerman函数却无法找到非递归的定义。
例3

2.1 Ackerman 递归的概念 函数
定义单变量的Ackerman函数A(n)为:A(n)=A(n,n) 定义其拟逆函数α(n)为: α(n)=min{k|A(k)≥n}。 即α(n)是使n≤A(k)成立的最小的k值。 例子:A(0)=1,A(1)=2,A(2)=4,A(3)=16 α(1)=0, α(2)=1, 2 α(3)=α(4)=2, 22 α(5)=…=α(16)=3, 2 α(17)= … =α( 65536 )=4, 对通常见到的正整数n,一般都有α(n)≤4
2.1 递归的概念
例2 Fibonacci数列 Fibonacci数列很有意思。来源于繁殖力惊人,基因优秀的兔 子。 1,每一项除以前一项,设为Gn: Gn= Fn+1/Fn = (Fn+Fn-1)/Fn = 1+Fn-1/Fn = 1+1/Gn-1 当n越大,Gn趋于1.618…,黄金比例 (1 5) / 2 2,鹦鹉螺:等角螺曲线,向径和切线的夹角永远不变的曲线
2.1 递归的概念
例5 整数划分问题
3)正整数n划分为若干正奇整数之和的划分数 设:Odd(I,J)表示I划分为J个正奇数的划分数 Even(I,J)表示I划分为J个正偶数的划分数 有如下递推关系: ③J>I&&J<0,Odd(I,J)=0; Odd(1,1)=1,Odd(2,1)=0,Odd(2,2)=1 J>I&&J<0,Even(I,J)=0; Even(1,1)=0,Even(2,1)=1,Even(2,2)=0 总结:n划分为若干正奇数的划分数为 ∑Odd(n,i),(i=1,…,n)
2.1 递归的概念
例5 整数划分问题
3)正整数n划分为若干正奇整数之和的划分数 设:Odd(I,J)表示I划分为J个正奇数的划分数 Even(I,J)表示I划分为J个正偶数的划分数 有如下递推关系: ①Even(I,J)=Odd(I-J,J), 每个偶加数减掉1变为奇加数 ②Odd(I,J)= Odd(I-1,J-1)+Even(I-J,J) 加数含1的方式数 + 加数不含1的方式数
第2章 递归与分治策略
学习要点:

理解递归的概念。 掌握设计有效算法的分治策略。 通过下面的范例学习分治策略设计技巧。 (1)二分搜索技术; (2)大整数乘法; (3)Strassen矩阵乘法; (4)棋盘覆盖; (5)合并排序和快速排序; (6)线性时间选择; (7)最接近点对问题; (8)循环赛日程表。
例5 整数划分问题
2)正整数n划分为m个正整数之和的划分数。 解法二,设d[i][j]表示i划分为j份,视为i个球放入j 个盒子的方法数。有如下递推关系: ①j个盒子有空的,d[i][j]=d[i][j-1],把某一空盒 子拿出来放一边 ②j个盒子都不空,d[i][j]=d[i-j][j],每个盒子扣 掉1个球 ③d[k][0]=0,k>=1; d[k][1]=1,k>=1 总结:n划分为m份的划分数为 d[n][m]
2.1 递归的概念
例5 整数划分问题 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。求正整数n的不 同划分个数。 例如正整数6有如下11种不同的划分: 6; 5+1; 4+2,4+1+1; 3+3,3+2+1,3+1+1+1; 2+2+2,2+2+1+1,2+1+1+1+1; 1+1+1+1+1+1。

2.1 递归的概念
例3 Ackerman函数
α(n)在复杂度分析中常遇到。对于通常所见 到的正整数n,有α(n)≤4。但在理论上α(n) 没有上界,随着n的增加,它以难以想象的慢 速度趋向正无穷大。 数学上还有这样增长非常慢的函数——多重对 数log﹡n,其定义为: log﹡n=min{i>0,log(i)n<1} log﹡2=1,log﹡4=2,log﹡16=3,log﹡65536=4, log﹡(265536)=5 265536比宇宙原子总数都要多,对于一般的数n, log﹡n≤5。
2.1 递归的概念
例4 排列问题 设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。 •设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}。 •集合X中元素的全排列记为perm(X)。 •(ri)perm(X)表示在全排列perm(X)的每一个排列前加上前 缀得到的排列。 R的全排列可归纳定义如下: 当n=1时,perm(R)=(r),其中r是集合R中唯一的元素; 当n>1时,perm(R)由(r1)perm(R1),(r2)perm(R2),…, (rn)perm(Rn)构成。
A(1,0) 2 A(0, m) 1 m0 A(n,0) n 2 n2 A(n, m) A( A(n 1, m), m 1) n, m 1
大家都知道:函数n!趋向无穷速度很快,logn趋向无穷速度 很慢。 但你将看到一个比n!快的多的函数和一个比logn慢的多的函 数,都和Ackerman函数有关。
2.1 递归的概念
例5 整整数划分问题的扩展形式
2)正整数n划分为m个正整数之和的划分数。
解法一,将n的m个整数划分问题看成n块积木堆成m列,这n块积 木从左到右递增的阶梯状。 10的4份划分的三种形式:
该图旋转90度,另一种形 式:
所以,“n划分为m份”=“n划分最大加数不超过m”
2.1 递归的概念
整数划分问题有许多扩展形式,来看如下问题: 1)正整数n划分为若干正整数之和,最大加数不超过m 的划分数 2)正整数n划分为m个正整数之和的划分数 3)正整数n划分为若干正奇整数之和的划分数 4)正整数n划分为互不相同正整数之和的划分数
相关文档
最新文档