搜索
您的当前位置:首页正文

《计算机算法设计与分析》答案

来源:哗拓教育
中国科学院研究生院软件学院大连教学点

《计算机算法设计与分析》试卷 考试时间120分钟

2002年-2003年第二学期

学号 姓名 成绩

一、阐述题

1. 请说明算法的五个基本特性,并进行简要的分析(5分) 答:算法的五个基本特性如下:

① 确定性 算法的每一种运算必须要有确切的定义,即每一种运算应该执行何种动作必须是相当清楚的、无二义性的。

② 能行性 一个算法是能行的是指算法中有待实现的运算都是基本的运算,每种运算至少在原理上能由人用纸和笔在有限时间内完成。

③ 输入 一个算法有0个或多个输人,这些输人是在算法开始之前给出的量,它取自特定的对象集合。

④ 输出 一个算法产生一个或多个输出,这些输出是同输人有某种特定关系的量。 ⑤ 有穷性 一个算法总是在执行了有穷步的运算之后能够终止,且每一步都可在有穷时间内完成。这里的有穷的概念不是纯数学的,而是在实际上是合理的,可以接受的。

凡是算法,都必须满足以上五条特性。只满足前四条特性的一组规则不能称为算法,只能叫做计算过程。

2. 若森林非空,请按照森林和树相互递归的定义,阐述森林的两种遍历的方法。(10分) 答:森林是由m(m≥0)棵互不相交的树构成的集合。对树中的每一个结点而言,其子树的集合即为森林。所以,森林和树是可以相互递归定义的。

对于一个非空的森林F=(T1,T2,…,Tm),因为至少存在一棵树,不妨假设为T1,则森林F可以分解成T1和由T2,…,Tm构成的森林。于是,可得到森林的两种遍历算法。

① 先序遍历森林

若森林非空,则可按下述规则遍历这个森林: (1) 访问树中第一棵树的根结点;

(2) 先序遍历第一棵中根结点的所有子树构成的森林; (3) 先序遍历除去第一棵树外剩下的树构成的森林。 ② 中序遍历森林

若森林非空,则可按下述规则遍历这个森林:

(1) 中序遍历第一棵中根结点的所有子树构成的森林; (2) 访问树中第一棵树的根结点;

(3) 中序遍历除去第一棵树外剩下的树构成的森林。 二、计算题

1. 考虑下列三个函数 (5分)

2 , n为非负奇数 n n , 0≤n≤100

f1(n)= f2(n)= f3(n)=n 1.5

3 , n为正偶数 2 , n>100 , , , n n 填充两个3阶距阵О(i,j),Ω(i,j)。其中,О(i,j),Ω(i,j)的定义分别如下: Y,fi(n)=О(fj(n)) Y,fi(n)=Ω(fj(n))

О(i,j)= Ω(i,j)= 1≤i,j≤3

N,else ; N,else , 。

- 1 -

中国科学院研究生院软件学院大连教学点

请将答案填写在下面的方框中。

О(i,j) f1 f2 f3

f1 Y f2 Y f3 Y

N Y Y

N N Y

Ω(i,j) f1 f2 f3

f1 Y f2 N f3 N

Y Y N

Y Y Y

2. 设W=(5,7,10,12,15,18,20)和M=35,使用过程SumOfSub找出W中使得和数等于M的全部子集并画出所生成的部分状态空间树。 (5分)

答:

设状态空间树的结点形式为由s,k,r构成的三元组,其中s用以记录从根结点到当前结点的路径的加权和(解向量X(i)的取值为左分枝取‘1’,右分枝取‘0’),k表示结点的序号(也是结点的层次号),r表示剩余权值的和。由于给定的权值序列是有序的,所以,将要使用的限界函数是

Bk(X(1),…,X(k))=true 当且仅当

K n k

∑W(i)X(i) + ∑W(i)≥ M 且 ∑W(i)X(i) + W(k+1) ≤ M

i=1 i=k+1 i=1

K-1 n

定义s =∑W(i)X(i) ; r = ∑W(i)

i=1 i=k

使用过程SumOfSub找出W中使得和数等于M的全部子集的部分状态空间树如下:

0,4,50 0,4,50 0,4,50 0,4,50

- 2 -

X(1) =1 5,2,82 0,1,87 0,2,82 12,3,75 5,3,75 7,3,75 0,3,75 0,3,65 0,3,65 0,3,65 0,3,65 0,3,65 0,3,65 0,3,65 0,3,65 0,4,50 0,4,50 0,4,50 0,4,50 0,4,50 0,1,87 0,1,87 0,1,87 0,1,87 0,1,87 0,1,87 0,1,87 0,1,87 中国科学院研究生院软件学院大连教学点

三、证明题

1. 在已知根R(i,j)(0≤i<j≤n)的情况下写一个构造最优二分检索树T的算法。 证明这样的树能在О(n)时间内构造出来。 (10分)

