算法问题解决实践
一本100%开源的一站式编程面试准备书!
数据结构与算法 · Python · LeetCode · 原理 · 问题模式
贡献
本书使用LaTeX编写,除代码外的所有内容都位于Easy-Book文件夹中。欢迎向我发送拉取请求以贡献内容。在开始改进内容之前,了解本书的高层结构会很有帮助。更多详情请阅读如何贡献?。
所有贡献者(有相当数量贡献)将被列为项目作者。
关于本书
简而言之,这是一本以破解编程面试为核心的中高级算法书。它提供了一站式的编程面试准备体验。本书结构如下:
- 准备:介绍算法问题解决和编程面试的全局图景,学习抽象数据结构和高度相关且有用的数学知识如递归关系,并通过将抽象数据结构与Python数据结构联系起来进行Python实践。编程不仅仅是代码。
- 原理:我们在这里组织设计和原理,以便读者可以将其作为指导,而不是寻找解决问题的特殊算法。
- 经典算法:我们通过学习如何将核心原理应用于各种经典问题来增强我们的算法数据库。一个我们在看到问题时可以快速联系的数据库。
- 编程面试问题模式:我们以分析和分类问题模式来结束本书。我们针对每种问题模式讨论经典和最佳解决方案。
除了努力使内容易于理解外,以下总结了本书的独特之处:(1)它提供了专门为面试设计的简单Python源代码 (2)所有练习和示例都来自LeetCode问题,因此你可以在线练习 (3)经典算法都用设计原理进行解释。没有算法是魔法。(查看高级图算法作为例子) (4)问题模式帮助你逐主题解决编程面试问题。
我是如何想到写这本书的?
准备编程面试并不容易!破解编程面试?对我们大多数人来说几乎是不可能的!运气确实在结果中起作用。所以,让我们把它当作一个学习过程,并从中获得乐趣吧!
计算机科学实际上不仅仅是计算机科学。它是所有领域的结合;我们常见的面试问题属于枚举组合学范畴,而我们的计算机视觉主要由线性代数组成。真正重要的是我们学习的热情和将这些知识应用于解决实际问题的能力。
市面上有很多书籍要么专注于教授算法知识(《算法导论》、《算法问题解决》等),要么介绍面试过程和解决面试问题(《破解编程面试》、《编程面试题》等),但没有一本书真正将两者结合起来。这本书的设计就是为了填补这个分类中的空白。原理、模式和LeetCode问题构成了本书的核心。
这不是一本提供每家公司招聘统计数据或给读者快速技巧以通过几次编程面试的书。它的目的是向你展示算法问题解决的美,希望你能对软件工程更有热情和信心;面试问题只是提供了一个让我们强化所学知识的平台。
致读者
整本书已编译为PDF格式。
读者可以整本阅读,也可以按以下链接选择性地阅读章节。
目录
热身:抽象数据结构和工具
- 抽象数据结构
- 离散编程
- 递归关系
入门:编程和Python数据结构
- 迭代和递归
- 位运算
- Python数据结构(源代码)
核心原则:算法设计与分析
- 排序与选择(源代码:排序算法,Python比较和排序函数)
- 动态规划
- 贪心算法
高级算法
- 高级数据结构
- 线性数据结构上的高级搜索(源代码)
- 高级图算法
- 字符串模式匹配
- 数学与几何算法
问题模式
- 动态规划问题(15%)
- 数组问题(15%)
- 链表、栈、队列和堆问题(12%)
- 字符串问题(15%)
- 树问题(10%)
- 图问题(15%)
注:所有内容仍在进行中,请谨慎使用。
参考书籍和资料
-
Skiena, Steven S. 《算法设计手册》第1卷. Springer Science & Business Media, 1998.
-
T. H. Cormen, 《算法导论》, MIT press, 2009.
-
Manber, Udi. 《算法入门:创造性方法》. Addison-Wesley Longman Publishing Co., Inc., 1989.
-
Kleinberg, Jon, 和 Eva Tardos. 《算法设计》. Pearson Education India, 2006.
-
Russell, Stuart J., 和 Peter Norvig. 《人工智能:现代方法》. Malaysia; Pearson Education Limited,, 2016. (解释搜索问题求解、区分树搜索和图搜索的最佳书籍)
-
D. M. Beazley, 《Python参考手册》, Addison-Wesley Professional, 2009.
-
S. Halim 和 F. Halim, 《竞争性编程3》, Lulu Independent Publish, 2013.
-
B. Slatkin, 《Effective Python:编写高质量Python代码的59个有效方法》, Pearson Education, 2015.
-
H. hua jiang, "Leetcode博客," https://zxi.mytechroad.com/blog/category, 2018, [在线访问日期:2018年7月19日].
-
B. Baka, "Python数据结构和算法:通过图、栈和队列提高应用性能," 2017.
-
"竞争性编程,"https://cp-algorithms.com/, 2019, [在线访问日期:2018年7月19日].
-
"普林斯顿计算机科学,"https://aofa.cs.princeton.edu/60trees/, 2019, [在线访问日期:2018年7月19日]
工具
- 使用graphviz进行图形可视化。示例。Python使用教程
模拟面试
实践很重要。在interviewing.io上安排一些模拟面试。如果你无法注册,可以加入我们的Discord服务器,寻找同伴进行练习面试。
社区
加入我的Discord服务器:https://discord.gg/ZXnSag7fMP,获得支持性社区
反馈
如果你有改进本书的想法,无论是关于格式、更多内容,还是纠正错误,请随时告诉我。
如需引用本内容,请使用:
```bibtex @misc{handsondsa, author = {Li Yin}, title = {实用算法问题解决}, howpublished = {\url{https://github.com/liyin2015/python-coding-interview/}}, year = {2021} } ```