1.设n是描述问题规模的非负整数,下面程序片段的时间复杂度是————。
x = 2;
while ( x < n/2 )
x = 2*x;
A.O(log2n) B.O(n) C.O(n log2n) D.O(n2)
解:
最后的次数是: 2^(k+1)</n/2 结束
=>2^(k+2)=n
=>k=log2n-2
2.元素a, b, c, d, e 依次进入初始为空的栈中,若元素进栈后可停留、可出栈,直到所有元素都出栈,则在所有可能的出栈序列中,以元素d 开头的序列个数是————。
A.3 B.4 C.5 D.6
解:首先: e>d => e 位置是随意的
d 限定,(a,b,c)顺序,若是全排列,必有 3*2*1=6 但a,b,c 也必有顺序
=》只要把e 插入到a,b,c,之间即可
=》 d xa xb xc xe
d前面的元素必连续入栈
=>四种
3.已知循环队列存储在一维数组A[0..n-1] 中,且队列非空时front 和rear 分别指向队头元素和队尾元素。若初始时队列为空,且要求第1个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是————。
A.0, 0 B.0, n-1 C.n-1, 0 D.n-1, n-1
解答: 循环队列:
front++ 进入=>front[0];
rear 初始化在 a[n-1]
4.若一棵完全二叉树有768 个结点,则该二叉树中叶结点的个数是————。
A.257 B.258 C.384 D.385
解:
512<768<1024
=》deep(tree)=10
deep 10:768-(2^9-1)=257;
deep 9:127
sum=384
//最简答的方法是:特例:
推知 :n0=n0/2=768/2=384
5.若一棵二叉树的前序遍历序列和后序遍历序列分别为1, 2, 3, 4 和4, 3, 2, 1,则该二叉树的中序遍历序列不会是————。
A.1, 2, 3, 4 B.2, 3, 4, 1 C.3, 2, 4, 1 D.4, 3, 2, 1
解:
前序:根左右:
后序:左右根 。
A
AB,D 都不对
6.已知一棵有2011 个结点的树,其叶结点个数为116,该树对应的二叉树中无右孩子的结点个数是————。
A.115 B.116 C.1895 D.1896
解:
使用特殊方法求解:
当底层有116个节点是,转化为对应的二叉树是115:
7.对于下列关键字序列,不.可能构成某二叉排序树中一条查找路径的序列是————。
A.95, 22, 91, 24, 94, 71 B.92, 20, 91, 34, 88, 35
C.21, 89, 77, 29, 36, 38 D.12, 25, 71, 68, 33, 34
解:依次半分大小有序:子节点数值小于父节点数值
A
8.下列关于图的叙述中,正确的是————。
I. 回路是简单路径
II. 存储稀疏图,用邻接矩阵比邻接表更省空间
III.若有向图中存在拓扑序列,则该图不存在回路
A.仅II B.仅I、II C.仅III D.仅I、III
解答:
回路=》/ 简单路径:
存储
III=》拓扑必无环行
B 不对;
9.为提高散列(Hash)表的查找效率,可以采取的正确措施是
I. 增大装填(载)因子
II. 设计冲突(碰撞)少的散列函数
III.处理冲突(碰撞)时避免产生聚集(堆积)现象
A.仅I B.仅II C.仅I、II D.仅II、III
解:
I,假设无穷大,则是把集合元素增大,效率更低
II:可以,冲突少
III:聚集现象不可避免
B。
10.为实现快速排序算法,待排序序列宜采用的存储方式是————。
A.顺序存储 B.散列存储 C.链式存储 D.索引存储
解:快速排序 =>插入排序
是“选定即有序”
A
11.已知序列25, 13, 10, 12, 9 是大根堆,在序列尾部插入新元素18,将其再调整为大根堆,调整过程中元素之间进行的比较次数是————。
A.1 B. 2 C. 4 D .5
解:
25 10 :最后加一个18: 显然在组成的该线性组中移动 2次
41.(8分)已知有6个节点(顶点编号0-5)的有向的带权图G,邻接矩阵A为上三角矩阵,按行为主保存在如下的一位数组中:
要求:
1.写出图G的邻接矩阵;
2.画出有向带权图G
3.求图G的关键路径,并计算该关键路径的长度。
解:
1.邻接矩阵:
0 1 2 3 4 5
0 0
1 0
2 0
3 0
4 0
5 0
因此,若是行优先存储则是:
5+4+3+2+1=15 =》共15
得出每行的数据是:
4,6,x,x,x
5,x,x,x
4,3,x
x,3
3
所以按照对应的数据层次关系得到:
A的矩阵是:
0 4 6 x x x
A= x 0 5 x x x
x x 0 4 3 x
x x x 0 x 3
x x x x x 0
2.根据的第一步的所得矩阵:做出权图是:
//0-1>1= 4 0->2=6
//1->2=5
//2->3=4 //2->4=3
//3->5=3
//4->5=3
3)找寻关键路径之和是:对应的关键路径从开始到结束最迟的时间:
因此可以: 4+5+4+3=16
42.(15 分)一个长度为L(L≥1)的升序序列S,处在第L/2 个位置的数称为S 的中位数。例如,若序列S1=(11, 13, 15, 17, 19),则S1 的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2, 4, 6, 8, 20),则S1 和S2 的中位数是11。现有两个等长升序序列A 和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A 和B 的中位数。要求:
(1)给出算法的基本设计思。
解答:如果归并后排序,中位数。是O(n).是线性查找;空间复杂度:O(n):
高效方法:
1)使用a=b; 则 a或b 即为所求的中位数。
2)假设 a<b;
…a…b…的序列出现。则中位数比出现在a,b 之间。作如下处理:
舍弃A序列的较小的一半,同时舍弃在B的序列中的较大的一半。
(2)根据设计思想,采用C 或C++或JAVA 语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。