第2章 递归与分治_作业答案

合集下载

第2章 递归与分治_作业答案讲解

第2章 递归与分治_作业答案讲解

具体执行过程:求最大值
0 1 2 3 4 5 6 7 8 9 10 11 12 13 24 -13 29 113 87 65 -9 36 14 76 44 83 67 5 0 1 2 3 4 5 6 24 -13 29 113 87 65 -9 0 1 2 3 24 -13 29 113 0 1 24 -13 2 3 29 113 4 5 6 87 65 -9 7 8 9 10 11 12 13 36 14 76 44 83 67 5 7 8 9 10 36 14 76 44 7 8 36 14 7 36 9 10 76 44 11 12 13 83 67 5 11 12 83 67 11 83 12 67 13 5
课后练习
• 练习2:分析如下时间函数的复杂度,并说明 原因。 1. 利用递归树说明以下时间函数的复杂度:
O(1) T ( n) 3T ( n ) O( n) 4 n1 n1
2. 利用主定理说明以下时间函数的复杂度:
T(n) = 16T(n/4) + n
T(n) = T(3n/7) + 1
课后练习
• 练习1:给定数组a[0:n-1], 1. 试设计一个分治法算法,找出a[0:n-1]中元素最 大值和最小值; 2. 写出该算法时间函数T(n)的递推关系式; 3. 分析该算法的时间复杂度和空间复杂度。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 24 -13 29 113 87 65 -9 36 14 76 44 83 67 5
• 递归公式:
– 设n个元素的集合可以划分为F(n,m)个不同的由 m个非空子集组成的集合。 F(n,m) = 1, when n=0, n=m, n=1, or m=1 F(n,m) = 0, when n<m 否则 F(n,m)=F(n-1,m-1)+m*F(n-1,m)

算法分析与设计习题集整理

算法分析与设计习题集整理

算法分析与设计习题集整理第一章算法引论一、填空题:1、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂度和空间复杂度。

2、多项式10()m m A n a n a n a =+++的上界为O(n m )。

3、算法的基本特征:输入、输出、确定性、有限性 、可行性 。

4、如何从两个方面评价一个算法的优劣:时间复杂度、空间复杂度。

5、计算下面算法的时间复杂度记为: O(n 3) 。

for(i=1;i<=n;i++)for(j=1;j<=n;j++){c[i][j]=0;for(k=1;k<=n;k++)c[i][j]= c[i][j]+a[i][k]*b[k][j];}6、描述算法常用的方法:自然语言、伪代码、程序设计语言、流程图、盒图、PAD 图。

7、算法设计的基本要求:正确性 和 可读性。

8、计算下面算法的时间复杂度记为: O(n 2) 。

for (i =1;i<n; i++){ y=y+1;for (j =0;j <=2n ;j++ )x ++;}9、计算机求解问题的步骤:问题分析、数学模型建立、算法设计与选择、算法表示、算法分析、算法实现、程序调试、结果整理文档编制。

10、算法是指解决问题的 方法或过程 。

二、简答题:1、按照时间复杂度从低到高排列:O( 4n 2)、O( logn)、O( 3n )、O( 20n)、O( 2)、O( n 2/3),O( n!)应该排在哪一位?答:O( 2),O( logn),O( n 2/3),O( 20n),O( 4n 2),O( 3n ),O( n!)2、什么是算法?算法的特征有哪些?答:1)算法:指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。

通俗讲,算法:就是解决问题的方法或过程。

2)特征:1)算法有零个或多个输入;2)算法有一个或多个输出; 3)确定性 ; 4)有穷性3、给出算法的定义?何谓算法的复杂性?计算下例在最坏情况下的时间复杂性?for(j=1;j<=n;j++) (1)for(i=1;i<=n;i++) (2) {c[i][j]=0; (3)for(k=1;k<=n;k++) (4)c[i][j]= c[i][j]+a[i][k]*b[k][j]; } (5)答: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)差消化简:利用两个方程相减,将右边的项尽可能消去,以达到降阶的目的。

电子学会2023年09月份青少年软件编程Python等级考试四级真题(含答案和解析)

电子学会2023年09月份青少年软件编程Python等级考试四级真题(含答案和解析)

