广大码农同学们大多都有个共识,认为算法是个硬骨头,很难啃,悲剧的是啃完了还未必有用--除了面试的时候.实际工程中一般都是用现成的模块,一般只需了解算法的目的和时空复杂度即可. 不过话说回来,面试的时候面算法,包括面项目中几乎不大可能用到的算法,其实并不能说是毫无道理的.算法往往是对学习和理解能力的一块试金石,难的都能掌握,往往容易的事情不在话下.志于高者得于中.反之则不成立.另一方面,虽说教科书算法大多数都是那些即便用到也是直接拿模块用的,但不幸的是,我们这群搬砖头的有时候还非得做些发明家的事情:要么是得把算法当白盒加以改进以满足手头的特定需求;要么干脆就是要发明轮子.所以,虽说面试的算法本身未必用得到,但熟悉各种算法的人通常更可能熟悉算法的思想,从而更可能具备这里说的两种能力. 那么,为什么说算法很难呢?这个问题只有两种可能的原因: 算法本身就很难.也就是说,算法这个东西对于人类的大脑来说本身就是个困难的事儿. 讲得太烂. 下面会说明,算法之所以被绝大多数人认为很难,以上两个原因兼具. 我们说算法难的时候,有两种情况:一种是学算法难.第二种是设计算法难.对于前者,大多数人(至少我当年如此)学习算法几乎是在背算法,就跟背菜谱似的("Cookbook"是深受广大码农喜爱的一类书),然而算法和菜谱的区别在于,算法包含的细节复杂度是菜谱的无数倍,算法的问题描述千变万化,逻辑过程百转千回,往往看得人愁肠百结,而相较之下任何菜谱涉及到的基本元素也就那么些(所以程序员肯定都具有成为好厨师的潜力:D)注意,即便你看了算法的证明,某种程度上还是"背"(为什么这么说,后面会详述).我自己遇到新算法基本是会看证明的,但是发现没多久还是会忘掉,这是死记硬背的标准症状.如果你也啃过算法书,我相信很大可能性你会有同感:为什么当时明明懂了,但没多久就忘掉了呢?为什么当时明明非常理解其证明,但没过多久想要自己去证明时却发现怎么都没法补上证明中缺失的一环呢
知其所以然:为什么算法这么难?
最新推荐文章于 2021-04-12 09:30:00 发布