代码,算法能够背诵吗?(转载自知乎上的回答)

做者:覃超连接:https://www.zhihu.com/question/30501748/answer/48551717来源:知乎著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

能够,并且我也有背诵。面试

从中学时候学的全排列和各类排序算法还有高精度运算,我尝试过理解去写,可是临考竞赛前,我都是死记硬背。(实话实说)把这些算法的代码骨架在纸上默写了好多遍,而后去Online Judge上去作几个使用到此类算法的题目。我可能算天赋比较差的,我见过旁边的确有一些牛人好像是看了几眼就能领悟而后熟记于心的。在ACM-ICPC上,咱们队总结出来常考的一些算法类型,把他们分工好,就各自去狂背。有些实在太复杂背不下来的(好比网络流),打印出来厚厚一叠A4纸带入比赛场。当时还和集训队里的人戏称:想要比赛好,先要带的多!-_- 在到留学时,CMU算法期末考试还有Facebook的面试,我都有大量的背诵和重复性的习题练习在里面。算法

更加剧要的是得到比较好的记忆效果:每一个人可能不同。我我的是在纸上写比较容易记住,不论是流程,计划甚至是程序。因此一些重要的东西,我不在电脑上打而是写在纸上。另外最近看到Elon Musk的建议,我以为很不错(我以前重点学习他,是由于他做为一个创业者,在Paypal,电动汽车,轨道交通,太阳能光伏,火箭,太空移民方面都有涉猎,很可怕的一个全能手。) 他在Ask Me Anything上面有建议:
One bit of advice: it is important to view knowledge as sort of a semantic tree -- make sure you understand the fundamental principles, ie the trunk and big branches, before you get into the leaves/details or there is nothing for them to hang on to."

知识的体系结构相似一棵树, 若是你想要学得快记得牢固, 就必须把主干和粗线条先学习扎实, 由于后来的高级知识相似树叶, 须要有主干的支持才能挂靠牢固.

关于Elon在Ask me anything的详细内容能够看: Elon Musk的你问我答 - QC帝国兴亡史-FB,扎克伯格,创业 - 知乎专栏
 

当年搞OI时有几个不容易理解的算法,扩展欧几里得展转相除, kmp,二分图匹配的Hopcroft-Karp...我都是硬背的。
可是每次题目考到相应的东西都作不出来,一是记性太差,二是压根看不出来考的是这个算法。网络

后来发现最有效的方法是推导,
”字符串匹配问题“ -> "n^2暴力枚举" -> "重复枚举的部分能够优化" -> "用pre[x]记录前缀x的最长可重用后缀" -> "推出pre的计算方法" -> "实现代码” (基本就是当年Knuth的心路历程)
只有实现了这个从问题到算法到代码的过程才算记住了。数据结构

固然,数据结构和网络流之类的仍是背吧,实现细节差一点效率差太多了,我能够在纸上默写dinic。
做者:莫涛连接:https://www.zhihu.com/question/30501748/answer/48415644来源:知乎著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
 
 
做者:牛肉豆腐干连接:https://www.zhihu.com/question/30501748/answer/48375881来源:知乎著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

谢邀:
结论写在前面:没入门的话,能够看基础的书,其中的重要算法多看几遍并按本身的理解写出来,并调试。入了门以后,就去作作题目,写写代码,想一想数学原理就能够了。用到的时候再看看书。学习

-----------------详细分析---------------
就比如,英文单词,congratulation这种词,有些人(英语教育不好的地区)就会用c o n g r a t u l a t i o n这种形式去背,效果不好,其实正确的背诵方法是按音节去背。。。更加高级的招式是按词根去背,更加牛的招式是去美国,用多了,天然就能拼写出来了。。。
1.若是一堆代码给你,你按纯文本的方式去背的话,会很累,很容易错,并且没有和含义联系在一块儿。若是你明白每一块的意思,那么,就能够记住几块意思,而后,用到的时候临时“拼写”出来。伪代码干的就是这个事,作了一个抽象,辅助记忆。。。
2.能够对应单词的词根记忆法,就是说分类,好比排序类的算法,一大片的记忆,通常的算法书也大抵是这么个结构,相关类型的算法放在一块儿。
3.用多了或者创造过,尝试本身去解决问题,而后经历探索以后记住了。好比有一个算法问题,而后你去尝试解决,你一开始没有思路,但经过本身就解决了,那么你极可能摸索出了和答案同样的算法(至关于你把当年算法发现者的步骤走了一遍,固然不排除你发现了一个新的,几率很低),若是你解决不掉,但经过查阅资料解决了,也会加深印象的。若是这个问题你一开始就有思路,而且很熟练了,写不写就看心情和时间了。
因此没入门的时候:能够按1,2的方式,读一本入门书,按类别记忆并拼写调试几个基础算法。。入了门就用3的方式。
 
 
 
 
以上内容均转载自知乎: https://www.zhihu.com/question/30501748
相关文章
相关标签/搜索