乐趣区

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

【算法日积月累】0- 写在前面的话
我是一个半路出家的“程序员”,在我刚开始从事编码工作的头几年,我没有接触过“算法和数据结构”,觉得它们是只会在我找工作的时候用得到的知识。尽管有很多人跟我说过“算法和数据结构”无比重要,但万事“开头难”、“开头难”、“开头难”……
终于有一天,我终于开始了,从此入坑。
于是乎,我想写一个系列文章,记录一下我学习过的“算法与数据结构”的过程,如果有幸能够给一些朋友帮助,那我会感到很荣幸。
如果你想在“程序员”的道路上走得更远的话,“算法与数据结构”是必学的,越早学习越好。
我是谁?我是一个本科数学专业,其实数学一点都不好的程序员,如果你有更好的学习建议,欢迎指点、交流。
参考资料
先从“参考资料”说起吧,“算法和数据结构”是一门非常抽象的学科,就像非数学专业的学生学习数学一样,如果没有很形象、生动的学习资料,入门就会是一件非常痛苦的事情。因此,找好“参考资料”是关键。
入门视频教程
我的算法入门课程:慕课网 liuyubobobo 老师的《玩转算法》课程,这门课程我是在 2017 年 5 月的时候学习的,可以说通过这门课程的学习打开了我进入“算法与数据结构”学习的大门。liuyubobobo 老师的讲解十分细致,配合了制作精美的动画,大大降低了抽象的算法的理解程度,如果你对“算法和数据结构”一无所知,强烈建议你看看这个老师的视频教程,不懂的地方多看几遍,看完要做笔记,要练习。liuyubobobo 老师是用 C++ 语言讲解的这个课程,我当时只会 Java,不过一点都不影响理解,正如 liuyubobobo 老师的介绍“算法与数据结构应该是与语言无关的”。
我这个系列的文章,在开始的部分,基本会按照 liuyubobobo 老师课程的思路来,很多就是我学习这门课程的时候的笔记,只不过是我来来回回已经修改了好几遍了。现在发出来的版本,我使用了 Python 语言实现。人工智能、机器学习、深度学习、数据科学大行其道的今天,Python 又是如此简单、易用,我们没有理由不用 Python。
我可以,相信聪明的你也一定可以。
(说明:我在我的系列文章中出现的学习资料,不论是网络视频、书籍还是介绍算法的网站、刷题网站,都只是我自己的学习路径的真实介绍,没有广告的意思,我只是一个不知名的程序员,没有人会让我推荐的,事实上,聪明的你都可以无须付费获得它们、使用它们。)
入门书籍
我的算法入门书籍:《算法 4》。

这里的 4 是第 4 版的意思,是一本非常经典的外文读物,已经有中文译本了。这本书和《算法导论》一样厚,但比《算法导论》要生动很多,同时也是国外名校使用的一门非常经典的教材。
这本书的特点:1、颜值特别高:红色的封面,里面的纸像打印值一样白,阅读的时候很舒服;2、结构很清晰,每一个算法都有代码实现,主要还是 Java,我当时只会 Java 语言,看这本书其实没有什么阻力;3、这本书还有配套的网站,你可以去这个网站上下载书中的代码。
其实我之前介绍的 liuyubobobo 老师课程也大量参考和使用《算法 4》这本书上的思路和例题。两者配合着看和学习,可以说是非常完美了。
下面再说一说其它的书籍:
1、《算法导论》:我是学习了《算法 4》(当然没有看完)再去看《算法导论》的,很多地方其实都容易理解得多,《算法导论》有一点对初学者很不友好的地方,那就是所有的算法代码都是伪代码,但这毫不影响《算法导论》的地位,或许《算法导论》根本就不是给初学者看的。

2、《算法图解》:这本书我是和《算法 4》一起买来的,一本很小的书,用 Python 语言实现,看着玩,图中的插画很生动。

3、《剑指 Offer》:

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

其实最早认识邓老师是他的 mooc,他制作的算法与数据结构 flash 动画是十分生动的,它的教材和课件风格是一致的,他在教学中还赋予了算法比较优雅的哲学含义。在内容上,涉及到了一些高级数据结构,例如红黑树、B 树等,如果理解高级数据结构有困难的话,可以看看他的 mooc 或教材。
刷题网站
LeetCode:国内外公认的刷题网站,想熟练掌握常用的算法和数据结构,刷题是必经之路。这个网站现在已经有中文版了,对于看英文比较吃力的朋友,例如我来说,是一个好消息。不过中文版里面的讨论的内容没有英文版多,所以,想要参考别人写的代码可以到中文版上看题目的翻译,到英文版里看别人的代码。
顺便说说,我在刷题的过程中,找到了一些视频资源,可能大伙在刷题的时候也会搜索到它们的视频资源或者个人博客,它们是“Cspiration”、“花花酱”、“小 Q”、“小 Fu”等。
LintCode
传送门:LintCode。
这个网站可以作为 LeetCode 的补充,不过我看大家刷得比较多的还是 LeetCode。
ACWING:这是我在 B 站上看到一个北大的研究生“大雪菜”做的直播,在上面可以刷一些 LeetCode 上没有的《剑指 Offer》的题,“大雪菜”还会在直播里给你讲每道题的思路,这个网站上还有一些活动,激励里去刷题和分享,我觉得还是很不错的。
总结
学习《算法与数据结构》是一项工程,并不是一件特别轻松的事情,所以我觉得刚开始的时候,培养兴趣是很关键的,要让自己认识到学习《算法和数据结构》是十分有用的。然后贵在坚持!

退出移动版