许多程序员对算法望而生畏,认为算法是一项高深莫测且枯燥的学问。
算法真的有那么难,真的有那么无趣吗?
恰恰相反,算法是编程领域最有意思的一块内容,也并没有许多人想象的那样难以驾驭。
学习算法,我们不需要去死记硬背那些冗长复杂的背景知识、底层原理、指令语法……我们所需要的只有对算法思想的领悟、对空间和性能的理解、开动脑筋去寻求最佳的解决方案。相比编程领域的其他技术,算法更纯粹,更接近数学,也更具有趣味性。
我一直希望写出一些东西,让更多的IT同行们能够领略到算法的魅力,于是在2016年9月,我创造了一个初出茅庐的菜鸟程序员形象,这个菜鸟程序员名叫小灰。
程序员小灰的故事活跃在微信公众号上,用漫画的形式诉说着他的一次又一次面试经历,倔强的小灰屡战屡败,屡败屡战。小灰是我本人刚刚入行时的真实写照,相信许多程序员小伙伴们也能从中看到自己的影子。
2019年5月,程序员小灰的故事从微信公众号搬到了纸质的图书上,这本书叫作《漫画算法》。这本书一出来,就成为了当年的IT畅销书。能让更多行业同仁看到小灰的故事,我感到十分欣慰。
《漫画算法》的内容定位是“入门”级别,里面讲解的是相对基础的算法和数据结构知识,至于相对复杂的知识点,比如红黑树、图、KMP算法等就没有涉及。许多读者看完这本书,难免有些意犹未尽的感觉。
于是,为了让大家更全面深入地了解相关知识,我开始了《漫画算法2》的创作,让小灰和大黄的有趣故事得以延续,也让读者们的算法学习之路有新的起点。
本书特色
这本书通过漫画的形式,讲述了小灰学习算法和数据结构知识的心路历程。书中许多内容源于本人的微信公众号,但是比公众号的内容更加系统,更加全面,也更加严谨。
本书是基于前作《漫画算法》的续作。完全没有相关基础的小伙伴可以先看看《漫画算法》这本书,从而对算法和数据结构有一个基本的认识。
有一定基础的小伙伴可以从这本《漫画算法2》当中学到更多的算法,比如希尔排序算法、KMP算法,也可以学到更丰富的数据结构,比如红黑树、跳表,还可以了解更多的算法面试题目,比如螺旋遍历二维数组、股票最大收益问题等。
这不是一本编程入门书。对于在编程方面完全零基础的读者,建议先了解一些Java语言的基础。不过,算法思想是相通的,如果你掌握的是其他编程语言,也不难看懂其中的算法和数据结构知识。
勘误和支持
除书中所提供的代码示例以外,大家也可以关注微信公众号“程序员小灰”,在后台回复“漫画算法2”,获得全书完整的、可运行的代码。为了保证代码的简洁,在部分代码实现中省略了烦琐的参数判空和验证逻辑。
由于作者水平有限,书中难免会出现一些错误,恳请广大读者批评指正。读者如果在阅读过程中产生疑问或发现Bug,欢迎随时到微信公众号的后台留言。
致谢
感谢微信公众号“程序员小灰”的读者。你们的鼓励和支持,给了我坚持创作的动力。
感谢朴提、单耳和康慧三位插画师所画的精彩插画,是你们让小灰的形象更丰满、更可爱。感谢为本书审稿的杨道谈先生,感谢在百忙之中阅读书稿并写书评的专家们,他们是张奇、付东来、周凌云、张强。
特别感谢我的父母,是他们把我带进了数学的大门。在我上小学的时候,是他们的坚持,我才有机会学习奥数,参加数学竞赛,并对数学和逻辑产生了兴趣。在这本书的写作过程中,又是他们辛苦努力屏蔽生活琐事对我的干扰,让我能够全身心地投入到本书的写作当中。
谨以此书献给我的家人、我的读者,以及热爱编程的朋友们!
魏梦舒,微信公众号“程序号小灰”的作者