算法与人脑漫谈

Posted talk.push

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法与人脑漫谈相关的知识,希望对你有一定的参考价值。

Mark:标记、收藏
Remark:觉察、评论、注意
Remarkable:卓越的、非凡的、值得注意的

上边三个单词让你有什么感觉❓
最近看到吴伯凡的认知方法论里写过一段话,他说:“信息和知识点在我们的头脑中只有两种命运:要么放进你越来越完善和细致的一个个格子里,进行‘收编性存储’或者‘提取性存储’;要么就是找不到自己的位置(格子),会被驱逐或者自讨没趣,最终消失”。
看了这段之后有点醍醐灌顶之感,一直以来包括在上学时期,我都一直觉得只要勤奋努力学习,自然能取得好的成绩。这在学校中的确行之有效,但毕业后的职场中这一点仿佛失去了作用,符合这一点的人貌似都只是非常普通的一个搬砖工。其实并不是,勤奋努力永远是一个人成功的基础。但光有这一点远远不够,还要各种因素具备才能成功,这不就是一道算法题吗?为了不让话题跑偏,我还是回到思维上来。
坚持每天的学习已经成了习惯,但那些学来的东西久久不用就一再忘记,就这样忘了就学,学了再忘,重复了这么几年。有些东西的确记得会更加牢固了,但有些东西不是单纯靠记忆就能掌握的,比如算法。有的时候经常会产生这样的感受------为什么曾经刷过的题,再刷就写不出来了。这个问题似乎不需要思考,就连老婆都说:“就跟做数学题一样,时间长了不会做很正常啊!”。但我觉得不然,我并不是完全忘记,反而对数据结构记得很清楚,难道数组、链表这些简单的结构还会忘记吗?所以,一定是思维这里除了问题。
我曾困惑的第一个问题,就是:

既然我都掌握了数据结构的特点,为什么我不能根据这个特点去发散思维找到问题的解呢?

我也问过一些刷过LeetCode很多题的伙伴,见过最正式的回答是:“在不失一般性的情况下,算法就是数学建模的过程”。算法既然是数学模型,那一定就不是走直线那么简单了,算法的求解过程一定还需要各种条件同时完备,配合一起执行方能得到最后的解。就跟导演一部电影,导演就在做算法题目,他协调各种资源、准备各种道具、剪辑拼合影片等等工作之后,电影才能和观众在电影院见面。再举个栗子,判断链表是否有环。这个问题的解法中有一个slow指针和fast指针的方法,通过slow指针和fast指针的往前移动,通过最终相遇来判断链表是否有环。不得不说真的很巧妙,也不知道是哪个哥们想出来的方法。详细步骤参考我的博文:判断一个单链表是否有环
可见,算法根本就不是单纯的逻辑推理,所以我根本不能只根据数据结构的特点就想出问题解法。数据结构的特点可以引出无数支持的操作,很难在杂乱无章的操作里找出你要的操作。这不是锤子🔨可以敲钉子,也可以敲你的头这么简单!

我的第二个疑问:

什么样的学习才是有效的?

这个问题按照文章开头吴伯凡老师说的“存储”和“提取”的关系来回答。
他在文章里还写了,不过这是尼采说的话:“只发生一次的就等于从来没有发生”。
解释是:第二次发生的时候,你再度收藏其实也是一种提取:把眼前的信息知识或者跟你以前的存储进行某种关联,这是一个提取的过程;经过反复提取,你的头脑中就会变得非常的醒目,在你的意识中就建立了一种高带宽的专线连接,你对这个信息和知识就能达到福尔摩斯那样的瞬间提取的状态。通过提取的存储是最好的存储
所以,在学习算法的时候,还是需要在存储了思路的的前提下,不断提取来存储,通过反复练习直到可以瞬间提取。跟肌肉记忆一样,每次的练习都是一次测试和校验,也是每次的存储和提起,直到某天随手一扔就可以把🏀篮球投进。

算法就是类似九九乘法表,要背住常见问题的算法解法,要O(1)的记住。

以上是关于算法与人脑漫谈的主要内容,如果未能解决你的问题,请参考以下文章

打分排序系统漫谈2 - 点赞量?点赞率?! 置信区间!

漫谈认证与授权

如何通过Python进行深度学习?

漫谈响应式编程

07丨什么是人脑最优缓存策略?

前端与算法 leetcode 344. 反转字符串