什么是算法?简单来说,解决一个问题的步骤,就是算法。
第一次接触算法
大学的时候刚开始学C语言,每学一个知识点都会把后面的习题给做了,习题中有些会包含排序,其实那时候还不知道这叫算法,直到后来读了《数据结构与算法》这本书以后,才知道那叫算法
其实那时候并不知道这些算法有什么用,只知道学编程需要掌握它,包括《数据结构与算法》这本书,也是舍友推荐我读的,因为我本身并非软件专业,也就半路出家自学编程。既然什么都不懂,那就先按部就班学习。
除了排序以外,还学习了队列,堆栈,二叉树等概念,平时除了做做习题,基本没有用得到的地方。
第一次面试
果然像舍友说的,面试免不了会考你算法,就算你进去以后用不到,你也得掌握,不然连通过的机会都没有。还好大学时做过一些算法题,面试官问的那些冒泡排序,二分法查找之类的算法,都能答得上。
对那时候的我来说,算法就是一些理论知识,看上去没什么用,就为了找份工作。
参加工作以后
工作以后,用得最多的算法就是排序,查找,队列控制这些,其他的完全无用武之地,那时候觉得,自己做的是客户端,本身业务上就不需要什么算法,大部分的工作都是跟界面和交互打交道,再加上自己觉得算法过于枯燥,也就没有继续学下去了。久而久之,除了几个常用的算法,其他的连概念都快忘了。
对算法态度的变化
一次偶然的机会,需要做一些日历相关的功能,那时候需要解决阴阳历转换,以及二十四节气相关的计算。以前压根就没学过这些东西,不知道要怎么做,情急之下在网上找了一些现成的代码来用。之后发现问题很多,例如有些日期的转换出错了。这时候才下决心要学习阴阳历以及二十四节气的计算原理,然后从才能解决这些问题。
这个过程中,先是感叹自然规律的奇妙,闰月,时辰,干支等等都是从数理演变过来的。然后感叹古人的强大,能把传统历法研究得那么精深。研究的过程充满了乐趣,最后把问题解决了,还能带来满足感和成就感,原来研究算法也是件有趣的事情。
界面开发中也有算法
有些人觉得做客户端开发没什么算法可言,拿到数据以后就把界面搭起来,然后就完了,做界面能有什么难度?我自己也最初这么认为,但后来发现其实界面开发也有讲究的地方,也有需要用到算法的地方。
以前玩魔兽争霸时觉得很神奇,为什么他们走路会自动避开障碍,要怎么做才能实现?然后自己就琢磨着做一个自动寻路的demo。那时候还不知道什么叫A寻路,上网查资料后,才发现有种寻路算法叫A,然后参照着算法思路自己实现了一下,发现挺好玩的,无论设置怎样的障碍物,只要有一条可行的路径,它就会找出来,并且是最短的路径。
前段时间做了个弹幕的功能,弹幕要考虑不同的播放速度,要考虑旋转屏幕时的过渡,要考虑内存占用量,以及弹幕视图重用的问题。这些就是算法,假如解决不了这些算法,那就只能做个匀速播放,旋转过程没有过渡,可能还会出现播放断片,然后内存狂飙的弹幕界面。
对算法的看法
学习算法应该是基于兴趣的,假如只是为了掌握算法而去学习,很可能会产生厌倦,导致学到东西的也丢了。最近读了王晓华的《算法的乐趣》图书样章,比较认同他对算法的定义,以及如何对待算法这个问题。我始终是抱着兴趣与运用的原则来学习算法的,虽然自己掌握的算法不多,而且没有什么高深的算法,但能满足自己,满足业务,那就够了。