算法设计与分析实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科实验报告
课程名称: 算法设计与分析
实验项目:递归与分治算法
实验地点:计算机系实验楼110
专业班级: 物联网1601 学号: 2016002105
学生姓名: 俞梦真
指导教师: 郝晓丽
2018年05月04 日
实验一递归与分治算法
1、1 实验目得与要求
1.进一步熟悉C/C++语言得集成开发环境;
2.通过本实验加深对递归与分治策略得理解与运用。
1、2实验课时
2学时
1、3 实验原理
分治(Divide-and—Conquer)得思想:一个规模为n得复杂问题得求解,可以划分成若干个规模小于n得子问题,再将子问题得解合并成原问题得解。
需要注意得就是,分治法使用递归得思想。划分后得每一个子问题与原问题得性质相同,可用相同得求解方法。最后,当子问题规模足够小时,可以直接求解,然后逆求原问题得解。
1、4 实验题目
1.上机题目:格雷码构造问题
Gray码就是一个长度为2n得序列。序列无相同元素,每个元素都就是长度为n得串,相邻元素恰好只有一位不同。试设计一个算法对任意n构造相应得Gray码(分治、减治、变治皆可).
对于给定得正整数n,格雷码为满足如下条件得一个编码序列。
(1)序列由2n个编码组成,每个编码都就是长度为n得二进制位串。
(2)序列中无相同得编码.
(3)序列中位置相邻得两个编码恰有一位不同。
2.设计思想:
根据格雷码得性质,找到她得规律,可发现,1位就是0 1。两位就是00 01 11 10。三位就是000001 011 010110111 101 100。n位就是前n—1位得2倍个。N—1个位前面加0,N-2为倒转再前面再加1。
3.代码设计:
运行结果:
1、5 思考题
(1)递归得关键问题在哪里?
答:
1、递归式,就就是如何将原问题划分成子问题。
2、递归出口,递归终止得条件,即最小子问题得求解,可以允许多个出口。
3、界函数,问题规模变化得函数,它保证递归得规模向出口条件靠拢(2)递归与非递归之间如何实现程序得转换
(3)分析二分查找与快速排序中使用得分治思想.
答:
1。一般根据就是否需要回朔可以把递归分成简单递归与复杂递归,简单递归一般就就是根据递归式来找出递推公式(这也就引申出分治思想与动态规划)。
2。复杂递归一般就就是模拟系统处理递归得机制,使用栈或队列等数据结构保存回朔点来求解.
(4)分析二次取中法与锦标赛算法中得分治思想。
二次取中法:使用快速排序法中所采用得分划方法,以主元为基准,将一个表划分为左右两个子表,左子表中得元素均小于主元,右子表中得元素均大于主元。主元得选择就是将表划分为r部分,对找出r个中得中间值,并求r组得中间值中得中间值。
锦标赛算法:
两两分组比较,大者进入下一轮,知道剩下1个元素max为止.在每次比较中淘汰较小元素,将被淘汰元素记录在淘汰它得元素得链表上.检查max得链表,从中知道最大元素,即second
本科实验报告
课程名称: 算法设计与分析
实验项目: 贪心算法
实验地点: 计算机系实验楼110
专业班级: 物联网1601学号:2016002105
学生姓名: 俞梦真
指导教师: 郝晓丽
2018年05月04日
实验二贪心算法
2、1 实验目得与要求
1.理解贪心算法得基本思想;
2。运用贪心算法解决实际问题,加深对贪心算法得理解与运用.
2、2实验课时
4学时(课内2学时+课外2学时)
2、3 实验原理
贪心算法得思想:
(1)贪心算法(GreedyApproach)能得到问题得最优解,要证明我们所做得第一步选择一定包含着一个最优解,即存在一个最优解得第一步就是从我们得贪心选择开始。
(2)在做出第一步贪心选择后,剩下得子问题应该就是与原问题类似得规模较小得子问题,为此我们可以用数学归纳法来证明贪心选择能得到问题得最优解。
2、4 实验题目
1。上机题目:最小延迟调度问题
给定等待服务得客户集合A={1,2,…,n},预计对客户i得服务时长为ti〉0,T=(t1,t2,…,t n),客户i希望得服务完成时刻为di〉0,D=(d1,d2,…,dn);一个调度f:A→N,f(i)为客户i 得开始时刻.如果对客户i得服务在di之前结束,那么对客户i得服务没有延迟,即如果在d i之后结束,那么这个服务就被延迟了,延迟得时间等于该服务得实际完成时刻f(i)+t i减去预期结束时刻d i。一个调度f得最大延迟就是所有客户延迟时长得最大值maxi∈A{f(i)+t i d i}。附图2所示就是不同调度下得最大延迟.使用贪心策略找出一个调度使得最大延迟达到最小。
2.设计思想:
贪心思想,按照她们得截止时间从小到大排序,如果截止时间相同按照花费时间从小到大排序.然后按照f_min(所有客户延迟时长得最大值)=max(works[i]、cost+time-work s[i]、deadline,f_min);寻找最所有客户延迟时长得最大值。
3。代码设计:
ﻩ}
ﻩreturn 0;
}
/*样例输入:
5
58 4103
10 12 15 11 20*/
运行结果:
2、5 思考题
(1)哈夫曼编码问题得编程如何实现?
答:哈夫曼树,又名最优树,给定n个权值作为n得叶子结点,构造一颗二叉树,若带权路径长度达到最小,成这样得二叉树为最优二叉树,也称哈夫曼树.
实现步骤:1、初始化:根据给定得n个权值{w1,w2,…、、wn、、}构成n棵二叉树得集合F={T1,T2…、Tn},其中每棵二叉树中只有一个带权Wi得根结点,左右子树均空。2、找最小树:在F中选择两棵根结点权值最小得树作为左右子树构造一-棵新得二叉树,且至新得二叉树得根结点得权值为其左右子树,上根结点得权值之与.
3、删除与加入: 在F中删除这两棵树,并将新得二叉树加入F中.
4、判断:重复前两步(2与3),直到F中只含有一棵树为止。该树即为哈夫曼树.