1. 什么是数据结构和算法?
数据结构,就是一组数据的存储结构。
算法,就是操作数据的一组方法。
数据结构是为算法服务的,算法要作用在特定的数据结构之上。
2. 为什么需要数据结构和算法?
应用层面的原因:在计算机科学和互联网迅猛发展下,需要计算的数据量越来越庞大。但是计算机的计算能力是有限的,这么大量的数据计算,需要越来越多的计算机,需要越来越长的计算时间,注重效率的我们需要尽可能的提高计算效率。其中重要的一项,就是使用合适的数据结构和算法。选用合适的数据结构和算法,特别是在处理体量非常庞大的数据的时候,可以极大提高计算效率。
个人层面的原因:
-
首先,学习算法和数据结构的目的是让程序员建立时间复杂度、空间复杂度的意识,写出更高质量的代码,性能好坏是其中非常重要的一个评判指标。因为计算机可用的计算资源是有限的,我们当然期盼使用最少的资源来达到最优的性能。就比如说,为了达到发电的这个目的,我们可以烧煤,也可以用风力发电。但是风力发电是更被提倡的,就是为了减少对地球的负担。那么特别是对于数据量非常大的应用场景,面对上亿级别的用户,我们就更需要优化代码的质量,设计优秀的基础架构来最大化的利用设备的计算资源。
-
其次,掌握这些底层原理能帮助我们在写代码的时候少犯错误,在使用一些库类的时候,即使出现问题也能更快的定位。而且能够提升工作的效率。此外,程序的效率也可以得到提升。比如说,如何实时的统计业务接口的99%响应时间?你可能最先想到,每次查询时,从小到大排序所有的响应时间,如果总共有1200个数据,那第1188个数据就是99%的响应时间。很显然,每次用这个方法查询的话都需要排序,效率是非常低的。但是如果我们用“堆”这个数据结构,用两个堆可以非常高效地解决这个问题。
-
再者就是个人追求相关。现在互联网上的技术文章、架构、开源项目满天飞,照猫画虎搞一套基础框架并不难,实现特定的需求也没用那么难。但是有的人做出来的框架,BUG很多,性能一般,拓展性也不好。有的人做的框架却可以开源给那么多人用。我觉得高手的竞争就是细节的竞争,没人不想成为高手。而优秀的代码,优秀的框架往往就是很多细节堆砌起来的。而且掌握了数据结构和算法,我看待问题的深度,解决问题的角度就会完全不一样。大脑思考的能力是人最主要的核心竞争力,算法就是很能锻炼思维的一种手段。
3. 怎么样衡量数据结构和算法?
需要引入一个衡量的标准(metric)—时间复杂度和空间复杂度。
学习数据结构和算法的基石,就是要学会“复杂度分析”。知道怎么去分析复杂度,才能作出正确的判断,在特定的场景下选用合适的正确的算法。而不是盲目的死记烂背,机械操作。数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。