2023年最大子段和问题实验报告.docx

上传人:太** 文档编号:72763259 上传时间:2023-02-13 格式:DOCX 页数:6 大小:16.84KB
返回 下载 相关 举报
2023年最大子段和问题实验报告.docx_第1页
第1页 / 共6页
2023年最大子段和问题实验报告.docx_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《2023年最大子段和问题实验报告.docx》由会员分享,可在线阅读,更多相关《2023年最大子段和问题实验报告.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验四最大子段和问题L实验目的(1)掌握动态规划的设计思想并能纯熟运用;(2 )理解这样一个观点:同样的问题可以用不同的方法解决,一个好的算法是反复努力和重新修正的结果;2 .实验规定(D分别用蛮力法、分治法和动态规划法设计最大子段和问题的算法;(2)比较不同算法的时间性能;(3)给出测试数据,写出程序文档;3 .实验设备和软件环境操作系统:Windows 7( 6 4x)开发工具:Visual Stud i o 2 023.实验环节以下实验数据都是以数组a = -2, 11, -4, 13, -5, - 2为例子;蛮力法蛮力法是一方面通过两个f。r循环去求出所有子段的值,然后通过if语句查找

2、出maxsum, 返回子序列的最大子段和;分治法(1)划分:按照平衡子问题的原则,将序列(al, a2,,an)划提成长度相同的两个子序列(al, a 2,.,an/2ri(an/2+ 1 ,.,an);(2)求解子问题:对与划分阶段的情况和可递归求解,情况需要分别计算s 1 =max V1/2 akX! ak乙k = i (i= i 0时,b j =bj -l+aj0(2)、当 bj-l0 W, b(j =aj 然后做递归操作求出最大子段和;5.实验结果蛮力法# i nc 1 u de #include usin g names p a ce st d ;i n t manlifa(int

3、a , i n t x)int i, j, sum=O, maxsum=O;* f or (i = 0 ; i x ; i+)( for (j = i + 1 ; j s u m)o 0(。sum = a i ;o o oo if ( s um maxsum)。 (3ma x s u m = s um :。)0)。re t urn max sum;)int m a in()o ini y, sum;i n t a = -20, 1 1 , -4, 13, -5, 2 );int c = s izeo f ( a ) / s izeof ( i n t );sum = manl if a (a,

4、 c);cout s um;c i n y :。r eturn 0;分治法# i nclu d e #inclu d e usi n g namespace s t d ;i n t MaxSum(int a, in t left, i n t r i ght)(。int s u m = 0 , m i d Sum = 0, 1 e ft Sum = 0, r igh t Sum = 0 ;。int c e nt e r, s 1 , s 2, left s ,r ights;。i f (left = right), sum = a lef t ;else(。cente r = (left +

5、 ri g hl) / 2;lef t Sum = Ma x Sum (a, left, c e nter);。 rights u m = M a x Sum (a, ccn ter + 1 , right);1 ef t s = 0 ;3 fo r (int i = cen t e r; i = 1 e ft; i) 0(。 le f t s += ai:, if (lef t s si) si = 1 e fts:。s 2 =0;s rights = 0 :,for (int j =cente r + 1; j s 2 ) s2 = rig h t s ;。 m i dSum = si +

6、 s2;。 if (midSum leftSum) s u m = leftSum;s else。s um = m i dSum; if ( s um rights u m) sum = rightSum:。)retu r n sum;)int mai n ()(。/ * int s um ;。/int a口 = -20,1 1 , -4, 1 4, -5,-2 ;。/s u ml = Ma x Sum ( a , 0 , 5);cou t sum 1 endl ;*/int j , n;i nt b 1 00;。cout 请输入序列长度:;c i n n :。cou t 请输入序列子段:;f

7、o r (j = 0: j b j:i nt sum, i ;。s um = MaxSum (b, 0, 5):cout sum i;return 0;)动态规划法#in c lude using n amespa c e st d ;in t MaxSum (int n, i n t *a)i nt sum = 0, b = 0;o for (i n to for (i n t1: i 0)。(。b += a i;,。 else。(b = ai:。)。 i f (bsum)00。o sum = b:。return sum;int mainO(。in t k:int a = - 2, 11,

8、4, 13, -5, -2 );for (i n t i = 0; i 6; i+)cout a i cout end 1 ;c out ”数组a的最大连续子段和为: MaxSum( 6 , a) endl;。c in k;。retu r n 0;)6.讨论和分析在一开始做最大了段问题的实验的时候,对于蛮力法和分治法的理解还是可以的,但是对于 动态规划法的理解还不是那么明确透彻,通过网上的一些解释和结合自己书本上的知识,对 动态规划法得到了进一步的理解,接下来是三种算法时间性能的比较:蛮力法:时间复杂度为0(n2)分治法:时间复杂度为:T(n)=0(n 1 og (n)动态规划:时间复杂度为:T(n) = O (n)对于最大子段和问题在上述三种不同的算法中,动态规划算法的时间性能相对于其他两 个比较好。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