




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生学号0121510880508实验课成绩学 生 实 验 报 告 书实验课程名称算法设计与分析B实验开课学院计算机科学与技术学院指导教师姓名学生姓名丁小兵学生专业班级软件学术15022015-2016学年第2学期实验项目名称分治法的应用报告成绩实验者丁小兵专业班级软件学术1502组别同组者完成日期 2017年5月10日第一部分:实验分析与设计(可加页)一、实验目的和要求1.目的(1) 基本掌握分治算法的原理。(2) 掌握递归算法及递归程序的设计。(3) 能用程序设计语言求解相关问题。2.要求(1) 用分治法求解问题;(2) 分析算法的时间性能,设计实验程序验证分析结论。二、分析与设计1.了解用分治法求解的问题:当要求解一个输入规模为n,且n的取值相当大的问题时,如果问题可以分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1kn,而且子问题与原问题性质相同,原问题的解可由这些子问题的解合并得出。那末,对于这类问题分治法是十分有效的。2.掌握分治法的一般控制流程。DanC(p,q) global n,A1:n; integer m,p,q; / 1pqn if Small(p,q) then return G(p,q); else m=Divide(p,q); / pmq return Combine(DanC(p,m),DanC(m+1,q); endifend DanC3. 实验内容 仔细阅读备选实验的题目,设计序要的程满足正确性,代码中有关键的注释,书写格式清晰,简洁易懂,效率较高,利用C的模板,设计的程序通用性好,适合各种合理输入,并能对不合理输入做出正确的提示。中位数问题 问题描述设X 0 : n - 1和Y 0 : n 1 为两个数组,每个数组中含有n个已排好序的数。找出X和Y的2n个数的中位数。 编程任务 利用分治策略试设计一个O (log n)时间的算法求出这2n个数的中位数。 数据输入由文件input.txt提供输入数据。文件的第1行中有1个正整数n(n=200),表示每个数组有n个数。接下来的两行分别是X,Y数组的元素。 结果输出 程序运行结束时,将计算出的中位数输出到文件output.txt中。输入文件示例输出文件示例input.txtoutput.txt35 15 183 14 2114三、主要仪器设备及耗材1 安装了Windows 10 操作系统的PC机1台 2PC 机系统上安装了Microsoft Visual Studio 2013 开发环境第二部分:实验过程和结果(可加页)四、代码调试说明(调试手段、过程及结果分析) 调试主要内容为编写程序的语法正确性与否,程序逻辑的正确性与否。 F5:启动调试;F11:逐语句调试;F12:逐过程调试;F9: 切换断点;ctrl+B:新建断点等。代码:#include#includeusing namespace std;int midNum(int a, int n) if (n % 2 = 0) return (an / 2 + an / 2 - 1) / 2;elsereturn an / 2;int max(int a, int b) if (a = b) return a;else return b;int min(int a, int b) if (a = b) return a;else return b;int getmidNum(int a, int b, int n) int m1, m2;if (n = 0)return -1;if (n = 1)return (a0 + b0) / 2;if (n = 2)return (max(a0, b0) + min(a1, b1) / 2;m1 = midNum(a, n);m2 = midNum(b, n);if (m1 = m2) return m1;if (m1m2) if (n % 2 = 0) return getmidNum(a + n / 2 - 1, b, n / 2 + 1);else return getmidNum(a + n / 2, b, n / 2 + 1);else if (n % 2 = 0) return getmidNum(b + n / 2 - 1, a, n / 2 + 1);else return getmidNum(b + n / 2, a, n / 2 + 1);int main()/*ofstream oo(file1.txt, ios:out);if (!oo)cout Error;system(pause);return 1;oo 11;oo.close();*/ifstream ii(file1.txt, ios:in);if (!ii)cout i;/cout i;int a10;int b10;int s = 0;for (s = 0; s as;for (s = 0; s bs;ii.close();/cout b2;int result = getmidNum(a, b, i); cout resultendl;ofstream oo(file2.txt, ios:out);if (!oo)cout Error;system(pause);return 1;oo result;oo.close();system(pause);return 0;运行截图:输入截图:输出截图:第三部分:实验小结、收获与体会 这次实验主要是利用分治法来寻求中位数。通过这次的实验,让我充分学习了分治法以及其相关知识点,给我提供了一个动手操作的机会,并且为了能够实现这个目的而努力。当然,不否认这次的实验也是相当有难度的,毕竟感觉工作量挺大的,而且也确实有不少自己不明白的地方。对于这次的实验来说,我通过努力了解了什么是分治法,而且,也懂得了如何利用代码实现分治法。总而言之,这次我收获确实很大。实验项目名称动态规划算法报告成绩实验者丁小兵专业班级软件学术1502组别同组者完成日期 2017年5月10日一、实验目的和要求1.实验目的(1) 能用程序设计语言实现求解相关问题的算法;(2) 深刻掌握动态规划法的设计思想并能熟练运用;(3) 理解这样一个观点:同样的问题可以用不同的方法解决,一个好的算法是反复努力和重新修正的结果。2.实验要求(1) 用动态规划法求解问题;分析算法的时间性能,设计实验程序验证分析结论3.实验内容(1) 仔细阅读备选实验的题目,选择一个(可选多个)作为此次实验题目,设计的程序要满足正确性,代码中有关键的注释,书写格式清晰,简洁易懂,效率较高,利用C的模板,设计的程序通用性好,适合各种合理输入,并能对不合理输入做出正确的提示。(2) 从以下题目中任选其一完成。i. 最大K乘积问题 问题描述 设I是一个n位十进制整数。如果将I划分为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。试设计一个算法,对于给定的I和k,求出I的最大k乘积。例如十进制整数 1234 划分为 3 段可有如下情形:1 2 34 = 681 23 4 = 9212 3 4 = 144 编程任务 对于给定的I 和k,编程计算I 的最大k 乘积。 数据输入输入的第1 行中有2个正整数n和k。正整数n是序列的长度;正整数k是分割的段数。接下来的一行中是一个n位十进制整数。(n=10) 结果输出 计算出的最大k乘积。输入文件示例输出文件示例input.txtoutput.txt3 2312624. 分析设计理解最优子结构的问题。有一类问题的活动过程可以分成若干个阶段,而且在任一阶段后的行为依赖于该阶段的状态,与该阶段之前的过程如何达到这种状态的方式无关。这类问题的解决是多阶段的决策过程。在50年代,贝尔曼(Richard Bellman)等人提出了解决这类问题的“最优化原理”,从而创建了最优化问题的一种新的算法设计方法动态规划。对于一个多阶段过程问题,是否可以分段实现最优决策,依赖于该问题是否有最优子结构性质,能否采用动态规划的方法,还要看该问题的子问题是否具有重叠性质。最优子结构性质:原问题的最优解包含了其子问题的最优解。子问题重叠性质:每次产生的子问题并不总是新问题,有些子问题被反复计算多次。问题的最优子结构性质和子问题重叠性质是采用动态规划算法的两个基本要素。(1) 理解分段决策Bellman方程。每一点最优都是上一点最优加上这段长度。即当前最优只与上一步有关。us 初始值,uj第j段的最优值。(2) 一般方法1) 找出最优解的性质,并刻画其结构特征;2) 递归地定义最优值(写出动态规划方程);3) 以自底向上的方式计算出最优值;4) 根据计算最优值时得到的信息,构造一个最优解。步骤1-3是动态规划算法的基本步骤。在只需要求出最优值的情形,步骤4可以省略,步骤3中记录的信息也较少;若需要求出问题的一个最优解,则必须执行步骤4,步骤3中记录的信息必须足够多以便构造最优解。三、主要仪器设备及耗材1 安装了Windows 10 操作系统的PC机1台 2PC 机系统上安装了Microsoft Visual Studio 2013 开发环境第二部分:实验过程和结果(可加页)四、代码调试说明(调试手段、过程及结果分析) 调试主要内容为编写程序的语法正确性与否,程序逻辑的正确性与否。 F5:启动调试;F11:逐语句调试;F12:逐过程调试;F9: 切换断点;ctrl+B:新建断点等。代码:#include #include #includeusing namespace std;int a101;/给定的n个数字 int m101101; /目标数组,储存最优解 int w101101;int n, k;int max(int a, int b);void maxdp()int temp, _max;/*动态转移方程的求解过程if(j=1) m(i,j) = w(1,i) ;前i位(1:i)数字分j组乘积的最大值等于分为j-1组的结果再乘以一个因子if(j =1 & j=i)m(i,j) = maxm(d,j-1)*m(d+1,i)其中: 1=d i (即从1开始一直到i-1 中找最大值)else if(i j) m(i,j) = 0 ; 、*/如果分成1段 for (int i = 1; i = n; i+)mi1 = w1i;for (int i = 1; i = n; i+)for (int j = 2; j = k; j+)_max = 0;for (int d = 1; d _max)_max = mdj - 1 * wd + 1i;/cout mdj - 1 * wd + 1i = _max b)return a;elsereturn b;int main()system(pause);ifstream i1(input.txt, ios:in);if (!i1)cout nknum;int y = n;for (int x = 1; x = n; x+)y = y - 1;ax = num / (pow(10, y);num = num - ax * (pow(10, y);/wij表示 从第i位到第j位所组成的十进制数 for (int i = 1; i = n; i+)wii = ai;for (int j = i + 1; j = n; j+)wij = wij - 1 * 10 + aj;/每次乘以10再加上个位数 maxdp();ofstream o1(output.txt, ios:out);if (!o1)cout ERROR;system(pause);return 1;o1 mnk;o1.close();cout mnk endl;/fprintf(fp2, %I64d, mnk);/ coutmnke
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 德尔塔疫情防控知识培训课件
- 2025湖南新宁县招聘教师30人考前自测高频考点模拟试题附答案详解
- 德国电改课件
- 2025河北雄安新区雄县事业单位招聘89人模拟试卷及一套答案详解
- 祖国在我心窝课件
- 滑板鞋课件教学课件
- 2025吉林大学白求恩第一医院泌尿外一科录入员招聘1人考前自测高频考点模拟试题及参考答案详解一套
- 冷链物流信息管理系统建设方案
- 2025福建厦门市集美区实验小学顶岗教师招聘1人模拟试卷及一套答案详解
- 创新思维激发的设计策略框架
- 安全强安考试题及答案
- 基于16PF的保险业销售人员选拔与绩效预测:理论、实践与展望
- 2026秋季国家管网集团东北公司高校毕业生招聘笔试备考试题及答案解析
- 2025年10.13日少先队建队日主题班会课件薪火相传强国有我
- 2025小学关于教育领域不正之风和腐败问题专项整治工作方案
- 2025年工会社会工作者招聘笔试模拟试题库及答案
- 2025年甘肃省武威市凉州区发放镇招聘专业化管理大学生村文书备考考试题库附答案解析
- 2024年成人高等考试《政治》(专升本)试题真题及答案
- 《犟龟》课件 部编语文三年级上册
- 教科版科学五年级上册2.1地球的表面教学课件
- 农作物土地租赁合同5篇
评论
0/150
提交评论