【少儿禁】马建《亮出你的舌苔或空空荡荡》

去泰国看了一场“成人秀”,画面尴尬到让人窒息.....

清华大学被实名举报有日本间谍

受贿52.8亿,日日换“新娘”,刚刚,中国“航母之父”总指挥胡问鸣落马!

泽连斯基危险了

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

分享一下最近的娱乐活动(上)

微扰理论 微扰理论 2023-02-10

大家好,我是 「微扰理论」。目前在 hashdata 担任数据库内核研发工程师,感兴趣的同学可以通过文末联系方式找我内推哦。微扰酱也是极客时间专栏 《算法实战高手课》 的作者;欢迎关注。

疫情期间,出门不易,但总还是要想办法“激发创造,丰富生活”。所以,今天微扰酱想来跟大家分享一下自己最近一段时间里沉迷的两个操作简易又颇具乐趣的娱乐活动;相信应该对预防阿尔兹海默症和打发时间有比较大的帮助。

故事是这样开始的

所有的故事一定有一个开始,这两个娱乐活动的发现也不例外。
前些时间,在一段平常的午间闲聊中,我发现了我的leader竟然可以心算5位数间的乘法。在那一刻,我可能和列文虎克第一次用显微镜看到微生物或者伦琴第一次看到闪烁在真空管壁上的蓝白色荧光时共享着同样的情绪,惊奇又困惑。
随即,我就在内心里随机了两个4位数模拟了一下竖式乘法的过程,发现确实是比较困难的;如果试图按照竖式乘法的方式对乘数从右往左逐位计算乘法并在脑海中进行逐行缓存,会发现至少对于我个人来说中间的计算结果很难清晰的留存于脑海中,取而代之的是一个非常模糊的印象。甚至,随着计算的进行,一开始的两个乘数也会变得模糊,从而根本无法进入最终的累计求和阶段。

由于是午餐时间,所以我就没有继续模拟这个过程;当然我也向leader确认了一些细节。比如,他是否是否采用了特殊技巧;运算的时候是否也需要反复重复中间变量以加深印象。前一个答案是,后一个答案是
不过有一点不一样的是,我对数字采用的记忆方式还是相对低效的在脑海中复述声音并记忆的方式,而据我leader所说,他记忆数字的时候则是直接在脑海里有数字本身的印象;具体过程我不能完全理解,但在我简单的调研考证和搜索文献之后,发现确实是普遍存在两种不同的对数字的记忆方式;由于没有查到非常官方的文献,加之无法感同身受,所以我很难严谨的描述两者的差异,可能一种记忆模式被称为 auditory memory ;一种被称为 visual memory 。正常人当然同时拥有两种记忆方式,因为你既可以记忆图像,也可以记忆音乐;但对于诸如一串电话号码这样的信息而言,大家选择记忆的方式却是不同的。
简单来说,对我而言看到数字并记忆和听到数字并记忆似乎没有太大区别,都会被我编码成一段音频记忆在脑海里;而对于另一部分人似乎并不是这样;可见人们不只是悲欢并不相通,记忆的方式也大相径庭。
午间还了解了一些其他的趣闻;比如leader还可以背出200位圆周率,参与了数学高联的集训;感觉确实非常厉害!

那,大受震撼之余,当然要来试图搞清楚 普通人是否可以通过训练实现多位数乘法的快速心算? 如果可以计算和记忆方式是否需要调整? 需要的训练成本有多高? 是否可以将这个能力迁移到其他领域? 对数字的记忆模式是否可以从 auditory memory 迁移到 visual memory ? 等一系列问题。
而解决一切未知问题的有效手段之一就是实验。废话少说,先试起来;于是两个有趣的娱乐活动就此展开。

娱乐活动一:心算多位数间乘法

