很多同学都发现了,昨天,慕课网上线了我的算法与数据结构体系课程。
在我看来,这个体系课程并不是一个全新的课程。虽然我在很努力地尝试在课程中添加很多新的元素。但是,基础的算法和数据结构所涉及的东西其实就那么多。绝大多数内容,在我之前慕课网的课程中都涵盖了。
也正是因为这个原因,之前,很多同学问起,我都说,自己并没有做新的课程。
其实,这个体系课程,主要是想解决大家在慕课网上系统学习算法的一个学习体验的问题。
可能很多同学都知道,我在慕课网上有一门《玩转数据结构》。《玩转数据结构》专注于讲解经典数据结构的底层实现。这个课程上线两年,有 6000 多人学习,大家近乎给出了满分的好评,让我受宠若惊。在这里,真的很感谢大家的支持。给大家鞠躬。
但是,很多同学会问,如果想学习一下非数据结构的内容,比如排序算法,要到哪里学习?于是,我就要把他们指向我的另外一门课程,也是我在慕课网做的第一门课程《C++ 算法与数据结构》。
但这样一来,又出现了很多问题。
首先,这门《C++ 算法与数据结构》的课程,视频是使用 C++ 讲的。虽然课程配套的代码包含了完整的 Java 代码,但还是有很多同学会介意和数据结构课程语言不一致的问题。这导致了学习体验不流畅。
其次,这门课程中,我也对二分搜索树,堆和并查集这三种数据结构进行了介绍。这些和我的《玩转数据结构》的内容重复了。
再有,很多同学因为想学习更“基础”的排序算法,才要去学习这门《C++ 算法与数据结构》。但偏偏,这门课程设计的初衷并不基础。这体现在很多方面,比如:
课程没有详细解析递归的执行过程,而是默认大家了解递归。这导致有些同学不能理解一些递归算法的具体执行过程,比如归并排序;
课程引入了索引堆这个高级数据结构,但其实,这并非必须。而索引堆的概念因为比较绕,给大家学习造成了门槛;
代码设计上一些地方抽象层次过高,比如泛型套了好几层,引入了迭代器一类的“设计”概念,导致很多同学在非算法逻辑方面需要投入大量精力,而不能专注于算法本身的学习;
等等等等。
也正是因为这些原因,这门课程后来被添加上了“综合提升”的字样。
这一切,都让我和慕课网都希望能够提供一个更加“系统化”的产品,让大家能够“一站式”地学习算法和数据结构。于是,这门新的《算法和数据结构体系课程》产生了。
整体来讲,大家可以认为,这门体系课程是《玩转数据结构》课程的扩充。《玩转数据结构》详细介绍了大多数经典数据结构的底层实现;这门课程则补上了绝大多数经典算法的底层实现讲解。
主要扩充的内容包括:十大排序算法;查找算法(二分查找为主);字符串相关算法;随机算法;外存算法和外存数据结构的简介。
这些看似不多,但详细展开,还是有不少内容的。甚至一些内容也是我之前的课程不涉及的。
比如,对于排序算法,希尔排序就是我之前的课程没有详细介绍的内容;
所有的非比较排序,我之前的课程都没有涉及,这次会专门介绍;
基于哈希表,以及诸如桶排序的思想(分块),我还会添加一个有意思的数据结构的讲解:SQRT 分解;
基于哈希的思想,我还会详细分析另一个刷题常见的字符串匹配思想:滚动哈希,以及 RK 算法;
关于二分查找,虽然我之前的课程介绍过,但过于简单。对于使用二分查找解决更复杂的问题,比如寻找上界和下界,包括在常见面试题中的应用,在这个课程中会做详细分析;
KMP 算法应该是我被同学问到的最多的算法了。这个课程中,我会用一章的内容,仔细地分析 KMP 算法,并给出两个实现。而且,这一章的内容将不仅仅局限在 KMP 自身:);
另外,课程还会集合一些“边边角角”的算法讲解,比如随机算法,外存算法,等等。
更多细碎的内容,我就不一一列举了。
以上是内容上的扩充介绍。在课程设计上,没有大变化。老套路:每一小节只解决一个针尖大的问题。层层迭代,不断递进优化,最终得到完整的算法。
有两个新的设计思考:
其一是,在课程进行过程中,加入了一些作业。大多数作业本质都是从另一角度思考某一个算法或者数据结构。我希望通过这样的设计,能够让大家更深刻地理解学习的内容。
其二,对于一些章节,我添加了“习题章节”,告诉大家:如果想“刷题”,和这一章内容相关的 习题都有哪些。对于特别经典的问题,我会进行讲解。
其实,《玩转数据结构》已经融合了 上的问题。这一点在这门课程中会有所加强。
尽管如此,“习题章节”并非这个课程的重点。我并不会大量地具体讲解 的真题,只是点到为止。
这个课程的核心依然是经典算法和数据结构的底层实现,如果大家能够真正地理解课程包含的所有算法和数据结构,并且能够根据自己的理解实现出来,那么,就已经完全达到学习目标,并且,我相信已经超过平均水平了。
至于“习题章节”,我设想的是:在课程维护过程中,对于同学们有共性的习题,进行不定期更新。或许现在,这个课程中的“习题章节”还不是重点,但积累一两年以后数据结构课程设计排序,将成为这个课程的另一个特色。
我完全可以理解很多同学急于刷题的心情。但在这里,我再次强调,这个课程不是“刷题课”。
我坚持认为:这个课程所讲解的所有内容,都是刷题的基础。如果你能够真正理解这个课程的所有内容,我相信之后进一步刷题准备面试,将事半功倍。
这个课程关注“经典算法和数据结构的底层实现”。所以,对于诸如回溯,贪心,动态规划等算法设计的思想,这门课程并不涉及。请大家一定注意。
实际上,如果一切顺利,在这门体系课程完结以后,我会再做一门完整的刷题课程,尝试详详细细地把刷题的各种套路讲清楚。
但是这门刷题体系课程的构想,要至少明年才能推出了。这过程会不会出什么岔子,我也不能肯定。
现在,如果大家对这类算法设计思想的学习有需求,并且急于面试,可以参考我的老课:《玩转算法面试》。不过,这门课程也是使用 C++ 讲解的,但是配套了完整 Java 代码。
另外,这个体系课程不包含图论算法。图论算法领域本身就包含相当多的内容,所以,我已经将他们单独放在一门课程中,进行详细讲解了。有兴趣的同学可以参考这门《玩转图论算法》:
大家看到了,我计划的,在慕课网上完整的算法学习课程计划路线,是这样的:
想要学习算法和数据结构基础?就学习这门《算法和数据结构体系课程》;
想要进阶地系统了解图论算法?去学习《玩转图论算法》;
想要刷题?计划再出一门专门的系统刷题体系课程。只是计划,一切待定。现阶段可以看《玩转算法面试》。
最后,因为这个课程从设计上,是《玩转数据结构》的扩展,所以,我和慕课网商量,对每一名已经购买《玩转数据结构》的用户,都发一个 299 元的优惠券。
因为《玩转数据结构》的原价是 299 元。相当于,把这个课程原价退款给老用户,老用户可以考虑是否加价换购成这个新的体系课程。
如果不做换购数据结构课程设计排序,完全没有问题,不影响大家观看已经购买的《玩转数据结构》。并且,我也会继续在《玩转数据结构》的问答区回答问题。
至于新的体系课程的价格,即使有了这个 299 元的优惠,也需要 600 元。这个价格是我左右不了的了。
实际上,慕课网的价格政策一直在调整。尽管如此,我的每门课程,我都在争取让慕课网给出一个更低的价格,甚至在这个问题上,和慕课网急过眼。
比如我的《玩转数据结构》,25 小时的视频,299 元,相当于每小时只有十几块。我只能说,我真的尽力了。
这门体系课程的上新价格是 900 元。相当于慕课网重新评估,我的老版《玩转数据结构》,价值 450 元;新增加的另一半内容,也价值 450 元。
我完全可以理解对于一些老用户来说,新增加的内容,很多在我的其他课程中也学习过了,所以这个价格太亏了。
对此,我只能说抱歉了。我暂时没有解决方案了。
我也想过分章购买一类的策略,但是数据结构课程设计排序 关于新的算法和数据结构体系课程,这些功能慕课网并不支持。慕课网不支持也有它背后的产品理念,毕竟慕课网不能围绕我一个人的想法转。
因此,对于这部分老用户,我的建议是:如果你认为你所需要的额外内容不值这个额外的价格,请不要购买。
(希望慕课网不要打我)
实际上,我上面林林总总说了那么多,就是想说,新的体系课程,主要是为了优化用户的学习体验,进行一站式的学习的。
但是,对于很多老用户,因为已经学习了我以前的课程,虽然没有一站式的学习体验,但也已经实实在在学到了知识,甚至很多同学已经拿到了满意的 Offer,进入了人生的下一个阶段,在我看来,真的完全没有必要购买这个体系课程了。
有很多老用户告诉我,因为支持我,所以就算不看,也要买。我真的谢谢这些同学。给你们鞠躬。
但我也要号召理性消费。
有些同学说,就为了凑齐我的所有课,也要买。可还记得吗?我一直说,不要完美主义。所以,在买课这件事儿上,也不要完美主义。
请大家再复习一下我的。
这篇文章不是这门体系课程的广告。因为我主要在做课程的新老内容的对比,也没有突出这门课程的特点是什么。所以有一些新用户可能不知道我的课程特点。
但我不太喜欢,也不太会做广告,所以,如果有新用户对这个课程感兴趣,就去慕课网看课程介绍页面吧。网址我放在了这篇文章的“原文链接”中。
我只能说,课程是我用心设计的。但学习是一个主观的过程,能不能让每个人满意,我不敢打包票。
但我能保证:如果你参加了我的课程,学习过程中遇到了问题,在课程的问答区,我会尽自己最大努力,帮助每一名同学真正在算法和数据结构上,迈向一个新的台阶的。
再次感谢所有人对我的支持。
祝愿所有人,前途似锦。
大家加油!:)
文章来源:http://mp.weixin.qq.com/s?src=11×tamp=1680354287&ver=4442&signature=S8DCS4ql5O0axWAgGj429aZ9z5Dw9bsK9whM8tWBmtUuAb*ZpNDH5gTjXWjugchMGFjcZohVKLT1G1WgJtfI1rEQ3Jl9zCOdxWDsx7wFb9s2GtOwUwLIBNV5bdgDq3&new=1