答:R(i,j)(0≤i<j≤n)中记录的是构造最优二分检索树Tij时满足最小成本的k值。

根据最优二分检索树的定义知道,给定的n个标识符是单调有序的(无重复)。 若Tij的根为ak,则aK的左子树上的标识符是{ai,ai+1,,ak-1},而则aK的右子树上的标识符是{ak+1,ak+2,,aj},且当i=j时,Tij是外部结点。

根据上述思路,可依据如下算法构造一棵最优二分检索树。

采用二叉链表作为存储结构,结点的定义如下: typedef struct OBSTNode {

char data; //标识符类型,可以是字符串

struct OBSTNode *lchild, *rchild; //左右孩子结点的指针 } OBSTNode,* OBSTree

Void OBSTCreate(OBSTree P, int i,int j) {

int k; OBSTree S; if (i〈〉j) {

k=r[i][j]; //数组R[][]是全局变量

new(S); //产生一个新的结点,让S指向该结点 S->data=a[k]; //数据A[]是全局变量 If(!P) {P=S}; //产生根结点 Else {

if(S->data < P->data) { //新产生的结点是P结点的左孩子

P->lchild=S; P = S;}

else { //新产生的结点是P结点的右孩子

P->rchild=S; P = S;} } ;

OBSTCreate(P,i,k-1); OBSTCreate(P,k+1,j); }

}// OBSTCreate

main OBST0(OBSTree &T,int n) {

//数组A[]和R[][]是全局变量 if(n<1) return error; OBSTCreate(T,0,n);

}

时间复杂度证明

T(n) = T(k) + T(n-k) + c c为常数 0≤k≤n

= …

= (n+1)*T(0) + n*c 因为T(0)=0 所以T(n)= cn 即,T(n)= ○(n) 证毕

- 3 -

中国科学院研究生院软件学院大连教学点

2.折半查找过程的判定树上,定义根结点到每个内部结点(查找成功的结点)的路径长度之和为内部路径长度,记为I;定义根结点到每个外部结点(查找不成功的结点)的路径长度之和外部路径长度,记为E。

试证明:具有n个内部结点的这样的判定树,满足E = I + 2n 。 (10分) 3. 证明该等式不成立n四、算法题

1. 对于下表左部给定的算法,计算该算法的时间渐进复杂性。 (10分)

语句 bool Bubble(elemTyoe a[],int n) { //把a[0:n-1]中的最大元素冒泡至最后 bool swapped = false; //尚未发生交换 for(int i = 0; ia[i+1]) { Swap(a[i],a[i+1]); swapped = true; //发生了交换 }; return swapped; } void BubbleSort(elemTyoe a[],int n) { //及时终止的冒泡排序算法 for(int i = n; i>1 && Bubble(a,i);i--); } 3n

2+6n3=Ο(n2)。 (5分)

2n3n

s/e 频率 总步数 总计 2. 下面的算法是依据分治策略设计出来的,仔细阅读该算法思路,在划线处填写适当的语句以

完成整个算法。 (15分)

问题:编写出函数reverse(s)的递归程序,使字符串s反序。

算法思路:令指针i,j分别指示字符串s的头、尾字符,然后交换i,j分别指示的字符,并修改对i指针做加1操作;对j指针做减1操作,直到i≥j。

#include void reverse(char s[]) {

void reverser(char s[],int i,int len); reverser(s, ① ,strlen(s)); }

void reverser(char s[],int i,int len) {

int c,j; j = ② ; if (i- 4 -

中国科学院研究生院软件学院大连教学点

{ c = s[i]; s[i] = s[j]; s[j] = c;

reverser(s,++i, ③ );

} }

3. 阅读下面的算法,并回答给定的问题(行号是为了说明问题而设置,它不属于算法本身)。(15分)

void ABC(A,n) {

//A(0:n)是一个一维数组,共有n个可比较值大小的元素; //且A(0)未存放元素;变量x是与A(i)同类型的数据元素。

1 integer i,j; 2 for(j=2;j<=n;j++) { 3 i=j-l; 4 A[0]=A[j]; 5 while(A[0]① 第4行的A(0)的作用是什么?利用A(0)对算法有何影响? ② 整个算法的功能是什么?

③ 程序中变量x是否可省,为什么?

④ 给出while语句的最少执行次数的示例(列出数组A的数据元素例子)

4. 著名的Hanoi塔问题描述如下:有 A,B,C三根针,和一些中间有大小不等的孔的金片。

初始时,金片由小到大全在A针上,其中最大的在下面,最小的在最上面。要求将A针上的金片全部移至B针上,每次只能移动一张金片,且任何时刻不允许将大的金片放在小金片的上面。C针可以作为移动金片的辅助位置。要求利用分治法给出金片移动过程的算法描述。(10分)

- 5 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Top