算法分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法设计与分析》
实
验
报
告
授课教师:廖慧芬
授课班级:信A0811/12/13
实验一分治法(排序)
实验目的:
1. 理解用分治法求解的问题:当要求解一个输入规模为n,且n的取值相当大的问题时,的,如果问题可以分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1 2.掌握分治法的一般控制流程 DanC(p,q) global n,A[1:n]; integer m,p,q; // 1≤p≤q≤n if Small(p,q) then return G(p,q); else m=Divide(p,q); // p≤m return Combine(DanC(p,m),DanC(m+1,q)); endif end DanC 3. 实现典型的分治算法的编程与上机实验,验证算法的时间复杂性函数。 实验所需软件: Visual c++2008、Myeclipse 8.6 实验步骤: (1)编程实现归并排序算法和快速排序算法,程序中加入比较次数的计数功 能,输出排序结果和比较次数。 (2)输入10组相同的数据,验证排序结果和完成排序的比较次数。 (3)与复杂性函数所计算的比较次数比较。 (4)用表格列出比较结果。 (5)给出文字分析。 编程实现: 实验二分治法(Linear-Time Selection) 实验目的: 1.了解一种复杂的排序算法 2.了解英文原文算法描述 3.掌握分治思想应用于线性时间选择算法中 4. 实现线性时间选择算法的编程与上机实验,验证算法的时间复杂性函数。 实验所需软件: Visual c++2008、Myeclipse 8.6 实验步骤:(50分) 1.读懂英文算法思想 2.输入数据序列 3.对数据序列5个一分组 4.选择基准点 5.划分子序列 6.输出结果 7.给出文字分析 编程实现: 实验三动态规划(最短路径) 实验目的: 1)理解最优子结构的问题。 有一类问题的活动过程可以分成若干个阶段,而且在任一阶段后的行为依赖于该阶段的状态,与该阶段之前的过程如何达到这种状态的方式无关。这类问题的解决是多阶段的决策过程。在50年代,贝尔曼(Richard Bellman)等人提出了解决这类问题的“最优化原理”,从而创建了最优化问题的一种新的算法设计方法-动态规划。 对于一个多阶段过程问题,是否可以分段实现最优决策,依赖于该问题是否有最优子结构性质,能否采用动态规划的方法,还要看该问题的子问题是否具有重叠性质。 最优子结构性质:原问题的最优解包含了其子问题的最优解。 子问题重叠性质:每次产生的子问题并不总是新问题,有些子问题被反复计算多次。问题的最优子结构性质和子问题重叠性质是采用动态规划算法的两个基本要素。 2)理解分段决策Bellman方程。 实验所需软件: Visual c++2008、Myeclipse 8.6 实验步骤: 1.找出最优解的性质,并刻画其结构特征; 2.递归地定义最优值(写出动态规划方程); 3.以自底向上的方式计算出最优值; 4.根据计算最优值时得到的信息,构造一个最优解。 步骤1-3是动态规划算法的基本步骤。在只需要求出最优值的情形,步骤4可以省略,步骤3中记录的信息也较少;若需要求出问题的一个最优解,则必须执行步骤4,步骤3中记录的信息必须足够多以便构造最优解。 最短路径 编程实现多段图的最短路经问题的动态规划算法。 1)图的数据结构采用邻接表。 2)要求用文件装入5个多段图数据,编写从文件到邻接表的函数。 3)验证算法的时间复杂性。 编程实现: 实验四动态规划(longest common subsequence)实验目的: 1.理解最长公共子序列的英文算法描述。 2.理解算法技巧中的动态规划思想。 3.编程实现最长公共子序列问题。 实验所需软件: Visual c++2008、Myeclipse 8.6 实验步骤: 1.输入两个字符序列 2.规划矩形方阵 3.描述程序 4.输出结果 5.文字分析算法时间复杂度 编程实现: 实验五贪心算法(背包问题) 实验目的: 1.优化问题 有n个输入,而它的解就由这n个输入满足某些事先给定的约束条件的某个子集组成,而把满足约束条件的子集称为该问题的可行解。可行解一般来说是不唯一的。那些使目标函数取极值(极大或极小)的可行解,称为最优解。 2.贪心法求优化问题 算法思想:在贪心算法中采用逐步构造最优解的方法。在每个阶段,都作出一个看上去最优的决策(在一定的标准下)。决策一旦作出,就不可再更改。作出贪心决策的依据称为贪心准则(greedy criterion)。 实验所需软件: Visual c++2008、Myeclipse 8.6 实验步骤: 1. 根据题意,选取一种量度标准。 2. 按这种量度标准对这n个输入排序 3. 依次选择输入量加入部分解中。如果当前这个输入量的加入,不满足约束条件,则不把此输入加到这部分解中。 1)实现典型的贪心算法的编程与上机实验,验证算法的时间复杂性函数。 1、实验内容 1)编程实现背包问题贪心算法和最小生成树prim算法。通过具体算法理解如何通过局部最优实现全局最优,并验证算法的时间复杂性。 2)输入5个的图的邻接矩阵,程序加入统计prim算法访问图的节点数和边数的语句。 3)将统计数与复杂性函数所计算的比较次数比较,用表格列出比较结果,给出文字分析。 2、背包问题贪心算法和prim算法 编程实现: