我爱编程

算法面试问题总结(重点准备)

2018-04-10  本文已影响0人  涛来涛去

1.Coding方面

剑指offer和leetcode(重点)

常见算法题总结

  1. 最长不重复子序列
  2. DP(01背包问题) edit sitance 问题
  3. 全排序(如果有重复数字呢)
  4. 最短路径算法
  5. 图论问题,最小割问题
  6. 二分法的扩展版本
  7. 快排,冒泡排序等相关排序算法
  8. 一个数组中有一个数字出现两次,找出来
  9. 判断一棵树是不是对称的
  10. 一维红黑树与平衡树的区别
  11. 二维四叉树、网格 优缺点
  12. 单链表相关插入、删除
  13. 无序大数组中找中位数 (快排)
  14. 链表逆序
  15. 随机数1-5,怎么生成随机数1-7
  16. 怎么判断链表是否有环
  17. 有序数组的交集,并集(搜索领域经常用)
  18. 数组中第一个大于等于K的数
  19. 判断麻将胡没胡(正则的状态机实现方式)
  20. 完全二叉树的下一个节点
  21. 有N个人,其中有一个明星,所有人都认识明星,明星不认识所有人,只有一种查询方式:A是否认识B,给出找到明星的最优策略
  22. 一个图,起点是A,终点是B,可以选择图中一条边置为0,如何使A到B的最短路径最短(顺便谢谢Dijkstra)
  23. 给出二叉树的先序和中序遍历,构建二叉树。
  24. 链表排序
  25. 矩阵相乘的最优顺序
  26. 二分图最大匹配,最小费用最大流
  27. 把一堆数分成两堆,使和最相近(背包搞一搞)
  28. 数据流找中位数(大小堆搞一搞)
  29. 二叉树中权重最大的链,每个点的权重有正有负。
  30. 加上最少的括号,使括号匹配。
  31. 给定一个数组,求最大的连续子序列和
  32. 有两个很大的文件,均无法放入内存,其中存放着很多整数,如何找到两个文件中的相同整数
  33. 有一个坐标轴,上面有很多点,每个点有坐标,求长度为L的绳子最多能够覆盖几个点
  34. 用栈实现队列
  35. 转制&字符串中最长的数字字符串
  36. 画建最小堆的过程
  37. 先序遍历二叉树,非递归
  38. 手写数组旋转,要求不使用额外空间
  39. 手写算法,在旋转数组里寻找某个给定的元素,要求时间复杂度O(n)以下
  40. 一个堆,怎么按顺序改为一个双向链表
  41. 一个无序数组,用时间复杂度最低的来寻找某两个数加起来等于一个固定的值m
  42. 两个有序数组求中位数(leetcode)
  43. 判断平衡二叉树(剑指offer)
  44. 最长上升子序列(lintcode)
  45. 二叉树转双向链表(剑指offer)
  46. LRU cache实现(leetcode)
  47. House Robber(leetcode)
  48. 判断平衡二叉树
  49. 最长公共子序列

2. 项目论文

自己的几篇论文和相关的论文已经领域内很火的文章要非常熟悉

3. 面试问题总结

在选择分裂属性的时候,训练样本存在缺失值,如何处理?假如你使用ID3算法,那么选择分类属性时,就要计算所有属性的熵增(信息增益,Gain)。假设10个样本,属性是a,b,c。在计算a属性熵时发现,第10个样本的a属性缺失,那么就把第10个样本去掉,前9个样本组成新的样本集,在新样本集上按正常方法计算a属性的熵增。然后结果乘0.9(新样本占raw样本的比例),就是a属性最终的熵。
分类属性选择完成,对训练样本分类,发现属性缺失怎么办?比如该节点是根据a属性划分,但是待分类样本a属性缺失,怎么办呢?假设a属性离散,有1,2两种取值,那么就把该样本分配到两个子节点中去,但是权重由1变为相应离散值个数占样本的比例。然后计算错误率的时候,注意,不是每个样本都是权重为1,存在分数。
训练完成,给测试集样本分类,有缺失值怎么办?这时候,就不能按比例分配了,因为你必须给该样本一个确定的label,而不是薛定谔的label。这时候根据投票来确定,或者填充缺失值。
XGBoost里处理缺失值的方法

在xgboost里,在每个结点上都会将对应变量是缺失值的数据往左右分支各导流一次,然后计算两种导流方案对Objective的影响,最后认为对Objective降低更明显的方向(左或者右)就是缺失数据应该流向的方向,在预测时在这个结点上将同样变量有缺失值的数据都导向训练出来的方向。

例如,某个结点上的判断条件是 A>0 ,有些数据是A0,有些数据的A是缺失值。那么算法首先忽略带缺失值的数据,像正常情况下一样:

将前两种数据分别计算并导流到左子树与右子树,

然后将带缺失值的数据导向左子树,计算出这时候模型的Objective_L;

接着将带缺失值的数据导向右子树,计算出这时候模型的Objective_R;

最后比较Objective_L和Objective_R。

假设Objective_L更小,那么在预测时所有变量A是缺失值的数据在这个结点上都会被导向左边,当作A<=0处理。

随机森林处理缺失值的方法

RandomForest包里有两种补全缺失值的方法:

方法一(na.roughfix)简单粗暴,对于训练集,同一个class下的数据,如果是分类变量缺失,用众数补上,如果是连续型变量缺失,用中位数补。

方法二(rfImpute)这个方法计算量大,至于比方法一好坏?不好判断。先用na.roughfix补上缺失值,然后构建森林并计算proximity matrix,再回头看缺失值,如果是分类变量,则用没有缺失的观测实例的proximity中的权重进行投票。如果是连续型变量,则用proximity矩阵进行加权平均的方法补缺失值。然后迭代4-6次,这个补缺失值的思想和KNN有些类似。

补充【proximity matrix】:Proximity 用来衡量两个样本之间的相似性。原理就是如果两个样本落在树的同一个叶子节点的次数越多,则这两个样本的相似度越高。当一棵树生成后,让数据集通过这棵树,落在同一个叶子节点的”样本对(xi,敏感词roximity 值 P(i,j)加 1。所有的树生成之后,利用树的数量来归一化proximity matrix。

样本类别不平衡会带来怎样的影响

讲一下auc 以及你们比赛中最后模型的auc得分

随机森林里使用的决策树是哪一种? sklearn里实现的是CART的一种变体

4.基础方面

数据结构/算法

Hash及冲突解决
二叉搜索树
手写快排,单链表反转,字符串部分逆序(如moc.anis.www转为www.sina.com
手写二叉树层序遍历、二分查找、递归算法实现
超大文件寻找top K算法设计(单机1M内存、Hadoop集群、外部排序+uniq命令)
订单超大并发访问-队列批量处理
观察者模式、工厂模式、适配器模式
hashmap 底层实现,为什么查询快?
常见排序算法时间复杂度为O(nlogn)的有哪些,最佳、最差时间复杂度分别是多少?
进程线程区别
多线程实现方式,线程冲突是什么、怎么解决
海量数据排序(分治)
常见排序算法的复杂度和一些细节以及改进优化。

计算机网络

TCP三次握手,四次挥手等细节。
5层,7层网络相关问题。
tcp和udp的区别
http和https(对称加密、非对称加密)
ftp和sftp
从访问一个网址到页面出现,描述中间发生的所有事情

操作系统/linux

linux进程通信的办法
linux处理文本日志相关常见命令
shell脚本、查找文件命令
top命令、netstat命令、ifconfig和ipconfig
乐观锁和悲观锁

数据库

SQL查询相关业务
第一、第二、第三范式之间的理解和比较
数据库的事务、ACID及隔离级别
索引优化(组合索引、最左匹配原则)、优缺点
手动写创建索引的语句
并发访问场景和所有可能出现的结果、锁作用和实现
主主复制、主从复制
B-tree的应用
int和varchar
io优化
分表分库设计

Python基础(重点)

常见数据结构用法,类继承,内存管理
python的异常机制
仅使用pandas库进行分析是否有什么性能上的问题
用Python 写一个对文本文件的词频统计

翻转链表

C++(重点)

面向对象特性
为什么析构函数要是虚函数
构造函数和析构函数中调用虚函数时,调用的是基类还是派生类

5. 成为算法工程师,应该学习哪些东西

传统机器学习算法:

感知机,SVM, LR,softmax,Kmeans,FM/FFM ,DBSCAN, 决策树(CART,ID3,C4.5)GBDT, RF, Adaboost, xgboost, EM, BP神经网络,朴素贝叶斯,LDA,PCA,核函数,最大熵等

深度学习:

CNN,RNN,LSTM,常用激活函数,Adam等优化算法,梯度消失(爆炸)

NLP:

TF-IDF, textrank, word2vec(能推导),LCA, simhash

常见概念:

最大似然估计,最小二乘法,模型融合方法,L1L2正则(Lasso, elestic net),判别式模型与生成式模型,熵-交叉熵-KL散度,数据归一化,最优化方法(梯度下降,牛顿法,共轭梯度法),无偏估计,F1(ROC,recall,precision等),交叉验证, bias-variance-tradeoff, 皮尔逊系数

常见问题

常见损失函数
SGD与BGD
如何处理样本非均衡问题
过拟合原因,以及解决办法
如何处理数据缺失问题
如何选择特征
L1为什么能让参数稀疏,L2为什么会让参数趋于较小值,L1优化方法
各模型的优缺点,以及使用场景

什么叫对一个算法熟悉

以SVM为例,SVM推导,KKT条件,什么是支持向量,什么是松弛向量,为什么推导成对偶形式,核函数的作用是什么,如何选择核函数,模型优缺点

6. 设计题

给定(用户id,时间,经度,维度)四元组,设计方案识别用户家和公司的位置。这题个人觉得是很好的面试设计题,我的方法是密度聚类定地点位置,时间段活跃特征+是否工作日训练分类识别别家/公司的方法

8个球,一个比其他的轻,用天平称出该球最少用几次,怎么称

上一篇下一篇

猜你喜欢

热点阅读