【算法日积月累】0-写在前面的话

我是一个半路出家的“程序员”,在我刚开始从事编码工做的头几年,我没有接触过“算法和数据结构”,以为它们是只会在我找工做的时候用获得的知识。尽管有不少人跟我说过“算法和数据结构”无比重要,我也很相信“算法和数据结构”很重要,但万事“开头难”、“开头难”、“开头难”……程序员

为何“难”?由于不知道应该如何入门,手边没有很好参考资料,身边也没有从事算法工做的同事,连个会算法的科班出身的同事都没有。面试

终于有一天,我终于开始了,今后入坑。算法

因而乎,我想写一个系列文章,记录一下我学习过的“算法与数据结构”的过程,若是有幸可以给一些朋友帮助,我会感到很荣幸。网络

若是你想在“程序员”的道路上走得更远的话,“算法与数据结构”是必学的,越早学习越好。数据结构

我是谁?我是一个本科数学专业,其实数学一点都很差的程序员,若是你有更好的学习建议,欢迎指点、交流。机器学习

参考资料

先从“参考资料”提及吧,“算法和数据结构”是一门很是抽象的学科,就像非数学专业的学生学习数学同样,若是没有很形象、生动的学习资料,入门就会是一件很是痛苦的事情。所以,找好“参考资料”很重要。学习

入门视频教程

个人算法入门课程是慕课网 liuyubobobo 老师的《玩转算法》课程。这门课程我是在 2017 年 5 月的时候学习的,能够说经过这门课程的学习打开了我进入“算法与数据结构”学习的大门。 liuyubobobo 老师的讲解十分细致,配合了制做精美的动画,大大下降了抽象的算法的理解程度,若是你对“算法和数据结构”一无所知,强烈建议你看看这个老师的视频教程,不懂的地方多看几遍,看完要作笔记,要练习。 liuyubobobo 老师是用 C++ 语言讲解的这个课程,我当时只会 Java ,不过一点都不影响理解,正如 liuyubobobo 老师的介绍“算法与数据结构应该是与语言无关的”。动画

我这个系列的文章,在开始的部分,基本会按照 liuyubobobo 老师课程的思路来,其实不少就是我学习这门课程的时候的笔记,只不过是我已经来来回回修改了好几遍了。如今发出来的版本,我从新使用了 Python 语言实现。在人工智能、机器学习、深度学习、数据科学大行其道的今天,Python 又是如此简单、易用,咱们没有理由不用 Python。网站

我能够,相信聪明的你也必定能够。编码

这是我作的笔记。

image-20190116123113568

这里要说明一点:在个人系列文章中出现的学习资料,不管是网络视频、书籍仍是介绍算法的网站、刷题网站,都只是我本身的学习路径的真实介绍,没有任何广告的意思,我只是以为它们好,而且我真的从这些资料上学到了东西,因此我才写在这里。事实上,聪明的你无须付费就能够得到它们,并使用它们。

入门书籍

个人算法入门书籍:《算法4》

image-20190112215955003

这里的 4 是第 4 版的意思,这是一本很是经典的外文读物,已经有中文译本了。这本书和《算法导论》同样厚,但比《算法导论》要生动不少,同时也是国外名校使用的一门很是经典的教材。

这本书的特色:
一、颜值特别高:红色的封面,里面的纸像打印值同样白,阅读的时候很舒服;
二、结构很清晰,每个算法都有代码实现,主要仍是 Java,我当时只会 Java 语言,看这本书其实没有什么阻力;
三、这本书还有配套的网站,你能够去这个网站上下载书中的代码。

其实我以前介绍的 liuyubobobo 老师课程也大量参考和使用 《算法4》 这本书上的思路和例题。二者配合着学习,而且要练习,能够说是很是完美了。

下面再说一说其它的书籍:

《算法导论》

我是学习了《算法4》(固然没有看完)再去看《算法导论》的,不少地方其实都容易理解得多,《算法导论》有一点对初学者很不友好的地方,那就是全部的算法代码都是伪代码,但这绝不影响《算法导论》的地位,或许《算法导论》根本就不是给初学者看的。

image-20190112220203368

《算法图解》

这本书我是和《算法4》一块儿买的,一本很小的书,用 Python 语言实现,看着玩,图中的插画很生动。看这本书主要是让我以为算法能够以比较轻松的方式入门。

image-20190112220129403

《剑指 Offer》:

image-20190112220240178

这本书主要用于准备算法面试,在网络上备受好评。里面有不少问题是和 LeetCode 重合的,做者会以面试官的角度给出对这些问题考察的内容。

邓俊辉老师《数据结构 C++ 语言版》

image-20190113174114949

其实最先认识邓老师是他的 mooc ,他制做的算法与数据结构 flash 动画是十分生动的,它的教材和课件风格是一致的,他在教学中还赋予了算法比较优雅的哲学含义。在内容上,涉及到了一些高级数据结构,例如红黑树、B 树等,若是理解高级数据结构有困难的话,能够看看他的 mooc 或教材。

刷题网站

LeetCode

传送门:LeetCode

想熟练掌握经常使用的算法和数据结构,刷题是必经之路。
LeetCode 是国内外公认的刷题网站,这个网站上罗列的问题是一些知名公司的面试问题。
这个网站如今已经有中文版了,对于看英文比较吃力的朋友,例如我来讲,是一个好消息。不过中文版里面的讨论的内容没有英文版多,因此,想要参考别人写的代码能够到中文版上看题目的翻译,到英文版里看别人的代码。

顺便说说,我在刷题的过程当中,我找到了一些视频资源,这些视频资源也能够帮助你理解一些问题,可能大伙在刷题的时候也会搜索到它们的视频资源或者我的博客,它们是“Cspiration”、“花花酱”、“小 Q”、“小 Fu”等。

LintCode

传送门:LintCode

这个网站能够做为 LeetCode 的补充,不过我看你们刷得比较多的仍是 LeetCode。

ACWING

传送门:AcWing

这是我在 B 站上看到一个北大研究生“大雪菜”作的直播时看到的网站,AcWing = Accepted + Wing,简称AC 之翼。在上面能够刷一些 LeetCode 上没有的 《剑指 Offer》的题,“大雪菜”还会在直播里给你讲每道题的思路,这个网站上还有一些活动,激励里去刷题和分享,我以为仍是很不错的。

总结

一、培养兴趣

学习《算法与数据结构》是一项工程,并非一件特别轻松的事情,因此我以为刚开始的时候,培养兴趣是很关键的,要让本身认识到学习《算法和数据结构》是十分有用的。

二、乐于分享

不止一我的告诉我应该把本身的解题思路写成文字分享出去了。写成文字能够帮助本身思考,也方便之后查看,也能帮助到别人。事实上,互联网上这样的人有不少,应该成为他们中的一员。

三、坚持

贵在坚持,不要轻易说放弃。

相关文章
相关标签/搜索