数据结构及算法招聘笔试及面试

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构及算法招聘笔试及面试

一、综述:

招聘考试中笔试偏基础知识考察,面试偏项目经验和算法的灵活应用的考察。考察的内容可以分为知识型题目和智力测试类的题目,平时可以充分准备知识型的题目,而智力测试类的题目在知名大公司的考察较多,可以多看一些典型的题目,争取能在应试中将其转换为记忆力的测试。

在软件类的应聘考试中要坚持“两个中心,三个基本点”。“两个中心”是以数据结构与算法为中心。对于计算机专业的人才来说,数据结构,算法应该是基石,也就是重中之重。这一点在牛企中更为突出,像百度,微软,google这样的企业,对这“两个中心”的要求更是高。“三个基本点”分别为程序设计语言,操作系统,数据库及网络。程序设计语言无论是java或者c++,你都要精通,也就是说要非常熟练。高水平的公司,对应聘者的综合素质跟专业知识要求都很高,专业知识方面数据结构算法尤为重要,所以大家如果有志于目前牛气的公司的话,一定要真的做到“精通” 数据结构与算法,其中排序算法最最重要。这里说的精通不但要能快速书写基本的典型的算法,而且要真正理解,灵活运用,做到举一反三,考察往往不是原原本本的考察知识点,而是进行略微的变化再考察,如果理解的不深刻,往往调到陷阱中。所以,大家要养成“反思”的习惯,即经常思考所学的知识。同时要多读书,多读经典的书籍,例如:《编程之美》,《C陷阱与缺陷》,《C和指针》,《计算机程序设计艺术(共四卷)》《数据结构C语言版》。

二:考察点

结合数据结构的知识点,主要考察的内容如下:

1、数据结构本质的理解:数据结构是解决复杂程序的建模问题的,如何将现实世界中的复杂多样的关系(1:1,1:n,n:m)在计算机的简单的一维内存结构中进行处理,如何利用现有的计算机资源高效的解决问题。逻辑结构、存储结构的关系。

2、算法的渐近时间复杂度和渐近空间复杂度的估计。

3、线性表的单链表和双向链表的操作

4、栈和队列应用,主要是递归算法如何转换为非递归算法。

5、串的模式匹配算法,数组的地址下标计算,和特殊矩阵的压缩存储,特别是稀疏矩阵的三元组存储结构和一次定位的快速转秩算法。

6、二叉树的5条性质,二叉树的四种遍历算法的递归和非递归实现,及其时间和空间复杂度。哈夫曼树的概念、存储结

构和编码和译码,应用。

7、图的邻接矩阵和邻接表的存储结构,图的深度优先和广度优先遍历算法的递归和非递归实现。最小生成树算法,拓扑排序和关键路径算法,最短路径的算法。

8、理解查找及其平均查找长度的计算,顺序、折半和分块查找算法,二叉排序树和平衡二叉树查找算法,哈希表的含义,掌握哈希函数的构造和处理冲突的基本方法和成功平均查找长度,失败平均查找长度的计算。

另外:海量数据的查找是个重点。

9、内排序:插入类排序的算法,直接插入排序、希尔排序;交

换类排序的算法,冒泡排序、快速排序;选择类排序的算

法,简单选择排序、树形选择类排序、堆排序;归并排序;

基数排序的算法要通彻理解和掌握,各个算法的优缺点和复

杂度务必掌握。

10、外排序:多路平衡归,并置换-选择排序,胜者树,败者树,k 阶哈夫曼树要透彻理解并掌握。

11 其他常考察的特殊方法:

(1)计数排序是一种算法时间复杂度O(n),空间复杂度O(1)的排序方法,适合于小范围集合的排序。比如100万学生参加高考,我们想对这100万学生的数学成绩(假设分数为0到100)做个排序。

(2)海量数据处理常用的数据结构:

1.Bloom Filter

大致思想是这样,把一个数据通过N个哈希函数映射到一个长度为M的数组的一位上,将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明该数据的存在。但不能保证完全正确性,但是此方法无比高效。

【实例】给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。

2.哈希法

这个简单,无非是通过一些哈希函数把元素搞到一个指定的位置,简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。这个很一般啊感觉。无非就是分类查找么,完全不如1猛。

3.最大或最小堆

就是一个完全的最大或最小二叉树,用途,比如:1)100w个数中找最大的前100个数。用一个100个元素大小的最小堆即可。感觉还是不错的。

4.Bit-map

所谓的Bit-map就是用一个bit位来标记某个元素对应的Value,而Key 即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。

(3)联合体内存对齐

(4)贪心策略和分治策略在算法中的应用,例如求子数组的最大和。

(5)组合和全排列的生成算法

(6)大整数的加法,乘法运算,采用小学学的运算规则进行即可。

(7)逻辑判断问题的编程,例如警察通过审判疑犯抓小偷等

(8)荷兰国旗问题

(9)组合数学中的鸽巢原理,容斥原理,握手定理等在解决问题中的应用

(10)离散数学中的图论知识在编程中的使用等

具体内容在PPT中,谢谢!

相关文档
最新文档