这项娱乐活动虽然对我来说是未知领域,但对于整个人类文明而言,却早早地就展开了。古往今来,其实许多名人(尤其是数学家)的心算能力都非常好。通常来说,这些人的记忆力也非常不错,毕竟在我不完备的知识储备下,大致可以得出心算能力蕴含记忆能力的结论。比如欧拉视力一直不佳乃至晚年失明,但凭借强悍的心算能力和记忆力,在其儿子和学生的帮助下,失明后依旧得以继续研究数学问题。冯诺伊曼也有秒算无穷级数求和的轶闻;感兴趣的同学可以搜索了解。
有名的人都这么多了,没有机会留名青史而拥有很强心算能力的肯定也不少;于是我又马上搜索了一下当代人的心算能力如何,想为自己的这次实验寻找一些靠谱的benchmark。很快我就搜到了一些心算比赛和相关的吉尼斯纪录;比较广为流传的报道提到吉尼斯心算乘法世界纪录在2021年由一个11岁的小女孩打破,当时的成绩是10分钟内心算12位数间的乘法。
emmm... 似乎?不过,好像也有文章提到,参赛选手普遍有60秒内算出8位数间乘法的能力;这就马上显得很厉害了。🤔🤔🤔 果然,人们只对认知范围内的事物有所判断。
那,有leader的经验在前,我们就先来试试4位数间的乘法吧;毕竟3位数看起来好像确实也不是很难。很可能也是因为4位数间乘法正好处于我的工作记忆的瓶颈,确实并不容易;而两位数乘法在大部分华夏儿女都熟练掌握99乘法表的前提下,确实是没什么难度。

关于工作记忆;在心理学界有一篇非常知名的论文 The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information ;感兴趣的朋友可以自行查阅。大致说的就是人们同时能记住的独立概念(组块)是有限的;通常也就是在 5~9个 范围内。这个其实很符合直觉,比如有人在短时间内连续念若干个不同的无关联的单词,在不采用任何记忆方法的前提下我能记住的也大概就是5-7个的样子,我对身边的人做过测试,实际上最好的成绩和最差的成绩都差不多。这可能也说明了,大部分你觉得很“聪明”的人,和你在工作记忆上的差距也不会怎么显著;所以不用怎么担心这方面天赋差距对你带来的影响。
至于训练是否能提升工作记忆,据我咨询的北大老师说,效果可能不是很显著;不过也有文献说可以提高;就不展开了。

好,那我们就暂定目标为心算4位数间乘法,争取在1分钟之内算出即可。由于目前微扰酱还没有完全达到这个目标,所以今天这篇文章只是分享一下我具体的训练过程和计算方法。
正如我前面提到的,心算乘法对我而言比较困难的地方在于在脑海中模拟竖式乘法的缓存是易失的;也就是如果超过了我的工作记忆容量(working memory capacity)就会被大脑毫不留情地丢弃。当然,我们可能依旧可以回忆出模糊的印象,但其很可能是不正确的。这个和大脑的工作机制有关,就不展开了。那有没有办法更有效的利用我们的工作记忆呢?微扰酱不禁就想起来了 Structure and Interpretation of Computer Programs 中提到的关于递归、栈溢出和阶乘的例子。同样是计算阶乘,两种不同的递归实现,在对计算机栈空间的使用却截然不同;一种是恒定的,另一种则随着阶乘规模变化而变化;而之所以栈空间可以恒定的原因是对于第二种写法而言,可以认为我们其实通过传递参数的变化,将我们所关心的乘法操作累积到了作为参数的状态上,因而我们不再需要保留之前的栈空间,而是直接替换栈空间内的值即可。
而令人惊喜的是,竖式乘法消耗的工作记忆其实是可以类比到SICP的这个例子上的。在传统的计算方式里,我们是用一个乘数的每一位去乘另一个数,然后全部累加。对于4位数间的乘法,就意味着,我们走到最后一步计算之前,最多需要在心里保留4个5位数;然后还要逐位对齐相加;这在没有视觉信息辅助的前提下,显然是反人类的。(当然应该有人可以做到)
那有没有办法减少需要记忆的信息呢?
微扰酱在很快发现了这样计算对工作记忆带来了瓶颈之后就开始思考这个问题,并且也在实验中发现,虽然4位数之间的乘法比较难以计算,但是2位数之间的乘法还是比较好计算的。那有没有办法先把四位数乘法计算转化成若干个两位数乘法计算的和呢?一个简单的想法就慢慢浮现出来。如果我们将每个四位数都拆成两个两位数,这两组四位数之间的乘法,其实就相当于两个100位进制的两位数的乘法,写成竖式大概是这个样子。不过,读者马上就会发现,这样我们依旧需要在脑海里缓存四个数字呀?其实并没有减少记忆量。所以,相比于每次计算完两位数乘法后缓存一个结果,我们选择直接将当前结果与之前记忆好的结果进行累加;在脑海里只保留累加后的结果;这样,显然所需缓存的结果就会大大变少;我们需要时刻记住的内容只包括两个4位数乘数本身、一个目前累积的结果和一组需要计算的两位数乘法的结果。

