该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
“算法分析与设计”是一门面向设计的,处于计算机类相关学科核心地位的课程。无论是计算机系统、系统软件和解决计算机的各种应用课题都可归结为算法的设计。通过本课程的学习,学生将消化理论知识,加深对讲授内容的理解,尤其是一些算法的实现及其应用;并掌握计算机领域中许多常用的非数值计算的算法设计技术:递归算法、分治算法、贪心算法、动态规划算法、回溯算法、分支限界算法,增强独立编程和调试程序的能力;与此同时,读者将对算法的分析与设计有更深刻的认识,并掌握算法分析的方法。
上机实验一般应包括以下几个步骤。
(1)准备好上机所需的程序。手编程序应书写整齐,并经人工检查无误后才能上机。
(2)上机输入和调试自己所编写的程序。一人一组,独立上机调试。若上机时出现问题,最好独立解决。
(3)上机结束后,整理出实验报告。实验报告应包括:题目、程序清单、运行结果、对运行情况所做的分析等。
实验一 递归与分治算法
1.1 实验目的与要求
1. 进一步熟悉C/C++语言的集成开发环境;
2. 通过本实验加深对递归与分治策略的理解和运用。
1.2 实验课时
4学时(课内2学时+课外2学时)
1.3 实验原理
分治(Divide-and-Conquer)的思想:一个规模为n的复杂问题的求解,可以划分成若干个规模小于n的子问题,再将子问题的解合并成原问题的解。
需要注意的是,分治法使用递归的思想。划分后的每一个子问题与原问题的性质相同,可用相同的求解方法。最后,当子问题规模足够小时,可以直接求解,然后逆求原问题的解。
1.4 实验题目
1. 范例:汉诺塔(hanoi)问题
设有A、B、C共3根塔座,在塔座A上堆叠n个金盘,每个盘大小不同,只允许小盘在大盘之上,最底层的盘最大,如附图1所示。现在要求将A上的盘全都移到C上,在移的过程中要遵循以下原则:每次只能移动一个盘;圆盘可以插在A、B和C任一个塔座上;在任何时刻,大盘不能放在小盘的上面。附图1所示为初始状态。
hanoi问题递归求解思想:
我们把一个规模为n的hanoi问题:1到n号盘按照移动规则从A上借助B移到C上表示为H(A,B,C,n);原问题划分成如下三个子问题:
(1)将1到n-1号盘按照移动规则从A上借助C移到B上H(A,C,B,n-1);
(2)将n号盘从A上直接移到C上;
(3)将1到n-1号盘按照移动规则从B上借助A移到C上H(B,A,C,n-1);
经过三个子问题求解,原问题的也即求解完成。
hanoi问题递归求解代码:
void H(char A,charB,charC,int n)
{
if(n>0)
{
H(A,C,B,n-1);
printf("%d from %c to %c",n,A,C);
H(B,A,C,n-1);
}
}
2. 上机题目:格雷码构造问题
Gray码是一个长度为2n的序列。序列无相同元素,每个元素都是长度为n的串,相邻元素恰好只有一位不同。试设计一个算法对任意n构造相应的Gray码(分治、减治、变治皆可)。
对于给定的正整数n,格雷码为满足如下条件的一个编码序列。
(1)序列由2n个编码组成,每个编码都是长度为n的二进制位串。
(2)序列中无相同的编码。
(3)序列中位置相邻的两个编码恰有一位不同。
1.5 思考题
(1)递归的关键问题在哪里?
(2)递归与非递归之间如何实现程序的转换?
(3)分析二分查找和快速排序中使用的分治思想。
(4)分析二次取中法和锦标赛算法中的分治思想。
实验二 贪心算法
2.1 实验目的与要求
1. 理解贪心算法的基本思想;
2. 运用贪心算法解决实际问题,加深对贪心算法的理解和运用。
2.2 实验课时
4学时(课内2学时+课外2学时)
2.3 实验原理
贪心算法的思想:
(1)贪心算法(Greedy Approach)能得到问题的最优解,要证明我们所做的第一步选择一定包含着一个最优解,即存在一个最优解的第一步是从我们的贪心选择开始。
(2)在做出第一步贪心选择后,剩下的子问题应该是和原问题类似的规模较小的子问题,为此我们可以用数学归纳法来证明贪心选择能得到问题的最优解。
2.4 实验题目
1. 范例:单源最短路径
在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],找到由顶点 V到其余各点的最短路径。
按路径长度递增次序产生最短路径算法。
首先把V分成两组:
(1)S:已求出最短路径的顶点的集合;
(2)V-S=T:尚未确定最短路径的顶点集合。
然后将T中顶点按最短路径递增的次序加入到S中,需保证:
(1)从源点V到S中各顶点的最短路径长度都不大于从V到T中任何顶点的最短路径长度;
(2)每个顶点对应一个距离值。S中顶点:从V到此顶点的最短路径长度;T中顶点:从V到此顶点的只包括S中顶点作中间顶点的最短路径长度。
依据:可以证明V到T中顶点Vk的最短路径,或是从V到Vk的直接路径的权值;或是从V经S中顶点到Vk的路径权值之和。(反证法可证)
单源最短路径代码:
void

本实验指导书聚焦于计算机科学中的算法设计与分析,涵盖递归与分治、贪心算法和动态规划。通过实例解析汉诺塔、格雷码构造、单源最短路径、最小延迟调度、0-1背包问题及旅行商问题,旨在深化学生对这些算法的理解和应用。实验要求学生通过编程实践,掌握算法的实现和调试,同时通过思考题探讨算法转换、正确性和优化策略。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



