算法和数据结构可谓是计算机科学的基础,许多现代前沿技术的发展离不开算法和数据结构在底层的支撑,但是我们对于算法的学习并不是为了将教材中的算法自己实现一遍,因为教材中所教授的算法都是抽象了每一个算法的核心部分,当在需要实际使用的时候我们需要针对不同的应用场景对自己的算法进行封装以应对不同的使用需求。
比如,C 的 qsort 库函数,只要保证数据是以指针数组索引的、对自定义数据须传入比较大小的功能函数,那么任何数据都可以用这个 qsort 算法排序;C++ 里面则是和容器、迭代器之类东西结合通盘考虑的,可泛用于任何符合规范的容器和原生数据类型。而课本上的实现,仅能支持数组中的整数。想做到工业水平,没有足够的经验是不可能的。
那这样是不是意味着我们对于算法和数据结构的学习就完全没有必要了呢?其实不是。
虽然在我们的实际开发中,项目的某些组件可能可以通过直接调用系统提供的官方库的方式进行,但是对于整体的系统设计理念和思想,却是和算法息息相关的。
来,我们看看一个生活中对于数据结构应用的例子:
我认识一个大牛,他不喜欢洗袜子,又不喜欢袜子的臭味。他买了很多样式一样的袜子,把这些袜子放在地上,根据臭的程度,摆一个二叉堆。每天早上,他pop两只最“香”的袜子,穿上;晚上回到家,把袜子脱下来,push 到堆里。某一天,top 的袜子超过他的耐臭能力,全扔掉,买新的。——如何将数据结构和算法应用到实际之中? - 知乎网友蚩翔
此外,学习笔记的引用(指针),书籍的目录(索引)其实都是数据结构的一个实际使用。
那对于程序开发方面呢?
例如你希望在某天同时拜访多个位于不同地方的朋友,他们家之间的距离不同,需要花的时间也不同,此时我们是否可以将所有朋友家之间的距离计算出来(将朋友家的地址投影到坐标轴上并遍历所有坐标点)作为权重,并通过一些算法(例如 Dijkstra 或者 Floyd )求出一条从自己家到各个朋友家串门一圈需要走的最短的路径呢?
在这么一个需求下,系统已经封装好的库便爱莫能助了,因为要完成这么一件事情,首先要结合所学的知识想到
此时,我们便简单地将数据结构和算法应用到了实际的一个开发需求之中。
从上面的例子中我们可以发现,可能我们在数据结构和算法的学习中会感觉到比较枯燥和乏味,课本上的案例可能没有看上去那么有意思和有实际用途,但是只要在生活和实际开发中花点时间观察和尝试,就可以想出如何将这些看上去较为单调的知识转化为节省时间/提高效率的手段,从而进一步将数据结构和算法应用到实际之中。
毕竟我们是程序员,该用程序来改变自己生活,不是嘛?
本文作者:Nova
声明:本文归 “力扣” 版权所有,如需转载请联系。
文中部分图片来源于网络,为非商业用途使用,如有侵权联系删除。