我特别喜欢一部电影叫《模仿游戏》,一个是因为它是卷福演的(喜欢卷福的请举手),一个是我就爱看跟geek(极客)、nerd(书呆子)有关的电影,有亲切感,哈哈,别问我为什么……当然,还因为它里面的情节,曾经带给我很大的启发。
《模仿游戏》讲的是阿兰·图灵的故事。
二战期间,图灵在英国密码破译中心——布莱切利工作,他的工作是破译德国著名的密码系统Enigma。
这套系统是怎么工作的呢?
Enigma有一个密码机,德国人可以对它进行设定,比如用字母A代表字母B,字母C来代表字母D。这样,所有重要的信息通过密码机,输出之后,就变成了看不懂的乱码,即使拦截到了这些信息也没有用,必须破解密码设置,才能读懂这些乱码。
德国人每天在半夜准时更改密码设置,英国人早上6点可以拦截到第一条信息,这意味着在密码设置改变之前,图灵每天都有18个小时来破解。午夜十二点一过,就像灰姑娘一样,一切归零。
这些密码有一万亿种可能的组合,如果用人工来计算,需要2000万年。图灵设计了一台计算机来计算。但是,对于那时候的计算机来说,它也无法用这么短的时间处理这么庞大的计算。
事情的转机是因为图灵的灵光一闪。
他发现每天早上德军都会发出一条天气预报,每天的天气预报里面都一定会出现三个不变的词语:天气、希特勒、万岁。
也就是说,电脑只需要根据这三个词语,就能推导出当天的密码设置。
一个如此庞大复杂的问题,竟然可以从如此简单的角度去思考、破解!
简化问题的思维,无论是在数学、编程,亦或是我们工作、生活中解决实际问题,都非常有用。
可是,要怎么样才能化繁为简、简化问题呢?
今天就来聊聊,我们可以从哪些角度来进行这样的思考。
一、去除干扰信息,把重要的东西抽出来思考
来说个妞爸的例子吧。
妞爸做的工作,简单来说,就是用世界上的几大望远镜来寻找太空里的一种特定的星体——脉冲星,他是第一个用图像识别的方式,让电脑代替人工来进行判断的。
刚听说的时候我觉得很不可思议。
太空里有成千上万种不同种类的星星,而每种星星有那么多的特质:大小、重量、亮度、温度、物质的构成、离地球的距离……等等等等,即使是科学家要做判断也不容易,电脑怎么才能通过看几张图,就判断它是不是我们要找的脉冲星呢?
妞爸说,尽管星星的特质很多,但是去除掉干扰信息,只看那些最特别、最重要的信息,就变得简单了——脉冲星会发出一束一束的电磁脉冲,就像一个个冲击波一样,望远镜接收到的这些电磁脉冲,生成图像,就像这样,是一个一个的小山峰。z
而其它种类的星体生成的图像,没有这些特别的小山峰,就像这样:
这样一来,电脑只需要根据这些小山峰来进行判断,就能知道它是不是一颗脉冲星了。化繁为简,这和阿兰·图灵的故事是相通的。
这再次说明,学编程语言只是掌握工具,更重要的是解决问题的思路。
再举一个例子。
这个例子还是来自于我在之前的编程思维文章里多次提到的日本科普教育短片《Texico》。
里边有一个六条腿的纸人,在做着各种复杂的腿部运动。
这些看起来杂乱无章的动作,居然是有规律的。你能看出它的规律吗?
好像有点难。
现在,我们来试着把干扰信息去掉,只把最重要的信息抽出来思考——不看纸人的身体,只看这几条腿和桌子接触的点的运动轨迹。也就是只看下图中右边的这些点。
现在,是不是看起来清晰很多了?
再把这个运动轨迹进行一点抽象,也许,我们能用一些几何形状来代替?
没错,这是两个三角形的6个顶点。
去除干扰信息——抽象概括,我们就找到它的规律了。
在数学和编程里,常常会需要进行这样的抽象概括,用一个公式,或者一些几何形状,来总结一个现象或规律。其实数学和计算机,就是人类的这种抽象概括思维发展到极致的结果。
二、寻找不变因素
妞爸曾经给我出过一道经典的奥数题,这道题目是这样的:
甲、乙二人相对而行,他们相距10千米。甲每小时走3千米,乙每小时走2千米。甲带着一条狗,狗每小时跑5千米。
狗和甲一起出发,因为它跑的比甲快,当小狗碰到乙的时候它就掉头向甲跑去,碰到甲的时候又掉头再跑向乙,问当甲、乙两人相遇时,这条狗一共跑了多少千米?
我第一次看到这道题的时候直接掉坑里:先计算狗碰到乙的时候跑了多少路,再算它跑回甲身边跑了多少路程……这样来来回回的计算,直接把自己算懵圈,太复杂了吧!
而事实上,解这道奥数题,只要想想题目里不变的元素是什么,它就变得特别简单。
不变的是什么呢?
是无论这条狗的运动轨迹是怎么样的,S形、X形、Y形,哪怕麻花形也好,路程永远等于:时间速度。只要你知道狗跑的时间和速度,其它的信息都是干扰信息,不必管。
而在这道题里,速度是不变并且已知的,时间是可以计算出来的,简单吧? 快来留言里告诉我答案~
妞爸说,解奥数题,还有今后的物理、化学等等学科的学习中,寻找不变因素,都是非常非常重要、非常非常关键的一种思维。
很多奥数题,里面大量的信息都是干扰信息,只要你找到不变因素和不变量,就能根据它列出等式,把题目简化,迅速解出答案。
物理、化学也是如此,找到守恒的能量和物质就能列出等式。
当时妞爸讲完,我的一大感受是:这就是学霸思维,只有真正征战过奥赛,只有把题目做透了,去思考、总结其中的思维方法,才能分享这样的经验和心得。有时看着网上那些假名师讲奥数题,心里都会很无语。
好了,这么关键的思路都分享出来了,感觉我又在给妞妞培养未来的竞争对手了……
至此,我们已经写过几篇关于编程思维的文章了,大家感兴趣的话,可以往前翻翻阅读一下。
这些思维方法,可能有些烧脑,但非常重要。它可以说是数学思维,也可以说是编程思维,还可以说是解决问题的思维。其实我们日常生活里很多决定很艰难,也是因为信息太冗杂,如果,你只思考最最重要的那一两个点,决定就会变得简单起来。
希望这些,会成为孩子们思维里的一束光。
谢谢你关注帝呱呱星球,这里有传说中的海淀、顺义妈妈。因为地域和工作的原因,我们得以接触优质的教育资源和先进的育儿理念,希望和你分享鸡娃时代里不一样的育儿新认知、帝都新生活。