算法设计与分析课程设计实习指导书--2018级-0705
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法设计与分析课程设计》指导书
《算法设计与分析课程设计》实习指导书
一、课程设计目的
本课程设计是在学生学习《算法设计与分析》课程后,进行的一次针对具体问题进行算法设计与分析的综合训练,其目的在于加深算法设计分析的理解,掌握算法分析设计方法。
二、算法设计与分析课程设计要求
1.学生必须仔细阅读《算法设计与分析课程设计》实习方案,认真主动完成课设的要求。
有问题及时主动通过各种方式与教师联系沟通。
2.学生要发挥自主学习的能力,充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时向教师汇报。
3.课程设计按照教学要求需要一周(5天)时间完成。
三、实验所用仪器及实验环境
PC机,Codeblocks软件环境。
四、实习基本内容
本次课程设计要求在(一)、(二)、(三)、(四)组中每组选择至少一个题目完成。
(一)分治策略
1、输油管道问题
【题目描述】
某石油公司计划建造一条由西向东的主输油管道,该管道要穿过一个有n口油井的油田。
从每口油田都要有一条输油管道沿最短路径(或南或北)与主管道相连。
如果给定n口油井的位置,即它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管长度总和最小的位置?
【输入】
第一行是一个整数n,表示油井数量(1-1000之间),接下来n行是油井的位置,每行两个整数x和y。
【输出】
各油井到主管道之间的输油管道最小长度总和。
【输入样例】
5
1 2
2 2
1 3
3 -2
3 3
【输出样例】
6
2、船的价值
问题描述:大橙子最近在玩《艦これ》,因此大橙子收集了很多很多的船(这里我们假设大橙子氪了很多金,开了无数个船位)。
去除掉重复的船之后,还剩下N(1≤N≤1,000,000)种不同的船。
每一艘船有一个稀有值,任意两艘船的稀有值都不相同,稀有值越小的船越稀有,价值也就越高。
Nettle现在通过大建又造出了一艘船,他想知道这艘船是不是重复的。
如果是重复的,那么这艘船在Nettle所有的船里面稀有值排多少位。
问题一
Nettle已经先把自己所有船按照稀有值从小到大排列好了(a[1..N]),我们要做的是看看新得到的船(假设稀有值为K)是否在这个序列中,且有对应的a[i]=K时,i为多少?
问题二
因为Nettle的船太多了,他不愿意去给所有船按照稀有值排序,而是直接告诉了我们每一艘船的稀有值。
在这种情况下我们该如何解决这个问题呢?
输入
第1行:2个整数N,K。
N表示数组长度,K表示需要查找的数;
第2行:N个整数,表示a[1..N],保证不会出现重复的数,1≤a[i]≤2,000,000,000。
输出
第1行:一个整数t,表示K在数组中是第t小的数,若K不在数组中,输出-1。
样例输入
10 5180
2970 663 5480 4192 4949 1 1387 4428 5180 2761
样例输出
9
3、整数因子分解
大于1的正整数n可以分解为:n=x1×x2×……×xm。
例如,当n=12时,共有8种不同的分解式:
12=12
12=6×2
12=4×3
12=3×4
12=3×2×2
12=2×6
12=2×3×2
12=2×2×3
输入:
数据有多行,给定正整数(正整数小于10000000)
输出:
每个数据输出一行,是正整数n的不同分解式数量。
输入样例
12
35
输出样例
8
3
4、大整数乘法
当你遇到两个100位的数相乘时,你该怎么办呢?此题求两个不超过150位的非负整数的积。
输出一行,即相乘后的结果。
结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
输入样例
12345678900
98765432100
输出样例
1219326311126352690000
(二)动态规划算法
1、日常购物
问题描述:小明今天很开心,因为在家买的新房子即将拿到钥匙。
新房里面有一间他自己专用的、非常宽敞的房间。
让他更高兴的是,他的母亲昨天对他说:“你的房间需要购买什么物品?怎么布置,你说了算,只要他们的价格总和不超过N元钱”。
小明今天早上开始预算,但他想买太多的东西,肯定会超过母亲的N元限额。
因此,他把对每件物品的渴望程度,分为5等级:用整数1->5表示,第5等表示最想要。
他还从互联网上找到了每件商品(所有整数)的价格。
他希望在不超过N元(可能等于N元)的情况下,将每件商品的价格与效益度的乘积的总和最大化.
设第j件物品的价格为p[j],重要度为w[j],其选中的k件商品,编号依次为j1,j2,……,jk,则所求的总和为:
p[j1]×w[j1]+p[j2]×w[j2]+ …+p[jk]×w[jk]。
请帮小明设计一个符合要求的购物清单。
其中N=2000,K=6
p[1]=200 w[1]=2
p[2]=300 w[2]=2
p[3]=600 w[3]=1
p[4]=400 w[4]=3
p[5]=1000 w[5]=4
p[6]=800 w[6]=5
2、空间计算
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。
某天,雷达捕捉到敌国的导弹来袭。
由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
输入格式
一行,为导弹依次飞来的高度
输出格式
两行,分别是最多能拦截的导弹数与要拦截所有导弹最少要配备的系统数样例输入
389 207 155 300 299 170 158 65
样例输出
6
2
3、线性模型
问题描述:在一个夜黑风高的晚上,有n(n<= 50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。
问所有小朋友过桥的总时间最短是多少。
4、台阶问题
问题描述:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。
实际情况:给定一个矩阵m,从左上角开始每次只能向右走或者向下走,最后达到右下角的位置,路径中所有数字累加起来就是路径和,返回所有路径的最小路径和,如果给定的m如下,那么路径1,3,1,0,6,1,0就是最小路径和,返回12.
1 3 5 9
8 1 3 4
5 0
6 1
8 8 4 0
(三)贪心算法
1、站台安排问题:一个火车站有一个所有火车到达和离开的时间表,需要找出最小站台数,使得按照此时间表调度时,可以容纳所有的火车。
已知火车时刻表如下所示,
动需要花费一个单位时间。
如果在时间T[i]或T[i]之前开始,则活动i将提供P[i]元的利润,其中T[i]是任意的数字。
如果一个活动不是在T[i]或T[i]之前开始的,那么在安排过程中它根本不会带来任何利润。
如果所有事件都可以在0时刻开始。
输入:n个活动的T[i]和P[i]
输出:活动安排顺序和获得的利润。
3、歌曲磁带问题
假设我们有包含n首歌的一组歌曲,希望将他们存储在磁带上。
以便将来用户可以从磁带中读取这些歌曲。
从磁带中读取歌曲不像从磁盘上读取歌曲,首先我们必须播放前面的其他歌曲才能读取我们想要的歌曲,而这需要花费很长的时间。
设A[1……n]为记录每首歌曲播放长度的数组,改变歌曲存放顺序,就会改变访问某个歌曲的成本。
假设每首歌曲被访问的可能性相同,设计一个歌曲存放顺序的方案,将歌曲按此方案存放在磁带上,使预期的成本尽可能小。
(四)回溯法
1、连续邮资问题
(1)问题描述:假设国家发行了k种不同面值的邮票,并且规定每张信封上最多只允许贴h张邮票。
连续邮资问题要求对于给定的k和h的值,给出邮票面值的最佳设计,在1张信封上可贴出从邮资1开始,增量为1的最大连续邮资区间。
例如,当k=5和h=4时,面值为(1,3,11,15,32)的5种邮票可以贴出邮资的最大连续邮资区间是1到70。
(2)样例
输入:
5 4 (5种面值的邮票,最多可以贴4张)
输出:
1,3,11,15,32 (每种邮票的面值)
70 最大邮资
2、电路板排列问题
(1)问题描述:将n块电路板以最佳排列方式插入带有n个插槽的机箱中。
n块电路板的不同排列式方对应于不同的电路板插入方案。
设B={1, 2, …, n}是n块电路板的集合,L={N1, N2, …, Nm}是连接这n块电路板的m个接连块。
Ni是B的一个集子,且Ni中的电路板用同一条导线接连在一起。
设x表现n块电路板的一个排列,即在机箱的第i个插槽中入插的电路板编号是x[i]。
x所确定的电路板排列Density (x)度密定义为越跨相邻电路板插槽的最大连线数。
(2)实例:如下图,设n=8, m=5,给定n块电路板及其m个接连块:B={1, 2, 3, 4, 5, 6, 7, 8},N1={4, 5, 6},N2={2, 3},N3={1, 3},N4={3, 6},N5={7, 8};其中两个可能的排列如图所示,这两个电路板排列的密度分别是2,3。
(a)排列方案1 (b)排列方案2
图 1 电路板排列实例
(a)图中,跨越插槽2和3,4和5,以及插槽5和6的连线数均为2。
插槽6和7之间无跨越连线。
其余插槽之间只有1条跨越连线。
在设计机箱时,插槽一侧的布线间隙由电路板的排列的密度确定。
因此,电路板排列问题要求对于给定的电路板连接条件(连接块),确定电路板的最佳排列,使其具有最小密度。
五、上交相关内容要求
上交成果的内容由以下两个部分组成。
(1)源程序:学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中);
(2)课程设计报告:按照要求书写课程设计报告。
六、实习成绩考核办法
最终成绩=验收成绩*50%+报告成绩*50%。