Date: 2019-08-04
一、 iHandy2019校招-机器学习/算法工程师笔试题
1. 计算斐波那契数列第n项的函数定义如下:
int fib(int n){
if(n==0)
return 1;
else if(n==1)
return 2;
else
return fib(n-1)+fib(n-2);
}
若执行函数调用表达式fib(9),函数fib被调用的次数是: 109
解释: (往前调用时,调用值n为0或者1的时候就不需要再往前进行调用了。)
对于小数据量的n来说
f(1) 调用1次
f(2) 调用3次
f(3) 调用5次
f(4) 调用9次
发现一个规律:从n=3开开始,调用次数为前两次和加1
即:f(3) =f(2) +f(1) +1=5
f(4) =f(3) +f(4) +1=9
f(5) =f(4) +f(3) +1=15
f(6) =f(5) +f(4) +1=25
f(7) =f(6) +f(5) +1=41
f(8) =f(7) +f(6) +1=67
f(9) =f(8) +f(7) +1=109
2. 程序段的执行结果是: 14,14
#include <iostream>
using namespace std;
void fun1(int &x) {
x++;
}
void fun2(int x) {
x++;
}
int main() {
int abc = 13;
fun1(abc);
printf("%d\n", abc);
fun2(abc);
printf("%d\n", abc);
}
解释: fun1引用传递,fun2值传递 ;具体而言就是:fun1传入的是X的地址,进行++操作会直接改变x的值,进行fun1操作后x变为14,fun2中的x是形参,不会改变实参x的值。但是本题后面print的结果是abc的值,经过x++之后值会发生改变。但注意与++x的区别:x++是先x然后在进行++的操作;但是++x时先进行累加++的操作,然后再是x的运算。
3. 三次握手方法用于 传输层连接的建立。 (TCP传输层连接)
4.
假设磁头当前位于第99道,正在向磁道序号增加的方向移动。现有一个磁道访问请求序列为33,59,13,77,123,170,160,185,采用SCAN调度(电梯调度)算法得到的磁道访问序列是( 123,160,170,185,77,59,33,13 )。
解释SCAN调度算法(电梯调度的思想):从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱面的访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。但在本题中,磁头正在向磁道序号增加的方向移动。
首先,磁头选择与当前磁头所在磁道距离最近的请求作为首次服务的对象(123),当磁头沿途相应访问请求序列直到达到一端末(123,160,170,185),再反向移动响应另一端的访问请求(77,59,33,13)。
5. 已知二叉树的前序序列是ABCDEFGH,中序序列是CBEDFAGH,其后序序列是? 可以根据前序和中序将二叉树画出来,是如下的二叉树:
A
/ \
B G
/ \ \
C D H
/ \
E F
分析方法:先确定根节点,分为左右树,同理再迭代
则后序遍历结果是: CEFDBHGA
6. 下面哪个选项中哪一项属于确定性算法 (A)PCA?
A. PCA
B.K-Means
解释:
首先参考维基百科给出的确定性算法的定义:In computer science, a deterministic algorithm is an algorithm which, given a particular input, will always produce the same output, with the underlying machine always passing through the same sequence of states。简单来说,确定性算法就是对于一样的输入,我们总是可以得到一样的输出。
K-means: 不确定算法。按照定义,从结果上看,就是同样的数据集多次运行K-means算法会得到不同的结果(聚类),所以其不是确定算法。从其算法原理看,其不确定性在于我们必须随机选择初始的聚类中心,之后再进行迭代,所以会产生不同的结果。
PCA:确定算法。原因在与,PCA的本质在于求解一个方差最大化问题,给定数据集,最优问题的解是确定且唯一的。
7. 关于ensemble learning,下面说法正确的是 A
A.单个模型之间有低相关性(周志华的西瓜树上面有解释,单个模型的独立性越强,预测精度越高,有证明)
B.在集成学习中使用“平均权重”会好于使用“投票” (根据具体情况而定)
C.单个模型都是使用同一算法(No)
8. 决策树的父节点和子节点的熵的大小关系是什么 父节点的熵更大。
补充: 决策树分解策略是保证子结点的熵小于父结点的熵。但“子结点的熵”是该父结点所有孩子结点的熵的总和,因此,并保证任意一个子节点的熵都小于父结点熵。
9. (****)
测得某个采用按需调页策略的计算机系统部分状态数据为:CPU利用率5%,用于交换空间的磁盘利用率95%,其他I/O设备利用率5%。试问,这种情况下(AC)能提高CPU的利用率。
A.增大内存的容量
B.增大磁盘交换区的容量
C.减少多道程序的度数
D.使用更快速的磁盘交换区
解释1:由题目可以得出,大部分的运行时间都耗费在交换操作上,也就是说物理内存太小导致数据经常需要换入换出,因此需要提高内存大小,此外CPU和IO的的占用率都很低表示CPU一次读取的太多的程序放入内存中,因此需要降低多道程序的度数(个数)。
解释2:
CPU利用率5%,用于交换空间的磁盘利用率95%,其他I/O设备利用率5%。
CPU利用率:运行的程序占用的CPU资源,表示机器在某个时间点的运行程序的情况。使用率越高,说明机器在这个时间上运行了很多程序,反之较少。
CPU是负责运算和处理的,内存是交换数据的。
1.可以看出CPU利用率低;3.I/O设备利用率低(减少多道程序的度数)
CPU一次读取的太多的程序放入内存中,因此需要降低多道程序的度数
2.交换空间的磁盘利用率高(增大内存的容量)
交换空间利用率高,因此需要扩大数据交换空间(增大内存的容量)
10. 对以下各搜索树进行删除操作,哪些树在最坏情况