数据结构与算法(Python)-前篇

版权声明:使用署名-非商业性使用CC协议[http://creativecommons.org/licenses/by-nc/3.0/deed.zh] https://blog.csdn.net/ziyuanxiazai123/article/details/77619268

接触计算机学习已经9年了,零零碎碎学习了很多理论和技术,现在回过头来才发现,能够培养计算机专业素养的基础学科也就那么多,其中数据结构与算法,就是一个核心课程。

在实际工作过程中,很多时候会遇到庞大的业务需求,项目计划排的满满的,项目进度一直在和市场上同类竞争产品赛跑。一般开发人员的日常都被繁琐的业务塞的满满的,好在只要熟悉了公司的框架和流程后,也就驾轻就熟,慢慢适应了。有时候并不需要什么高深的算法理论,数学基础做支持,日复日一,也就这样应付过来了。适应了这种机械性开发后,如果不能继续认清自己的职业规划,不继续提升自己能力,就变成了温水煮青蛙。

在日常的开发工作中,不管是简单的功能开发,还是系统关键构件的实现,都可以从数据结构与算法的角度去思考,可能没有立即得到答案,但它能像航行中的灯塔一样给你一个指引,结合当前问题的思考,最终让你走出困境。

以一个简单功能开发为例。例如一个游戏开发中经常出现的需求,游戏开服后7天内登录,每天都有奖励领取,玩家可以随时补领某一天的奖励。对这个需求,如何存储数据?第一种方式是,只保存领取了奖励的那些天的索引,存储为一个数组;第二种方式是,天数作为键,领取状态作为值,存为一个字典map来实现;第三种方式是将领取结果存储为一个整型值,它的每个bit表示某一天的领取状态,通过位操作来实现。这三种方式,在改变和获取领取状态,以及数据存储上各有不同,虽然功能小,数据量也小,但却是反映了思考会带来收益。

除了简单功能外,开发核心组件时更要注重效率和性能。在性能分析的时候,自然少不了从算法分析的角度考虑问题。一种是使用开源库或者第三方库,这个时候如何去辨别组件的性能好坏,如何快速集成组件到现有项目和平台,也是一个考验。另一些情况下,针对特有需求,你可能需要自己从头设计,从无到有,鸭梨山大。编写第一份代码的开发人员对整个系统,以及后来沿用这份设计的人员,都负有重大责任,如果设计不周,将成为后面程序员咒怨的对象。

在每个加班后筋疲力尽的时候,我总是这样反思到: IT界的加班向来不是什么光彩的事,一种是公司决策和领导安排不当,一种是程序员做事方式不当。只有当我们自己变得足够强大时候,才能更好地完善设计,少写有漏洞的程序,从自身的角度减少加班。【如果不曾真正经历过,迟早要回到这样的起点,数据结构与算法——这种逻辑思维的特种训练。】

本系列,以python这种近似伪代码的语言,系统性的学习和整理数据结构与算法中的一般问题,内容尽量精简,把更多的时间花在思考上,而不是连篇累牍的介绍分支内容。仅在需要的时候,补充相关上下文内容。从今天开始,花点时间,真正的开始思维训练之旅。

猜你喜欢

转载自blog.csdn.net/ziyuanxiazai123/article/details/77619268