最近为了准备笔试,每天总会抽出点打游戏的时间刷刷 leetcode
刷题嘛,无非就是看着题目楞想,每种思路试一试,试不出来看提示,还不行看别人的答案然后学思路再换种语言默写一遍。
那么这个过程到底是在干啥呢?——学习
让我们站在旁观者的角度上审视一下发生了什么。
1,遇到一个问题,第一反应是能不能 一眼看出通解,不行就看能不能 分治 动归,搜索。。。(我会的套路太少,只能拽这几个了 -_-) 这个顺序是根据经验来的,再有就是题目要求和输入本来的性质。如果一直做动归的题,突然来个不是动归的,第一反应可能还是动归,为啥,训练的都是动归的,形成思维定势了(false positive) (本山:"等于二!"范伟:"你刚才不是说三么。。。")
2,确定思路以后,解题最难的就是看出不变量,可是能看出来往往问题已经解出来了。就像用归纳法证明,你首先已经把不变量看出来了,才会去构造那个不变量,而这个不变量往往很难直接看出来的,没有灵感则只能先楞构造,然后看看有没有不变量出现。
也就是大师先看出了答案再写出程序,菜鸡先瞎凑程序然后看能不能凑出答案。
这就是为什么光知道思路是不够的,单说动归,前缀,后缀,中间向两边。构造不变量的 f(x) 可能是最小值,最大值,长度,数量等等等等。看到答案的时候往往只能感叹,我去,递推公式这么简单我怎么就没想到呢。。。
那么大师为什么能成为大师呢?因为他见得多了,脑子里不知怎么的就大概看出了很好的性质。
大师也不是谦虚,你去问他,他是真的不知道怎么就看出来。
因为他的脑子已经训练好了嘛。
所以真的是希望能有这样的专家系统来辅助决策:
1,输入一个算法题,想要的时间复杂度,输出应该用什么思路,可能是用了哪些数据结构
2, 输入一组输入输出,输出可能是通过什么不变量构造出来的
听说 deepcoder 已经能做这方面的事了。https://www.zhihu.com/question/56250357
真希望 编程大师 满地走的时代早日来临啊。
弱鸡如我只能认为,编程就是瞎&#猜,只不过有的人猜的准,猜的优雅,简洁,高性能,可复用而已。
创造力到底是怎么回事我真的不懂,我也不觉得有那种看了就能变聪明的书,因为我不信看某种书就能从根本上改变我脑子的构造。
人生而不平等,有的人脑子训练起来就是快,可能他们神经元连得少吧。
网友评论