不知道你有没有发现,非算法类的岗位,工作之后几乎没有用到什么算法,为什么还要学算法?本文谈谈自己的看法,不供参考。
从用人者角度
毋庸置疑,面试是用来筛选候选人的,在这个僧多粥少的时候,就需要提高筛选条件,例如最常见的学历,不是说学历一般的人不好,而是总体来说,学历好的人里面挑选到合适的概率比较大而已,这就是现实。而面试题中,算法相比于其他记忆型的题目,就能很好的体现一个人的逻辑和思路,因而也是一个很好的筛选条件。当然像操作系统,网络,Linux等都是很多公司喜欢考察的点。
所以为了面试还是需要准备学习算法的。
从个人角度
进去的第一家公司基本用不上什么算法(血的教训,在学校的时候一定要好好准备),甚至用不上网络编程,基本就是简单纯C开发,因为那些东西早就封装好了(由另外一个组负责开发维护),只需要调用即可。包括后来去面试,主要面试了两类公司,一类是传统通信技术类,一类是互联网公司,前者关注项目本身,以及基本的技术技能更多一些,而后者考察的方面通常比较多,包括操作系统,数据库,算法,网络等知识。
那么面完之后是不是真的就完全没用了呢?确实,大多数时候根本用不上。你写的可能多是业务代码,是业务流程的设计,代码实现可能只是很小的一环。而且现有算法实现一搜一大把,基本不太可能要你自己去实现什么快排,跳表,快排,红黑树之类的算法,但是学习算法有好处。
例如,你可能要根据你的业务排序需求来选择是用稳定排序还是非稳定排序;你可能会根据插入和删除数据的频率来选择使用array list还是link list;你可能为了处理top K问题采用堆相关算法;可能为了某种情况下的快速查找而使用哈希;你可能在设计你的业务数据结构时引用了基本数据结构的思想。
好了,我编不下去了,你看着办给自己解释一下吧。
常见的数据结构与算法
最基本的数据结构和算法包括:
更多内容可查看公众号【编程珠玑】菜单栏的数据结构与算法部分。
总结
通常我们不需要自己实现这些算法,不过我觉得从中了解以下几点非常重要
- 时间和空间复杂度的概念
- 各类数据结构或算法的效率
- 各类数据结构或算法的复杂度
- 各类数据结构或者算法的适用场景
- 常见的如vector,map,set等容器背后的数据结构是什么,它们的查找或者插入效率如何
- 从现有数据结构和算法中获得思路
- 根据现有问题选择合适的数据结构和算法
不像Java,C++,Python之流,C库中可能没有上面提到的数据结构或者算法的实现,因而C语言也是加深对它们理解的不二选择。
一切为了更好地解决实际问题。
以上就是本人对算法的浅薄认识,欢迎补充。