2023年9月电子学会Python四级考试真题(含答案和解析)分数:100 题数:38 测试时长:90min一、单选题(共25题,共50分)1、用枚举算法求解“100以内既能被3整除又能被4整除的元素”时,在下列数值范围内,算法执行效率最高的是?(D)A.1~101B.4~100C.12~100D.12~96答案解析:在选取循环控制变量时,枚举范围应尽可能小,但又不能遗漏。

2、下列有关函数的描述中,正确的是?(C)A.函数中必须有return语句B.在函数内部不能使用全局变量C.函数能提高应用的模块化程度和代码的重复利用率D.函数内容以大括号起始,并且缩进答案解析:函数能提高应用的模块化程度和代码的重复利用率3、下列哪个语句能够定义参数个数不确定的函数?(D)A.hs(parameters)B.hs(parameters[])C.hs(parameters{})D.hs(*parameters)答案解析:当不确定需要传入的值是多少个时,在定义形参时,可以使用*parameters来表示。

4、执行如下Python代码的结果是?(A)def area(r,pi=3.14):return r*r*piprint(area(2,10))A.40B.200C.400D.20答案解析:函数运行结果,2*2*10,结果是40。

5、执行如下Python代码,输出结果是?(A)def hs(num):num += 1return numn=10s=hs(n)print(s)A.11B.10C.1D.运行错误答案解析:函数的返回值,赋值给变量s,输出11。

6、有如下Python程序,输出的结果是?(B)def whao(year = '2023'):print('你好' + year)whao()A.你好B.你好2023C.你好yearD.没有输出答案解析:定义了一个名为 whao 的函数,它有一个默认参数 year,其默认值为 '2023'。

第2章 递归与分治_作业答案

第2章 递归与分治_作业答案

• 练习3:分析Strassen矩阵乘法在时间效率上有何 改进,为什么?
• Strassen矩阵乘积分治算法中,用了7次对于n/2阶 矩阵乘积的递归调用和18次n/2阶矩阵的加减运算。 由此可知,该算法的所需的计算时间T(n)满足如 下的递归方程: O1 n2
T n 2 7 T n / 2 O n
• 要求:
– 设计算法; – 写出该算法时间函数T(n)的递推关系式; – 分析其时间复杂度和空间复杂度。
关于集合划分问题的分析
• 例如:集合 { 1, 2, 3 } 有五个划分
– { {1}, {2}, {3} }, – { {1, 2}, {3} },{ {1, 3}, {2} },{ {1}, {2, 3} }, – { {1, 2, 3} }。 • 算法设计要求:给定正整数n 和m,计算出n 个元素的集 合{1,2,., n }可以划分为多少个不同的由m 个非空子集组成 的集合。 • 数据输入:由文件input.txt 提供输入数据。文件的第1 行 是元素个数n 和非空子集数m。 • 结果输出:程序运行结束时,将计算出的不同的由m个非 空子集组成的集合数输出到文件output.txt 中。
课后练习(选做)
• 练习6:假设有n个项的数组A,每个项具有一个 不同的数。告诉你值A[1],A[2],…,A[n]的序列是单 峰的:对于某个在1与n之间的下标p,数组项的值 增加到A中的位置p,然后剩下的过程减少直到位 置 n。 • 要求:
– 利用分治策略设计一个算法,读尽可能少的元 素,找到这个“顶峰”元素p。
T(n) = 3T(n/4) + nlogn
• 练习2:分析如下时间函数的复杂度,并说明原因。
1. 利用递归树说明以下时间函数的复杂度:

算法分析设计期末复习

算法分析设计期末复习

