值得记录的面试题目(算法工程师)

华电北风吹
天津大学认知计算与应用重点实验室
日期:2016-10-27

1、都知道小浣熊里面有n个不同的人物,但是一包小浣熊里面只会完全随机的放一张人物卡。如果想集齐所有人物卡片大概要吃多少袋小浣熊?
答案: nlogn
解析:关键是随机事件的划分。比如说我得到第一个人物(不管是谁),肯定只要买一包小浣熊即可。在得到一个人物卡片后,我想得到另一个人物我需要 1n1n=nn1 (由几何分布期望公式可得)。这样可以看出,相对于已有的 k 张卡片,每次新增加一个任务卡片所需要购买小浣熊的个数服从参数nkn的几何分布。这样的话问题就简单了,可以容易地写出总共需要购买的小浣熊包数是
1+nn1+nn2+nn3...+n2+n1=nlogn(1)

2、一个村子里有五十户人家,每家都养了一条狗,假如其中出现了病狗。条件是每个人只能观察别人的狗,相互之间不能交流。并且每个人只能杀自己的狗,并且是在判断出自己的狗有病后当天立马杀掉自己的狗。每个人每天观察一下别人的狗,作出决定是否杀自己的狗。第一天,风平浪静。第二天风平浪静。第三天有狗被杀。问:其中有多少条病狗?
答案:第三天出现狗被杀了,所以是三条。
解析:这里有个递推的过程。比如说如果总共有一条病狗,那么第一天病狗的主人就应该会把自己的狗杀了(只要观察到别人的狗都是正常的,就知道自己的狗一定是病狗,因为村子里一定有病狗)。根据第一天没人杀狗,知道病狗数目一定大于1。来到了第二天,由于人们都能够判断出病狗数目大于等于2。这时,如果病狗数目等于2,这一天病狗的主人一定会在今天看到一条病狗,就能推测出来自己的狗一定是病狗,当天就会把自己的病狗杀掉,所以由第二天风平浪静可知,病狗数目一定大于等于3。依次递推即可知道。第几天出现了杀狗,就总共有多少条病狗。

3、写一个时间复杂度为 nlogn 的链表排序算法。
答:归并排序每次二分的时候,扫描一下链表长度,合并的时候写成有序链表合并排序即可。
解析:只要稍微修改一下快排也可以修改为适用于链表排序。

4、在一个源源不断的样本输出流中,怎样保证等概率采样得到一个大小为k的子集?
答:用一个数组先保存输出的前k个元素,记录产生的样本总数n,然后对于每产生一个元素以概率 kn 接受这个样本,如果接受就随机替换数组中的一个样本。

通用知识点:
基本上来自于数据结构知识点、机器学习经典算法,自然语言处理,搜索引擎原理等知识点。
1、搜索引擎的自动补全功能是怎么实现的?数据存储上有什么优化技巧吗?怎么对用户查询预处理?
2、网页怎么去重?
3、手写代码二分,快排,拓扑排序,二维矩阵的遍历。
4、讲讲逻辑回归,SVM,决策树,GBDT,RF,比较优缺,也会遇到手推的。
5、考察数据溢出类的简单代码。最大连续子数组和,写计算 log(1+ex) 的函数。
6、搜索引擎的推荐问题,怎么根据用户点击判断推荐的链接是否有效。
7、怎么从一段文本中找出所有的人名?
8、怎么找出一个文本中所有的同根词(所构成的字母和个数完全一样)?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值