在这1年的算法图解文章写作的过程中,经历了很多的快乐与心酸。拿一篇中等难度的算法题来说,从解题->修改->优化->画图解析->写文字解析->全网发布,这一套操作下来基本是在4个小时左右的,那么,每当看到在LeetCode平台上面的读者们留言感谢的时候,自己真的很开心。后来呢,由于某些原因,LeetCode平台的“每日一题”我就不去写图解了,改成了在公众号发布《剑指Offer》系列和《LeetCode TopXXX》系列的图解文章了,优点是轻松了很多,缺点就是没啥人看,也就更没有什么正向反馈了。
其实关于对算法的看法,听到过好多人的观点是“平时工作也用不到,就应付面试时候用,临面试前刷一刷就行了”。这个不奇怪,以前我也是这么认为的,甚至这个观点一度是我劝解自己不去费力刷算法题的“理由”。但真的是这样吗?
为什么我们平时感觉不怎么用到算法?以数据库操作为例,查询操作我们使用SQL语句编写就可以了,然后从数据库中获得查询到的结果,搞定!那算法应用在哪里呢?在数据库系统中。那算法性能消耗在哪里呢?也是在数据库系统中。这种情况,我们当然可以不用算法了。但是,随着数据量的增大,如果将这部分性能交给我们“最后底牌”数据库,那我们的优化空间必然非常小了,而且如果我们真的要从关系型数据库切换为非关系型数据库,那改造的成本也会非常的大。那应该怎么做呢?
我们应该将数据的拼装及操作逻辑提取到我们自己的算法中,而针对数据库中数据的查询操作尽量是针对单表少量条件查询的,甚至实现仅需根据id或者ids主键来进行数据的提取操作。这样,耗费性能的数据拼装逻辑就可以由我们去处理了,而性能优化的方式和手段也会有更多的选择,并且如果要执行关系型数据库与非关系型数据库互相切换,也可以对我们的代码逻辑几乎不会有任何影响。
当然,如果从更普适的角度来看,我们平时写的业务代码也是算法,只不过逻辑并没有算法题里面的那么复杂而已。因此,开发语言+框架+算法其实是我们作为程序员日常工作的3大利器,那么,算法还不重要吗?
我常常表达一个自己的观点,就是平时我们跑步、健身是为了让我们身体越来越强壮;而平时每天做几道算法题,是为了让我们的脑子更“强壮”;身体+大脑双重发展,何乐而不为呢?
那么如何提升自己的算法能力呢?数据结构+算法解题大类+每日N题,前两者是在理论上可以提升自己的解题能力,而最后的“每日N题”,则会使你在日积月累中“潜移默化”的达到算法能力从质变到量变的过程,此处引用复利曲线,这条曲线时常的在我要放弃某件事情的时候提醒我,要咬牙坚持下去,否则,前面的努力几近“白废”,只有达到那个飞速发展的点,我们的努力才会得到更大的收益。