通过解递归方程
logm n1
T (n) nlogm k k j f (n / m j ) j0
学习要点: 理解递归的概念。 掌握设计有效算法的分治策略。 通过下面的范例学习分治策略设计技巧。 (1)二分搜索技术; (2)大整数乘法; (3)Strassen矩阵乘法; (4)棋盘覆盖; (5)合并排序和快速排序; (6)线性时间选择; (7)最接近点对问题; (8)循环赛日程表。
基本运算Oi的执行次数ei分别进行统计分析。 – T(N,I)还需进一步简化,只在某些有代表性的合法输
入中去统计相应的ei来评价其复杂性。 – 一般只考虑三种情况下的时间性:最坏情况、最好
情况和平均情况下的复杂性,分别记为Tmax(N)、 Tmin(N)和Tavg(N)
四种渐近意义下的符号
• 四种渐近意义下的符号 –O –Ω –θ –o
}
----------------------------------------------------------------------------------------
CheckNum( T , p , q , element): ▹计算T[p..q]中element出现的次数
{ cnt ← 0
• 思路二:直接统计各 元素出现的次数,用 某一线性数据结构 存储统计结果(例如 用一个辅助数组存 储统计结果,统计时 用数组下标对应相 应元素)
第三章:动态规划
动态规划算法的基本思想
• 动态规划算法的基本思想
– 其基本思想与分治算法的思想类似——分而治之 – 与分治法的不同之处
• 分解后的子问题往往不互相独立; • 采用记录表的方法来保存所有已解决问题的答案
考虑时间 资源

大学_计算机算法设计与分析第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版)》;并免费提供电子课件和教学服务。

算法设计与分析习题第二章分治与递归

算法设计与分析习题第二章分治与递归