这里注意另一个需要优化的地方,就是我们计算的时候不再是从低位往高位计算,而是选择从高往低位计算。这是因为人们报数的时候是从高位往低位报的,如果从低位往高位算,我们在脑海里就需要经过两次逆序的过程;这显然是没有必要的。由此方法,微扰酱目前可以在3分钟内完成4位数和4位数乘法的心算,但是正确率还没有很高。相信训练一段时间会有比较显著的提高。另一种计算方式则更加直接一些。相比于模拟竖式乘法,我们直接从高位往低位直接计算出结论的每一位。假设我们令两个四位数分别为:


由小学数学知识,我们知道,结果最高位一定由 产生。结果的第二、三位则会受 的影响,依此类推,我们还需要计算的值包括 、 等等。由于涉及进位,上面的描述并不完全严谨。不过总的来说,我们可以通过逐位交错乘两个乘数的每一位的方法从高到低得到最终结果的每一位数数;整个过程类似于进行多轮卷积,就不展开讲解了。这样也能通过累积结果和丢弃中间值的方式极大的减少工作记忆的负担;因此这似乎也是相关比赛的参赛选手的标准做法,不过由于天赋和训练的原因,对于参赛选手来说,在脑海里调取相关中间变量的速度比我快得多,自然整体计算速度和精度也就比我高出很多个level。 
我的leader小时候也经常刻意抛弃纸笔计算数学问题,从而获得了一个看起来非常厉害的技能,也就机缘巧合地为我最近的生活平添了许多乐趣。

娱乐活动二:盲拧魔方

不知不觉,竟然写了这么多... 限于篇幅和时间有限,第二个娱乐活动盲拧魔方我们下期再更,希望不鸽,这里做个预告。盲拧魔方是一个更有乐趣也看起来更酷炫的活动,并且完全是普通人可以做到的。更妙的是,通过玩魔方能给你一个极好的的例子(但不是阿贝尔群),这显然能帮助你建立更立体具象的的概念;对最近正在阅读 Category Theory for Programmers 的我起到了不小的帮助。

结语

最后,稍微谈一谈这两项娱乐活动除了娱乐之外的其他意义。
本来其实做这两件事情和刷leetcode一样,对我来说都是一种成本低廉的思维游戏而已,除了娱乐之外的意义应该主要就是防止阿尔兹海默症。
不过前两天看到一篇文章,有一些其他感悟,这里稍微提一下。我以为,这件事还能告诉我们对偶的两件事情。
第一,如果别人能做到看起来很厉害而自己想做却做不到的事,不用太过介意,大部分情况下,只是对方掌握了正确的方法而你不知道或者没有深入思考过而已;不用因此变得不自信;在怀疑自己做不到某些事情的时候先多去尝试一下,很多看起来很难的事情可能实际上并没有那么困难。
第二,如果自己能做一些别人做不到的事情也不用沾沾自喜,很可能只不过是因为自己碰巧掌握了一些方法而已(也包括教育资源、环境的不公平等等);故弄玄虚、找优越感甚至因此打击了别人的自信是很愚蠢而恶劣的行为。如果运气好做了足够的训练,掌握了正确的方法,在一些能力上相比于“普通人”有了一些优势,与其卖弄(不过如果是为了赚钱的话也不寒碜)不如拿这些优势去做一些思维层次更高的事情。

微扰酱也正在组织各种「残酷的」学习打卡活动!想来一起组队刷coursera或者leetcode的话可以关注一下公众号菜单中也有微扰酱的联系方式。最后,再次欢迎大家来和我还有我leader一起工作,私信我简历就行。


文章有问题?点此查看未经处理的缓存