第一部分 单选题
1假设把整数关键码K散列到N个槽列表,以下哪些散列函数是好的散列函数
A: h(K)=K/N;
B: h(K)=1;
C: h(K)=K mod N;
D: h(K)=(K+rand(N)) mod N, rand(N)返回0到N-1的整数
D选项随机函数第二次使用得到的值不同,当散列完用该表达式找不到值得位置
2 下面排序算法中,初始数据集的排列顺序对算法的性能无影响的是
A: 堆排序
B:插入排序
C: 冒泡排序
D:快速排序
3 下面说法错误的是
A: CISC计算机比RISC计算机指令多
B: 在指令格式中,采用扩展操作码设计方案的目的是为了保持指令字长不变而增加寻址空间
C:增加流水线段数理论上可以提高CPU频率
D:冯诺依曼体系结构的主要特征是存储程序的工作方式
4 不属于冯诺依曼体系结构必要组成部分是:
A:CPU
B: Cache
C:RAM
D:ROM
5 一个栈的入栈序列式ABCDE则不可能的出栈序列是:
A:DECBA
B:DCEBA
C:ECDBA
D:ABCDE
6 你认为可以完成编写一个C语言编译器的语言是
A:汇编
B:C语言
C:VB
D:以上全可以
7 关于C++/JAVA类中的static成员和对象成员的说法正确的是:
A:static成员变量在对象构造时候生成
B: static成员函数在对象成员函数中无法调用
:C 虚成员函数不可能是static成员函数
D: static成员函数不能访问static成员变量
8、假设下图中每个正方形的边长为1,则从A到Z的最短路径条数
A11 B 12 C 13 D 14
9:某进程在运行过程中需要等待从磁盘上读入数据,此时进程的状态将:
A: 从就绪变为运行
B:从运行变为就绪
C: 从运行变为阻塞
D:从阻塞变为就绪
10:下面算法的时间复杂度为:
Int f(unsigned int n)
{
If(n==0||n==1)
Return 1;
Else
Return n*f(n-1);
}
A: O(1)
B:O(n)
C:O(N*N)
D:O(n!)
函数结果为n!但求的是时间复杂度
11: n从1开始,每个操作可以选择对n加1或者对n加倍。若想获得整数2013,最少需要多少个操作
A:18
B:24
C:21
D;不可能
倒推则每次操作可以选择-1或/2故,2013-1=2012---2012/2=1006---1006/2=503--503-1=502--502/2=251--251-1=250--125--124--62--31--30--15--14--7--6--3--2--1.
12:对于一个具有n个顶点的无向图,若采用邻接表数据结构表示,则存放表头节点的数组大小为:
A: n
B: n+1
C: n-1
D:n+边数
13 考虑一个特殊的hash函数h,能将任一字符串hash成一个整数k,其概率p(k)=2^(-k),k=1,2,...。对于一个未知大小的字符串集合S中的每一个元素取hash值所组成的集合h(S)。若h(S)中最大元素max(S)=10,那么S的大小的期望
A1024 B 512 C5 D 10
每个字符串取hash可以看成同分布的独立函数,每个时间出现的10的概率为1/1024,故期望为1/p。
14:如下函数,在32bits系统foo(2^31-3)的值是:
Int foo(int x)
{
Return x&-x;
}
A: 0
B: 1
C:2
D:4
-的优先级高于2^31-3=2^28 ^为异或运算符。
15:对于顺序存储的线性数组,访问节点和增加节点删除节点的时间复杂度为:
A: O(n),O(n)
B:O(n),O(1)
C:O(1),O(n)
D:O(n),O(n)
16:在32为系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是:
Struct A
{
Int a;short b;int c;char d;
};
Struct B
{int a;short b;char d;int c;};
A: 16,16
B:13,12
C:16,12
D:11,16
sizeof(A)=4+2+2(为了对齐空出来)+4+1+3(为了对齐空出来的)=16;sizeof(B)=4+2+2(足以存储char,故追加后面)+4=12
17:袋中有红球,黄球,白球各一个,每次任意取一个放回,如此连续3次,则下列事件中概率是8/9的是:
A: 颜色全相同
B:颜色不全相同
C:颜色全不同
D:颜色无红色
全为红色的概率为1/27.故颜色全相同的概率为1/9
颜色全不同的概率为3*(1/3*2*1/3*1/3)=2/3
颜色无红色的概率为8/27
颜色不全相同的概率:是全相同的互斥时间故1-1/9=8/9
18:一个洗牌程序的功能是将n张牌的顺序打乱,以下关于洗牌程序的功能定义说法最恰当的是:
A: 每张牌出现在n个位置上的概率相等
B: 每张牌出现在n个位置上的概率独立
C: 任何连续位置上的两张牌的内容独立
D: n张牌的任何两个不同排列出现的概率相等
19:用两种颜色去染排成一个圈的6个棋子,如果通过旋转得到则只算一种,一共有多少种染色:
A: 10
B:11
C:14:
D:15
设黑白两种颜色N(n)表示有n个黑色的种类
N(0)=N(6)=1;
N(1)=N(5)=1;
N(2)=N(4)=3;黑黑白白白白,黑白黑白白白,黑白白黑白白
N(3)=4 黑黑黑白白白,黑黑白黑白白,黑白黑白黑白,黑黑白白黑白白
故14
20:递归式的先序遍历一个n节点,深度为d的二叉树,则需要栈空间的大小为:
A: O(n)
B:O(d)
C:O(logn)
D:(nlogn)
因为二叉树不是完全二叉树,故d!=lgn,
第二部分:多选
21:两个线程运行在双核机器上,每个线程主线程如下,线程1:x=1;r1=y;
线程2:y=1;r2=x;
X和y是全局变量,初始为0。以下哪一个是r1和r2的可能值:
A: r1=1,r2=1
B: r1=1,r2=0
C:r1=0,r2=0
D:r1=0,r2=1
22.关于Linux系统的负载,以下表述正确的是:
A: 通过就绪和运行的进程数来反映
B: 通过TOP命令查看
C: 通过uptime查看
D: Load:2.5,1.3,1.1
表示系统的负载压力在逐渐变小
23:关于排序算法的以下说法,错误的是:
A: 快速排序的平均时间复杂度O(nlogn),最坏O(N^2)
B:堆排序平均时间复杂度O(nlogn),最坏O(nlogn)
C:冒泡排序平均时间复杂度O(n^2),最坏O(n^2)
D:归并排序的平均时间复杂度O(nlogn),最坏O(n^2)
24:假设函数rand_k会随机返回一个【1,k】之间的随机数(k>=2),并且每个证书出现的概率相等。目前有rand_7,通过调用rand_7()和四则运算符,并适当增加逻辑判断和循环控制逻辑,下列函数可以实现的有:
A:rand_3B:rand_21 C:rand_23D:rand_49
网上搜的答案。。。。
1. 首先它是由两个随机变量组成,亦即7X+Y,只不过X与Y是独立同分布的而已,所以上式子表示为Z=7X+Y
那么对于随机变量X,你可以理解为它是一个“量级”的概念,X取值为1~7
当X=1时,随机变量Z取值范围是1*7+(1~7),也就是8~14
当X=2时,随机变量Z取值范围是2*7+(1~7),也就是15~21
当X=3时,随机变量Z取值范围是3*7+(1~7),也就是22~28
以此类推。。。
可以产生8~56的随机数。
那么产生的8~56的随机数,概率都相等吗?
答案是必然的,因为X是量级的概念,达到每个量级的概率是1/7,在量级内,Y达到1~7每个数的概率依然是1/7,所以8~56的每个数的概率都是1/49
好了我们可以得到1/49等概率的8~56,直接在生产的时候-7,得到等概率1/49的1~49.。。。。
好,现在只需要记住,得到rand_49,1~49的每个数都是等概率的就可以了,因为我们要截断,也就是说,为了得到rand_23直接截断,判断输出如果>23,直接忽略,否则输出,大家可能有点别扭,因为有的随机数生成的时候可能时间上要比其他的长点。但是要记住,1~23每个数输出的概率都是相等的,只不过不能保证每次输出时间都分秒不差而已。时间长短是跟概率无关的概念
第三部份
1、两个较长的单向链表a和b,为了找出及诶单noed满足node in a
并且node in b
,请设计空间使用尽量小的算法(用c/c++,java
或者伪代码)
2、当存储数据量超出单节点数据管理能力的时候,可以采用的办法有数据库sharding
的解决方案,也就是按照一定的规律把数据分散存储在多个数据管理节点N中(节点编号为0,1,2,,,,N-1)。
假设存储的数据时a 请完成为数据a计算存储节点的程序。
#define N 5
int hash(int element){
return element*2654435761;
}
int shardingIndex(int a){
int p = hash(a);
_________________________; //这里是空格
return p;
}
3、宿舍内5个同学一起玩对战游戏。每场比赛有一些人作为红方,另一些人作为蓝方。请问至少需要多少场比赛,才能使任意两个人之间有一场红方对蓝方和蓝方对红方的比赛?
4、一个有10亿条记录的文本文件,已按照关键字排好序存储。请设计算法,可以快速的从文件中查找指字关键字的记录