2016年中国科学院自动化研究所考博试题算法设计与分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中国科学院自动化研究所
2016年招收攻读博士学位研究生入学考试试题
考试科目: 算法设计与分析
(共2页,7个大题,满分100分,时间为3个小时)
说明:算法设计可以使用类程序语言(伪代码)描述。
1. 完成下列各题(本题包括6个小题,满分30分):
(1) 下列算法求一个十进制正整数在二进制表示中的二进制数字的个数:
Binary(n ) /* n 为十进制正整数 */
count ← 1
while n > 1 do
count ← count +1
⎣⎦2/n n ←
return count
请问该算法的循环次数大约是多少?n >1时,比较运算次数为多少?
(2) 阅读下面的算法,写出针对图1中的二叉树执行该算法的结果。
Status function (BiTee T, Status (* Visit) (TElemType e)) {
Status PrintElement (TElemType e) { printf (e);
return OK;
} if (T) {
if (Visit (T->data)) if (function(T->lchild, Visit))
if return OK; return ERROR;
} else return OK; } // function
(3) 请设计一个递归函数,计算二叉树的高度(只有一个根结点的二叉树的高
度为1)。
- +
/ a c f e
(4) 对于环状的链式队列,请写出计算队列元素个数的算法。
(5) Fibonacci 序列为0,1,1,2,3,5,8,13,21,…… 其中,每个元素是
前两个元素之和。请设计一个计算该序列任意元素的递归算法。
(6) 设一有向图G 的顶点集合为{v 1, v 2, v 3, v 4, v 5},边的集合为{〈v 1, v 2〉, 〈v 2, v 4〉,
〈v 3, v 5〉, 〈v 1, v 3〉, 〈v 1, v 5〉, 〈v 2, v 3〉, 〈v 3, v 4〉, 〈v 4, v 5〉}。请写出入度最大的顶点和出度最大的顶点,并给出G 的拓扑序列。
2. 一元n 次多项式可以写成如下形式:
1212()m e e e n m P x p x p x p x =+++
其中,i p 是指数为i e 的项的非零系数,且满足:120m e e e n ≤<<<=。n 和m 均为正整数。假设A (x )和B (x )为满足上述形式的两个一元多项式。请设计算法用于计算:()()A x B x ⨯。 (本题满分10分)
3. 请设计一个广度优先的非递归算法,打印出任意给定无向图的所有结点,给
出算法的时间复杂度。 (本题满分10分)
4. 请设计一个算法,实现如下功能:打开任意给定的文本文件,打印出某个字
符串(可让用户输入)在该文件中出现的所有位置。 (本题满分10分)
5. 设有如下关键字序列:
49 38 65 97 76 13 27 49
(1) 请写出快速排序的过程和结果;(2)写出递归形式的快速排序算法,并说明平均排序时间。 (本题满分10分)
6. 给定n 种物品和一个袋子,物品i 的重量是w i ,其价值为v i ,袋子的容量为
c 。物品i 装入袋子时可以选择物品i 的一部分,而不一定全部装入袋子。请问:如何选择装入袋子的物品,使得装入袋子中物品的总价值最大?要求:
(1)给出该问题的形式化描述;(2)给出算法描述;(3)给出算法的时间复杂度。 (本题满分15分)
7. 一个长度为n 的有序序列加入k 个新元素(k << n ),假设这k 个新元素随机
地分布于整个序列中。请编写算法对插入新元素后的序列排序,并分析该算法的时间代价和空间代价。 (本题满分15分)