我特別喜歡一部電影叫《模仿游戲》,一個是因為它是卷福演的(喜歡卷福的請舉手),一個是我就愛看跟geek(極客)、nerd(書呆子)有關(guān)的電影,有親切感,哈哈,別問我為什么……??當(dāng)然,還因為它里面的情節(jié),曾經(jīng)帶給我很大的啟發(fā)。
《模仿游戲》講的是阿蘭·圖靈的故事。
二戰(zhàn)期間,圖靈在英國密碼破譯中心——布萊切利工作,他的工作是破譯德國著名的密碼系統(tǒng)Enigma。
這套系統(tǒng)是怎么工作的呢?
Enigma有一個密碼機(jī),德國人可以對它進(jìn)行設(shè)定,比如用字母A代表字母B,字母C來代表字母D。這樣,所有重要的信息通過密碼機(jī),輸出之后,就變成了看不懂的亂碼,即使攔截到了這些信息也沒有用,必須破解密碼設(shè)置,才能讀懂這些亂碼。
德國人每天在半夜準(zhǔn)時更改密碼設(shè)置,英國人早上6點(diǎn)可以攔截到第一條信息,這意味著在密碼設(shè)置改變之前,圖靈每天都有18個小時來破解。午夜十二點(diǎn)一過,就像灰姑娘一樣,一切歸零。
這些密碼有一萬億種可能的組合,如果用人工來計算,需要2000萬年。圖靈設(shè)計了一臺計算機(jī)來計算。但是,對于那時候的計算機(jī)來說,它也無法用這么短的時間處理這么龐大的計算。
事情的轉(zhuǎn)機(jī)是因為圖靈的靈光一閃。
他發(fā)現(xiàn)每天早上德軍都會發(fā)出一條天氣預(yù)報,每天的天氣預(yù)報里面都一定會出現(xiàn)三個不變的詞語:天氣、希特勒、萬歲。
也就是說,電腦只需要根據(jù)這三個詞語,就能推導(dǎo)出當(dāng)天的密碼設(shè)置。
一個如此龐大復(fù)雜的問題,竟然可以從如此簡單的角度去思考、破解!
簡化問題的思維,無論是在數(shù)學(xué)、編程,亦或是我們工作、生活中解決實(shí)際問題,都非常有用。
可是,要怎么樣才能化繁為簡、簡化問題呢?
今天就來聊聊,我們可以從哪些角度來進(jìn)行這樣的思考。
去除干擾信息
把重要的東西抽出來思考
來說個妞爸的例子吧。
妞爸做的工作,簡單來說,就是用世界上的幾大望遠(yuǎn)鏡來尋找太空里的一種特定的星體——脈沖星,他是第一個用圖像識別的方式,讓電腦代替人工來進(jìn)行判斷的。
剛聽說的時候我覺得很不可思議。
太空里有成千上萬種不同種類的星星,而每種星星有那么多的特質(zhì):大小、重量、亮度、溫度、物質(zhì)的構(gòu)成、離地球的距離……等等等等,即使是科學(xué)家要做判斷也不容易,電腦怎么才能通過看幾張圖,就判斷它是不是我們要找的脈沖星呢?
妞爸說,盡管星星的特質(zhì)很多,但是去除掉干擾信息,只看那些最特別、最重要的信息,就變得簡單了——脈沖星會發(fā)出一束一束的電磁脈沖,就像一個個沖擊波一樣,望遠(yuǎn)鏡接收到的這些電磁脈沖,生成圖像,就像這樣,是一個一個的小山峰。
而其它種類的星體生成的圖像,沒有這些特別的小山峰,就像這樣:
這樣一來,電腦只需要根據(jù)這些小山峰來進(jìn)行判斷,就能知道它是不是一顆脈沖星了。化繁為簡,這和阿蘭·圖靈的故事是相通的。
這再次說明,學(xué)編程語言只是掌握工具,更重要的是解決問題的思路。
再舉一個例子。
這個例子還是來自于我在之前的編程思維文章里多次提到的日本科普教育短片《Texico》。
里邊有一個六條腿的紙人,在做著各種復(fù)雜的腿部運(yùn)動。
這些看起來雜亂無章的動作,居然是有規(guī)律的。你能看出它的規(guī)律嗎?
好像有點(diǎn)難。
現(xiàn)在,我們來試著把干擾信息去掉,只把最重要的信息抽出來思考——不看紙人的身體,只看這幾條腿和桌子接觸的點(diǎn)的運(yùn)動軌跡。也就是只看下圖中右邊的這些點(diǎn)。
現(xiàn)在,是不是看起來清晰很多了?
再把這個運(yùn)動軌跡進(jìn)行一點(diǎn)抽象,也許,我們能用一些幾何形狀來代替?
沒錯,這是兩個三角形的6個頂點(diǎn)。
去除干擾信息——抽象概括,我們就找到它的規(guī)律了。
在數(shù)學(xué)和編程里,常常會需要進(jìn)行這樣的抽象概括,用一個公式,或者一些幾何形狀,來總結(jié)一個現(xiàn)象或規(guī)律。其實(shí)數(shù)學(xué)和計算機(jī),就是人類的這種抽象概括思維發(fā)展到極致的結(jié)果。
妞爸曾經(jīng)給我出過一道經(jīng)典的奧數(shù)題,這道題目是這樣的:
甲、乙二人相對而行,他們相距10千米。甲每小時走3千米,乙每小時走2千米。甲帶著一條狗,狗每小時跑5千米。
我第一次看到這道題的時候直接掉坑里:先計算狗碰到乙的時候跑了多少路,再算它跑回甲身邊跑了多少路程……這樣來來回回的計算,直接把自己算懵圈,太復(fù)雜了吧!
而事實(shí)上,解這道奧數(shù)題,只要想想題目里不變的元素是什么,它就變得特別簡單。
不變的是什么呢?
是無論這條狗的運(yùn)動軌跡是怎么樣的,S形、X形、Y形,哪怕麻花形也好,路程永遠(yuǎn)等于:時間??速度。只要你知道狗跑的時間和速度,其它的信息都是干擾信息,不必管。
而在這道題里,速度是不變并且已知的,時間是可以計算出來的,簡單吧? 快來留言里告訴我答案
妞爸說,解奧數(shù)題,還有今后的物理、化學(xué)等等學(xué)科的學(xué)習(xí)中,尋找不變因素,都是非常非常重要、非常非常關(guān)鍵的一種思維。
很多奧數(shù)題,里面大量的信息都是干擾信息,只要你找到不變因素和不變量,就能根據(jù)它列出等式,把題目簡化,迅速解出答案。
物理、化學(xué)也是如此,找到守恒的能量和物質(zhì)就能列出等式。
當(dāng)時妞爸講完,我的一大感受是:這就是學(xué)霸思維,只有真正征戰(zhàn)過奧賽,只有把題目做透了,去思考、總結(jié)其中的思維方法,才能分享這樣的經(jīng)驗和心得。有時看著網(wǎng)上那些假名師講奧數(shù)題,心里都會很無語。
好了,這么關(guān)鍵的思路都分享出來了,感覺我又在給妞妞培養(yǎng)未來的競爭對手了……
最后,把我們的幾篇寫編程思維的文章再貼出來大家復(fù)習(xí)一下。
關(guān)于什么才是真正的編程思維??
《糾結(jié)要不要給孩子學(xué)編程?糾結(jié)怎么選?先搞懂這個問題,你心里才能有答案》
關(guān)于編程的核心思維方法:分解和分類??
《刷100道奧數(shù)題,不如學(xué)會這道邏輯題和它的思考方法,這才是數(shù)學(xué)和編程的通關(guān)密碼》
關(guān)于編程的核心思維方法:效率第一,發(fā)現(xiàn)并整合規(guī)律??
《這兩道題,曾經(jīng)像一道光照亮了我,給了我最重要的底層能力》
加上今天說到的簡化問題、抽象概括,我們就把編程思維里最最重要的核心思維方法都說到了。
這些思維方法,可能有些燒腦,但非常重要。它可以說是數(shù)學(xué)思維,也可以說是編程思維,還可以說是解決問題的思維。其實(shí)我們?nèi)粘I罾锖芏鄾Q定很艱難,也是因為信息太冗雜,如果,你只思考最最重要的那一兩個點(diǎn),決定就會變得簡單起來。
希望這些,會成為孩子們思維里的一束光。
*快速了解帝呱呱星球,可以點(diǎn)擊下方專輯哦~
聯(lián)系客服