2010-12-28
12
2.11 编写针对链表的快速排序程序。
需要保存指针信息。下面给出双向链表的快速排序算法 void fast_sort( Sdata *a, Sdata *f, Sdata *t ) { Sdata *i,*j,k,p; i = f; j = t; if ( t->lnext != f ) { k = a->data; //用于比较的基准数值 i = f; j = t; p = -1; while ( j != i )
7
2.7 按2.2.4节的描述,编写从二叉树中删除一个结点 的C语言程序 二叉树节点删除有三种情况: (1)*p是叶子(即它的孩子数为0):无须连接*p的子树, 只需将*p的双亲*parent中指向*p的指针域置空即可。 (2)*p只有一个孩子*child:只需将*child和*p的双亲直接 连接后,即可删去*p。注意:*p既可能是*parent的左孩 子也可能是其右孩子,而*child可能是*p的左孩子或右孩 子,故共有4种状态。 (3)*p有两个孩子:先令q=p,将被删结点的地址保存在q 中;然后找*q的中序后继*p,并在查找过程中仍用parent 记住*p的双亲位置。*q的中序后继*p一定是 *q的右子树 中最左下的结点,它无左子树。因此,可以将删去*q的 操作转换为删去的*p的操作,即在释放结点*p之前将其 数据复制到*q中,就相当于删去了*q.
算法设计与分析习题
第二章 分治与递归
2010-12-28
1
2.1 对于顺序查找算法,分析目标值存在于数组中的 概率p趋于0的含义,这种情况下平均查找次数有什么 样的变化?当p趋于1时呢? 见教材P12。平均比较次数为 n - p(n-1)/2。 p趋于0,平均次数趋于n;p趋于1时,平均次数趋于 (n+1)/2。(求极限)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 练习3:分析Strassen矩阵乘法在时间效率上有何 改进,为什么?
• Strassen矩阵乘积分治算法中,用了7次对于n/2阶 矩阵乘积的递归调用和18次n/2阶矩阵的加减运算。 由此可知,该算法的所需的计算时间T(n)满足如 下的递归方程: O1 n2
T n 2 7 T n / 2 O n
具体执行过程:求最大值
0 1 2 3 4 5 6 7 8 9 10 11 12 13 24 -13 29 113 87 65 -9 36 14 76 44 83 67 5 0 1 2 3 4 5 6 24 -13 29 113 87 65 -9 0 1 2 3 24 -13 29 113 0 1 24 -13 2 3 29 113 4 5 6 87 65 -9 7 8 9 10 11 12 13 36 14 76 44 83 67 5 7 8 9 10 36 14 76 44 7 8 36 14 7 36 9 10 76 44 11 12 13 83 67 5 11 12 83 67 11 83 12 67 13 5
课后练习
• 练习1:给定数组a[0:n-1], 1. 试设计一个分治法算法,找出a[0:n-1]中元素最 大值和最小值; 2. 写出该算法时间函数T(n)的递推关系式; 3. 分析该算法的时间复杂度和空间复杂度。
0 1 2 3 4 5 6 7 8 9 10 11 12 13 24 -13 29 113 87 65 -9 36 14 76 44 83 67 5
课后练习
• 练习2:分析如下时间函数的复杂度,并说明 原因。 1. 利用递归树说明以下时间函数的复杂度:
O(1) T ( n) 3T ( n ) O( n) 4 n1 n1
2. 利用主定理说明以下时间函数的复杂度:
T(n) = 16T(n/4) + n
T(n) = T(3n/7) + 1

n2
T(n)=O(nlog7)≈O(n2.81)
较大的改进
课后练习
• 练习4:划出下列序列在快速排序过程中一次 划分的具体步骤。
21 25 49 25* 16 08
一次划分的过程
初始关键字
pivotkey 21 low 08 08 08 08 08 25 49 25* 16 08 high 21 high 25
T(n) = 3T(n/4) + nlogn
• 练习2:分析如下时间函数的复杂度, T ( n) 3T ( n ) O( n) 4 n1 n1
• 递归树的高度为:log4n+1;
• 除去叶子结点,树有log4n层,每层结点总数为:
时间复杂性分析
• 该算法的时间函数的递推式为:
O(1) n1 T (n) n T ( ) O(1) n 1 2
• 该算法的时间复杂度为:O(log2n)
课后练习(选做)
• 练习7:假设你正在为一个小的投资公司咨询,他们有下 面类型的问题想要一次又一次的求解。这个问题的一个 典型实例如下所述。他们正在做一项模拟,在这项模拟 中他们从过去的某点开始对一只给定的股票连续看n天。 让我们把这些天记为数i=1,2,…,n;对每天i,他们有当天 这只股票每股的价格p(i)(简单起见,假设这个价格在一 天之内是固定的)。假设在这个时间区间内,某天他们 想买1000股并且在以后的某天卖出所有这些股。他们想 知道:为了挣到最多的钱,他们应该什么时候买并且什 么时候应该卖?
• 要求:
– 设计算法; – 写出该算法时间函数T(n)的递推关系式; – 分析其时间复杂度和空间复杂度。
关于集合划分问题的分析
• 例如:集合 { 1, 2, 3 } 有五个划分
– { {1}, {2}, {3} }, – { {1, 2}, {3} },{ {1, 3}, {2} },{ {1}, {2, 3} }, – { {1, 2, 3} }。 • 算法设计要求:给定正整数n 和m,计算出n 个元素的集 合{1,2,., n }可以划分为多少个不同的由m 个非空子集组成 的集合。 • 数据输入:由文件input.txt 提供输入数据。文件的第1 行 是元素个数n 和非空子集数m。 • 结果输出:程序运行结束时,将计算出的不同的由m个非 空子集组成的集合数输出到文件output.txt 中。
– 分析该算法的时间复杂性。
问题分析
• 何为“单峰”?
– 对于某个在1与n之间的下标p,数组项的值增 加到A中的位置p,然后剩下的过程减少直到 位置n; – 即在A[1]到A[n]的n个数中,只有一个极大值 A[p]; – A[p]前的元素均小于A[p],并按升序排列;
– A[p]后的元素均小于A[p],并按降序排列。
• 则算法是在下面三个可能的解中最好的: – S上的最优解 – S’上的最优解 – p(j)-p(i)的最大值,对所有的i∈S且j∈S’ • 前两个选择中的每一个在T(n/2)时间内被递归地计算;
• 第三个选择通过找S中的最小与S’中的最大而计算,该操 作需要O(n)时间。
• 则运行时间的递推关系式是: T ( n) 2T ( n ) O( n) 2 • 则算法的时间复杂度为:O(nlog2n)。
问题分析、举例说明
• 利用分治策略设计一个算法。
• 举例:
– 假设n=3, p(1)=9, p(2)=1, p(3)=5. 那么应该得出“2买,3 卖”的结论。即,在第2天买并且在第3天卖意味着每股 将挣4美元,是这个期间最大的收益。 • 问题分析: – 存在一个简单的算法,时间复杂度是O(n2):对所有的 买天/卖天构成的对进行尝试,看看哪个对能使用户挣 到最多的钱。 – 假设在第i天买、第j天卖可以获得最大收益:最优解。
一次交换
二次交换
三次交换
四次交换 完成一趟排序
25 49 low 21 49 low 16 49
16 16
25* 16
25*
16 high 25* 21 25 high low 21 25* 49 25 low high 21 25* 49 25
low high
课后练习
• 练习5:算法实现题2-8(教材第42页)集合划 分问题。
• 如果要求F(4,2)该怎么办呢?
A. 往①里添一个元素{4},得到{{1,2,3},{4}}
B. 往②里的任意一个子集添一个4,得到 {{1,2,4},{3}},{{1,2},{3,4}},
{{1,3,4},{2}},{{1,3},{2,4}},
{{2,3,4},{1}},{{2,3},{1,4}} ∴F(4,2)=F(3,1)+2*F(3,2)=1+2*3=7
• 递归公式:
– 设n个元素的集合可以划分为F(n,m)个不同的由 m个非空子集组成的集合。 F(n,m) = 1, when n=0, n=m, n=1, or m=1 F(n,m) = 0, when n<m 否则 F(n,m)=F(n-1,m-1)+m*F(n-1,m)
• 考虑3个元素的集合,可划分为 – ① 1个子集的集合:{{1,2,3}} – ② 2个子集的集合:{{1,2},{3}},{{1,3},{2}}, {{2,3},{1}} – ③ 3个子集的集合:{{1},{2},{3}} ∴F(3,1)=1;F(3,2)=3;F(3,3)=1;
课后练习(选做)
• 练习6:假设有n个项的数组A,每个项具有一个 不同的数。告诉你值A[1],A[2],…,A[n]的序列是单 峰的:对于某个在1与n之间的下标p,数组项的值 增加到A中的位置p,然后剩下的过程减少直到位 置 n。 • 要求:
– 利用分治策略设计一个算法,读尽可能少的元 素,找到这个“顶峰”元素p。
c2 n (1 3 ( 3 ) 2 ( 3 )log4 n1 ) 4 4 4
• 最后一层叶子结点数: 3log4 n nlog4 3
换底公式
2. 利用主定理说明以下时间函数的复杂度:
T(n) = 16T(n/4) + n T(n) = T(3n/7) + 1 T(n) = 3T(n/4) + nlogn 定理(主定理): a≥1且b>1是常数, f(n)是一个函数,T(n)由 如下的递推式定义:T(n)=aT(n/b)+f(n),式中,n/b指n/b或 n/b,则T(n)有如下的渐近界: (1)若对于某常数є>0,有f(n)=O(nlogba-є),则T(n)=(nlogba); (2)若f(n)=(nlogba ),则T(n)=(nlogbalogn); (3)若对于某常数є>0,有f(n)=(nlogba+є ),且对于某个常数 c<1和所有足够大的n,有af(n/b)≤cf(n),则T(n)=(f(n))。
• 如果A[n/2]比A[n/2-1]和A[n/2+1]都大,顶峰项实际上就等 于A[n/2]。
具体算法:伪代码
int Danfeng(int A[], int m, int n) { //求单峰数组中的顶峰值 int k=(m+n)/2; if(k==m&&k==n) return A[k]; if(A[k-1]<A[k]&&A[k]>A[k+1]) return A[k]; else { if(A[k-1]<A[k]&&A[k]<A[k+1]) Danfeng(A[], k+1, n); if(A[k-1]>A[k]&&A[k]>A[k+1]) Danfeng(A[], m, k-1); } }
具体算法:伪代码
int MaxProfit(int p[], int m, int n) { //求第m到第n天内一次买卖股票的最大收益 int i=m, j=(m+n)/2+1; //在第i天买入股票,并在第j天卖出股票 int k; int max1, max2, max3; //三个可能的最优解 max1=MaxProfit(p, m, (m+n)/2); // S上的最优解 max2=MaxProfit(p, (m+n)/2+1, n); // S’上的最优解 for(k=m+1;k<=(m+n)/2;k++) //求最小p(i) if(p(i)>p(k)) p(i)=p(k); for(k=(m+n)/2+2;k<=n;k++) //求最大p(j) if(p(j)<p(k)) p(j)=p(k); max3=p(j)-p(i); return 最大值(max1, max2, max3); } //最优解
相关文档
最新文档