第三部分 填空与问答
25、某二叉树的前序遍历序列为+a*b-cd/ef,后序遍历序列为abcd-*+ef/-,问其中序遍历序列是:
26、某缓存系统采用LRU淘汰算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候,1、5、1、3、5、2、4、1、2,出现缓存直接命中的次数是(),最后缓存中即将准备淘汰的数据项是()
27、有两个较长的单向链表a和b,为了找出节点node满足node in a 并且 node in b,请设计空间使用尽量小的算法。(用C/C++/JAVA或伪码表示都可以)
28、当存储数据量超出单节点数据管理能力的时候,可以采取的办法有数据库sharding的解决方案,也就是按照一定的规律把数据分散存储在多个数据管理节点N中(节点编号0.1.2...N-1)。假设存储的数据是a,请完成为数据a计算存储节点的程序。(没学过C语言的同学也可以用伪码完成)
#define N 5
int hash(int element)
{
return element*2654435761;
}
int shardingIndex(int a)
{
int p = hash(a);
//1
return p;
}
空格1处: p %= N;
29、宿舍内5个同学一起玩对战游戏,每场比赛有一些人作为红方,另一些人作为蓝方,请问至少需要多少场比赛,才能使任意两个人之间有一场红方对蓝方和一场蓝方对红方的比赛?
答案为4场。
第四部分 JAVA选做题
1、以下每个线程输出的结果是什么?(不用关注输出的顺序,只需写出输出的结果集即可)
2、一个有10亿条记录的文本文件,已按照关键字排好序存储,请设计算法,可以快速的从文件中查找关键字的记录。