正在回答
抱歉,这个课程不涉及传统意义上的“算法设计”的内容。这个课程主要学习经典算法的算法和数据结构。
通常说“算法设计”,在传统的计算机科学的领域分类上,是指学习诸如“贪心”,“动态规划”,“回溯”,“分支限界”,等等算法思想的使用。这些内容不在这个课程的范围里。但是,学习这个课程是进一步学习这些算法思想的基础。
但是,根据我的经验:
1)
大多数软件工程师在实际工作中,不需要非常复杂的这类算法设计思想的学习。最典型的就是“动态规划”。很多同学因为面试的需要,对学习动态规划有需求,但实际上,在工作中 99% 的同学基本上不会使用动态规划。更一般的算法思想,比如回溯,确实会更常用一些,对于这些基本的“思想”,学习这个课程是有帮助的。因为这个课程中虽然没有“显式”地去讲“回溯”,但是近乎所有的递归算法,本质都是在“回溯”,而这个课程涉及大量的递归算法。
但不管怎么样,我还是要强调,这个课程中涉及的内容,是进一步学习算法设计的基础。学习经典的算法和数据结构,很多时候更多地就是去体会其背后的算法设计思想(我们学习那么多排序做什么?真要排序,调一个 sort 就好。就是因为不同的排序算法背后,有着不同的算法思想。)我在这个课程中,是会不断地提炼,强调,总结这些地方。
2)
根据我的经验,大多数软件工程师在实际工作中,遇到的最常见的算法问题,其实是数据结构类问题,即数据如何组织的问题,或者说至少这是解决问题的第一步。对于这类问题,学习这个课程是有帮助的。你可以参考一下这个课程的目录,其中涉及的数据结构,是不是你熟悉的。整体,如果你觉得课程目录中的内容,有很多你觉得自己理解的不够深刻,或者没有具体实践过的话,那么这个课程值得你学习。
3)
另外一些同学遇到算法问题,其实是专有领域内的算法问题。比如如果你工作在分布式系统上,可能需要使用一致性哈希算法;或者你工作在数据存储领域,会使用 LSM 树(数据存储最基本的 B 树,这个课程有涉及,但不是重点);或者你需要经常写自定义规则的解析器(如实现类似 SQL 语言,或者正则表达式,或者 HTML 的解析器),这些实际上是编译原理的范畴,等等等等。这些内容这个课程都不涉及,应该进一步去学习这些具体领域。
但是依然是,所有这些更进一步计算机领域的学习,所需要的算法和数据结构基础,都在这个课程中涵盖了。在这个课程中后续近乎每一章的最后,我也都会对这一章的内容做一个简单的拓展,告诉大家这一章的内容在很多计算机科学的具体领域中,可以被怎样应用。
==========
请你根据这些,再审视一下这门课程的目录,看看这门课程是否是你现在要学习的内容。如果发现不是的话,请迅速联系慕课网的客服做退课处理。
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星