《编程之法:面试和算法心得》涉及面试、算法、机器学习三个主题。书中的每道编程题目都给出了多种思路、多种解法,不断优化、逐层递进。本书第1章至第6章分别阐述字符串、数组、树、查找、动态规划、海量数据处理等相关的编程面试题和算法,第7章介绍机器学习的两个算法—K近邻和SVM。

编辑推荐

蜕变于CSDN技术博客“结构之法算法之道”

内容涉及面试、算法、机器学习三大主题

作者数年的积累成果

进入IT行业求职笔试和面试宝典


本书内容

本书涉及面试、算法和机器学习三个主题,但主要是面试和算法方面的内容,与机器学习相关的内容相对较少。

书中的很多编程题目都给出多种思路和多种解法,在解决一道道编程问题的过程中,通过更好的算法不断优化解法、逐层深入,注重提高广大初学者的编程能力、思考能力,以及运用编程技巧和高效的算法解决实际应用问题的能力。

第1章阐述与字符串相关的面试题,第2章阐述与数组相关的面试题,第3章阐述与树相关的面试题和数据结构(红黑树、B树等),第4章阐述与查找相关的面试题(重点介绍KMP),第5章阐述与动态规划相关的面试题,第6章阐述与海量数据处理相关的面试题,第7章介绍机器学习的两个算法-K近邻、SVM.此外,每一章都有“举一反三”和“习题”,以便读者及时运用所学的方法解决相似的问题,并且在附录中收录了语言、链表、矩阵、栈、队列、图搜索、概率统计、系统设计等其他题型。

书中的每一道题都是面试的高频题目,反复出现在最近5年各大互联网公司的笔试和面试中,对面试、备考有着极强的参考价值。

全书逻辑清晰、通俗易懂,非常适合热爱编程、算法、机器学习,以及准备IT笔试和面试,即将求职、找工作的读者阅读。

收起

数组

在笔试和面试中,除了与字符串相关的问题,另一类出现频率极高的问题便是与数组相关的问题。在读完第1章和本章后,读者会慢慢了解到解决面试编程题的几种常用思路。

遇到一个编程问题,一般可以先考虑“万能的”蛮力穷举(递归、回溯),如求n个数的全排列或八皇后(N皇后)问题。但是穷举的时间复杂度通常过高,所以需要考虑更好的方法来降低时间复杂度,例如,利用分治法(分而治之,然后归并)

以及以空间换时间(如活用散列表)。

此外,选择合适的数据结构也可以显著提升效率。例如,在“寻找最小的k个数”的问题中,用堆代替数组存储最先遍历到的k个数。

再者,如果题目允许排序,则可以考虑排序。例如,在“寻找和为定值的两个数”的问题中,先排序,然后用前后两个指针往中间扫描。而如果已经排好序了(如在杨氏矩阵查找中),则想想有无必要二分。但是,如果题目不允许排序呢(即要求不能改变数列之间各个数之间的相对顺序)?这时可以考虑贪心算法(如最小生成树算法Prim、Kruskal及最短路算法Dijikstra)或动态规划(如01背包问题,每一步都在决策)。

最后,解决的问题多了就会发现,不少问题的原理都非常类似,如快速排序的划分(partition)过程、奇偶排序和荷兰国旗这三个问题,都是巧妙地借助指针在O(n)的时间复杂度内解决问题的。


游客,本帖隐藏的内容需要积分高于 55 才可浏览,您当前积分为 0


回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 会员注册

    本版积分规则

    快速回复 返回顶部 返回列表