引言

引子

算法

大学的时候读过一本书,它是 Concrete Mathematics。相比于教材的罗列概念和定理证明,Concrete Mathematics 认为算法是有趣的,并且生活中的数学工作会给他们带来精彩的生活。作者 Knuth 说,在数学专业学到的数学与为了能够更好了解计算机程序所需要的数学是截然不同的。学习算法,可以让你深切了解到,计算机解决问题的思维。

数据结构

数据结构到底有多优雅?看一看并查集树状数组你就知道什么才是真正的优雅。第一次看到 lowbit 居然能用一句简单的位运算来描述。每接触一个高效的数据结构,都会让我去挖掘其实现的方式,最后的赞叹永远是优美、神奇、精悍!

title

为什么我要写这个算法小册

其实有这么几点原因吧。笔者在读书期间做过很长一段时间的 ACM-ICPC 竞赛,坚持写以下小册可以对上学期间学到的算法知识继续总结和梳理,在做过工程之后对原先的竞赛代码将会有进一步的理解。结合工程角度来回顾算法,也会加深程序设计的能力。

另外,算法面试日益常见,很多朋友在遇到算法题目时往往没有头绪要从哪里入手练习。笔者一向注重知识开源精神,也希望算法能力应该逐渐成为软件工程师的基础能力。工程师的目标是解决问题,编程语言是处理问题的工具,而算法和数据结构则是提高生产力的方法论

这本书的实际作用是什么?

  1. 对于互联网研发就业人员,本小册是你刷 LeetCode 算法题的必要的知识储备。其中的知识点既可以帮你有效地提高刷题速度,也可以有效地提高面试过程中算法题目通过率。
  2. 对于在校学生、大学生,本小册可以帮助你简单入门 ACM-ICPC 竞赛、OI 竞赛。但如果打算系统性入门,强烈推荐《挑战程序设计竞赛》《算法竞赛入门经典》这两本书。
  3. 非编程人员的业余开发爱好者,本小册可以帮助你学会计算机解决问题的思维

本系列的北极星指标和核心价值

  • 北极星指标:LeetCode 题目的 AC 速度。
  • 核心价值:工程师角度解决算法问题。

目标读者

本书不建议没有任何编程经验的读者阅读。如有部分数据结构课程基础更加。其目标读者包含以下几部分人群:

  1. 想要提高算法能力的软件工程师;
  2. 想要提高面试中解决算法题目能力的软件工程师

难度划分

本册每一个专题分为普通和打星(即部分章节前面标注 * 符号的)两种难度。

  • 普通章节:软件研发岗位面试过程中有一定概率考到的知识点;
  • 打星章节:难度较高,面试过程中极少概率考到的知识点;

编程语言

本书的算法均使用 C++ 和 Python 来描述算法。两门语言主要的语法具有相似性,所以当你熟悉一门语言看另外一个也可以看懂 70% 以上。

互动与勘误

如果文章有所遗漏,欢迎到 一瓜算法小册 desgard.com/algo 本站点进行评论和互动,对于斧正及有价值的交流作者往往会在一天之内回复。感谢您的支持与帮助。

授权与声明

作品同时也会在《让技术一瓜公食》微信公众号上第一时间发布。欢迎关注。


公众号二维码

本作品采用 知识署名-非商业性使用-禁止演绎 (BY-NC-ND) 4.0 国际许可协议 进行许可。