算法设计和研究课程中最大子段与问题教学探析

算法设计和研究课程中最大子段与问题教学探析摘要介绍算法设计与分析课程中最大子段和问题的动态规划解法,其求解思想是先求给定序列中以每一个元素为尾元素的最大子段和,然后其中的最大者便是整个序列的最大子段和。从两个不同的角度分析最大子段和问题最优解的构造方法,给出最大子段和问题的动态规划算法,并分析算法的时间复杂度。通过这一问题的讲解,有助于学生明确动态规划方法的解题步骤,掌握动态规划算法的设计步骤。关键词最大子段和;动态规划;时间复杂度:G642.4文献标识码:B:1671-489X(2013)27-0050-03最大子段和问题出自于2005年浙江大学计算机专业研究生入学考试计算机专业基础综合试题,它是一个典型的最优化问题该问题描述为:给定由n个整数(可能为负整数)组成的序列al,a2,...,an,其中,ai,ai+1,・.・,aj-1,aj(lWiWjWn)称为序列al,a2,...,an的一个子段,显然子段中的元素是连续的,该子段中所有整数的和称为该子段的和。对于序列al,a2,...,an来说,它有很多不同的子段,每个子段都有一个和,要求出该序列的各个子段的和的最大值,当序列中所有整数均为负整数时定义其最大子段和为o[l-2]。该问题的解法有多种,笔者在算法设计与分析课程的授课过程中,针对该问题给出了三种求解方法,分别是枚举法、分治法和动态规划方法。用枚举法求最大子段和问题,时间复杂度为0(n2);用分治法求最大子段和问题,其算法的时间复杂度可以降到0(nlog2n);而如果用动态规划方法求解最大子段和问题,其时间复杂度仅为0(n),效率要比枚举法和分治法高很多。这里主要探讨该问题的动态规划解法,包括求解该问题的最优值和构造该问题的最优解,最优值是指给定序列的最大子段和是多少,最优解是指和最大的子段是哪一个子段。1求解最大子段和问题的一种新思路设a[l:n]是一个含有n个元素的整型数组,用a[l]〜a[n]这n个单元来存储n个整数,a[0]空闲不用。对于数组a来说,它有许多不同的子段,每个子段都有唯一的一个首元素,也有唯一的一个尾元素。那么对于数组a来说,它的所有子段的尾元素的下标位置的范围是从1到n的,即子段的尾元素的下标位置可以是1,这时这个子段就是由a[l]本身构成的,子段的尾元素的下标位置也可以是2,依此类推,子段的尾元素的最后一个下标位置是n。因此可将数组a的所有子段分成n种,第一种是以数组元素a[l]为尾元素的子段,第二种是以数组元素a[2]为尾元素的子段,依此类推,第n种是以数组元素a[n]为尾元素的子段。显然每种子段都有一个最大子段和,那么数组a的最大子段和就是这n个最大子段和中的最大者。因此可先求以数组元素a[l]为尾元素的最大子段和,再求以数组元素a[2]为尾元素的最大子段和,依此类推,一直求到以数组元素a[n]为尾元素的最大子段和,则整个数组的最大子段和就是这n个最大子段和中的最大者。若用数组元素b[j]来表示以数组元素a[j]为尾元素的最大子段和,则整个数组的最大子段和就是,于是求整个数组的最大子段和就转化为求各个b[j]o下面来讨论如何用动态规划方法求b[j]o2用动态规划方法求b[j]动态规划方法求解问题的第一步就是分析最优解的性质,并刻画它的结构特征,也就是证明这个问题具有最优子结构性质,即证明问题的最优解中是否包含了子问题的最优解。2.1最优子结构性质假设子段{a[s],a[s+l],…,aEj-1],a[j]}是以a[j]为尾元素的最大子段,也就是说b[j]=o那么必有子段{a[s],a[s+l],…,a[j-l]}—定是以a[j-l]为尾元素的最大子段,也就是说必有b[j-l]=o假设子段{a[s],a[s+l],…,a[j-l]}不是以a[jT]为尾元素的最大子段,以a[j-l]为尾元素的最大子段是{a[r],a[r+1],…,a[j-l]},r或大于s或小于s,则必有。只要在子段{a[r],a[r+l],…,a[jT]}的后面加上一个元素a[j],就能得到另外一个以a[j]为尾元素的子段{a[r],a[r+l],…,a[j-l],a[j]},这个子段的和可表示为+a[j],显然有+a[j]>+a[j]=b[j]。这里假设a[j]不为0,这显然与b[j]是以a[j]为尾元素的最大子段和相矛盾,也就是与假设的{a[s],a[s+l],…,a[j]}是以a[j]为尾元素的最大子段相矛盾。因此,如果{a[s],a[s+l],…,a[j-1],a[j]}是以a[j]为尾元素的最大子段,那么就必有...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?