优酷土豆北京站笔试题 2012.9.12 北邮

来源:互联网 发布:手机装机必备软件 编辑:程序博客网 时间:2024/05/19 13:29

2. 广告系统为了做地理位置定向,将IPv4分割成627,672个区间,并标识了地理位置信息, 区间之间无重叠,用二分查找将IP地址映射到地理位置住处请问在最坏的情况下,需要查找多少步?

    A.17   B. 18   C.19    D.20

折半查找的过程可用二叉判定树描述, 判定树中每一结点对应表中一个记录,但结点值不是记录的关键字,而是记录在表中的位置序号。

根结点对应当前区间的中间记录,左子树对应前一子表,右子树对应后一子表。显然,找到有序表中任一记录的过程,对应判定树中从根结点到与该记录相应的结点的路径,而所做比较的次数恰为该结点在判定树上的层次数。折半查找失败时,对应从根结点到某个含空指针的结点路径,关键字比较次数最多不超过判定树的深度。

由于判定树的叶结点所在层次之差最多为1,故n个结点的判定树的深度与n个结点的完全二叉树的深度相等,均为 lower(log2N) +1,最坏情况下,比较次数也为lower(log2N)+1;

 

2^10 = 1024,  2^9 = 512,          2^19 <627,672 < 2^20,  lower(log2N) = 19,  

所以最坏的情况下,需要查找20次

 

5. 在数据库逻辑设计中,当将E-R图转换为关系模式时,下面的做法哪一个是不正确的?

A.一个实体类型转换为一个关系模式

B.一个联系类型转换为一个关系模式

C. 由实体类型转换成的关系模式的主键是该实体类型的主键

D. 由联系类型转换成的关系模式的属性是与该联系类型相关的诸实体类型的属性的全体

 

7.关于非空二叉树的性质,下面哪个结论不正确

A. 有两个子节点的节点一定比没有子节点的节点少一个.

B. 根节点所在层数为第0层,则第i层最多有2^i个结点

C.若知道二叉树的前序遍历序列和中序遍历序列,则一定可以推出后序遍历序列

D.堆一定是一个完全二叉树

 

11.给定声明const char* const * pp; 下属操作或说明正确的是:

A. pp++;

B. (*pp)++;

C. (**pp) = 'c';

D. 以上都不对

 

答案为A.

#include<stdio.h>int main(){const char* const * pp;  //可以理解为 const char*  (const*) pp;pp++;  //只有这句能通过编译//(*pp)++;//(**pp) = 'c';}


14. 下列四种排序中____的空间复杂度最大.

A. 快速排序         B. 冒泡排序      C. 希尔排序     D. 堆

答案:A

快速排序每次将待排序数组分为两个部分,在理想状况下,每一次都将待排序数组划分成等长两个部分,则需要logn次划分。
而在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,快速排序将不幸退化为冒泡排序,

所以快速排序时间复杂度下界为O(nlogn),最坏情况为O(n^2)。在实际应用中,快速排序的平均时间复杂度为O(nlogn)。
快速排序在对序列的操作过程中只需花费常数级的空间。空间复杂度S(1)。
但需要注意递归栈上需要花费最少logn 最多n的空间. 平均空间复杂度为O(log2n)

 

初充一个归并排序的空间复杂度.

归并排序每次递归都要用到一个辅助表,长度与待排序的表长度相同,虽然递归次数是O(log2n),但每次递归都会释放掉所占的辅助空间,所以下次递归的栈空间和辅助空间与这部分释放的空间就不相关了,因而空间上界不会超过O(n+log2n),空间复杂度是O(n)。

 

18. 关于Cookie和Session的概念哪一树是正确的

A. Cookie存储在客户端,但过期时间设置在服务器上

B.Session存储在客户端,但过期时间设置在服务器上

C. Cookie中可以存储ASCII空格' ',而session中不行

D. Cookie可以设置生效的路径,而Session则不能

答案选D

参见,  Cookie与Session的区别: http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html

========================================

填空题

6. 4个结点可以构造出_____个不同的二叉树

Catalan数, An =    1/(n+1)   C(2n,n)  其中n=4,代入可以得14

 

8. 设一组初始记录关键字序列为(20, 18 , 22, 16, 30, 19), 则以20为中轴的一趟快速排序结果为

答案为:  (19, 18, 16, 20 , 30,22 )

 

int QKPass(RecordType r[], int left, int right){RecordType x = r[left];  //基准记录选为第一个元素int low = left;int high = right;while(low < high){while(low < high && r[high].key >= x.key) high--;if(low < high) { r[low] = r[high]; low++;}while(low < high && r[low].key < x.key) low++;if(low < high) { r[high] = r[low]; high--;}}return low;}