刚刚考完,现在回顾一下这次考试。总体来说还是比较简单的,凭记忆复现一下题目给后面的学弟学妹一点帮助吧。
一、选择题(15个 30分)
这部分还是比较简单的,只要认真看过老师的6章PPT,很快能做完,用时大约3-5分钟。
二、简答题(2个 20分)
1. 简述动态规划法的算法思想,并写出能用动态规划法解决的问题需要具备的特征。
2. 简述回溯法和分支限界法的异同。
这些PPT上也都提过,书上也有详细说明。
三、算法题(5个 50分)
第一道是算法应用题(用算法思想解实际问题),后面四道是算法实现题(写代码)
1. 用Dijkstra算法求单源最短路径
画表体现一下算法思路和计算过程即可。
2. 重叠区间问题。有一系列区间,有些区间有重叠部分,要求删去其中部分区间,使得剩余区间均不重叠,并且删除的区间数量要最少。
实际上跟活动安排问题的思路完全一样,按活动结束时间(在这里是区间终点)从小到大排序,从前往后安排区间,删去会重叠的区间即可。弄懂活动安排问题这个例题的话,这题肯定能做出来。
3. 油管安排问题。有一个主油管,还有n个油井,给你它们的x坐标和y坐标。油井垂直于主油管有支油管,要确定主油管的位置,使得支油管的长度之和最小。要求用分治法写代码。
这题很奇怪,它又说主油管水平,支油管垂直于主油管,照理说只需要油井的y坐标即可,但还说给了x坐标。不太明白,可能是干扰项也可能是我理解错误。但是按我的思路也就是找n个油井中y坐标最中间的那个油井,然后把主油管安排在那里即可,因为这样不管往上还是往下移动主油管,支油管的长度之和都会增加,因此此时是最小的。此外,如果n是偶数,实际上主油管在上下n/2个油井中间的那段区间均可,此时的支油管的长度之和是一样的。
具体算法的话,其实就是用了线性时间选择这个例题:给定线性序集中n个元素和一个整数k,1≤k≤n,找出这n个元素中第k小的元素。令k=(n+1)/2即可得到我们这题的答案。
4. 数字三角形问题。动态规划做很简单。
5. 给一个w数组和一个数m,要求输出所有能使得数字之和=m的w的子集。
是一个很简单的用回溯法解决的问题,如果你有关回溯法的书中例题都会了,那这题应该非常轻松。