生活中的演算法——37%法則
狄更斯的《雙城記》中第一句話是:
這是最好的時代,也是最壞的時代。
這本首次出版於1859年的書距離我們已經150多年了。如果狄更斯來到今天,我們可以堅定地告訴他:「這是最好的時代,也是最壞的時代。」
因為我們正在從信息時代跨入智能時代。曾經,我們要學習如何操作機器,掌握機器的語言,向機器靠攏。而今天,機器在向人類靠攏,試圖理解人類、用我們的語言與我們對話。這就是「智能時代」,這個時代的基礎是數據和演算法。
我們還沒有經歷過機器在智能上全面超越人類的時代,我們需要在這樣的環境中學會生存。這將是一個讓我們振奮的時代,也是一個給我們帶來空前挑戰的時代。
這兩年,出盡風頭的人工智慧是阿爾法狗。阿爾法狗(AlphaGo)是第一個擊敗人類職業圍棋選手、第一個戰勝圍棋世界冠軍的人工智慧程序,由谷歌(Google)旗下DeepMind公司戴密斯·哈薩比斯領銜的團隊開發。具體到下棋的策略,阿爾法狗裡面有兩個關鍵的技術。
第一個是把棋盤上當前的狀態變成一個獲勝概率的數學模型,這個模型的關鍵是靠大數據訓練(學習)出來的。
第二個是啟發式搜索演算法——蒙特卡洛樹搜索演算法(Monte Carlo Tree Search),這個演算法能將搜索的空間限制在非常有限的範圍內,保證計算機能夠快速找到好的下法。
由此可見,下圍棋這個看似智能型的問題,從本質上講,是一個大數據和演算法的問題。
數據和演算法是驅動智能時代的兩架馬車。「大數據」這個時髦的詞聽得我們耳朵都要長繭了。今天我們不說數據,來談談演算法。
一、演算法是什麼?
演算法在百度百科中的定義如下:
演算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。
一個演算法應該具有以下五個重要的特徵:有窮性:(Finiteness)演算法的有窮性是指演算法必須能在執行有限個步驟之後終止;確切性:(Definiteness)演算法的每一步驟必須有確切的定義;
輸入項:(Input)一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定出了初始條件;輸出項:(Output)一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;可行性:(Effectiveness)演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性)。
是不是越看越迷糊?
簡單說,演算法就是一個解決問題的過程。
這個聽起來高大上的詞,實際上在我們生活中隨處可見,每一天我們都會用到各種演算法,只是你不知道而已。
比如菜譜就是一個演算法。它就是一個飯菜製作的流程,解決我們如何做飯的問題。
按照演算法的定義,菜譜具有演算法的五個特徵。
舉個栗子:
菜譜:拍黃瓜
1、黃瓜洗乾淨。
2、放在案板上,用刀拍開,切小塊。3、蒜切末,花生用刀碾碎。4、黃瓜加入蒜末、花生粒、生抽、芝麻油、香醋,充分攪拌均勻入味,即可。
有窮性:拍黃瓜,有4個步驟
確切性:每個步驟目標明確。
輸入項:黃瓜、蒜、花生、生抽、芝麻油、香醋
輸出項:拍黃瓜這道菜
可行性:每個步驟目標明確,能夠在有限時間內完成。(拍個黃瓜也就5分鐘)
其實,菜譜也好,說明書也好,人生的取捨與選擇也好,商業戰略決策也好,這些都是一種演算法問題。
舉兩個簡單的生活例子。
比如列印一個20頁的文件,需要打2份。
列印出來的文件排序是:「112233445566….2020」。現在你開始分成兩份,正常情況下,你會左一張右一張這樣分成兩摞。實際上有個更簡易的分法:先在左邊分1張,然後右邊分兩張,再左邊分兩張,再右邊分兩張……最後一張分左邊。排序如下:[1,12,23,34,45…1920,20]通過採用演算法的優化,一次兩張的分法,工作量一下減少了一半。
再比如,快速排序演算法。
作為一名有前途的圖書管理員,你需要把還回來的一堆書(比如有100本)按順序入架。你該怎麼做?
傳統的辦法:一本一本書按照序號還回到書架。100本書,你需要跑100次。經過演算法優化的方法:先從這堆書里隨便挑出來一本,把比它號小的扔左邊,比它號大的扔右邊。分成兩堆後,再重複上面的步驟。
從小到大排序後的書,按照書架順序歸類。每個書架跑一次,可能只需要跑10次就完成了。通過採用演算法的優化,工作量能夠減少了一大半。
從以上生活中的例子能看出來,自從人類有文明以來,我們就一直在發明、使用和傳播各種各樣的演算法,用於衣、食、住、行,等等。
上面的例子中演算法雖然有用,但是我們用笨方法也能完成任務。
然而,在人生中,很多時候會面臨選擇的問題。人生沒有回頭路,用笨方法的人往往會「後悔」和「錯過」。尤其是在今天這個智能時代,不掌握點有用的演算法,最好的時代也會變成最壞的時代。
二、有用的37%法則。
我們先來講個故事。
很多人聽過掰玉米這個類似的故事:一片玉米地,你需要從裡面摘選一個棒子最大的玉米。但只能摘一次,而且不能回頭。
你第一次走進玉米地,發現很多很好很大的玉米棒子,很快摘下了你看到的第一個比較大的玉米棒子,然後繼續往前走,然而越走越失望,你沮喪地發現前面還有很多比你手裡的大得多的玉米棒子。但是你已經不能夠選擇了。這種選擇,名字叫「後悔」。你第二次走進玉米地,同樣也發現了很多很好的玉米棒子,但是這一次你吸取「後悔」的教訓——前面一定有更好的。你一直向前走,直到發現自己差不多走出了玉米地。按照規則,你回不去了。就這樣,你錯過了最好的玉米棒子。這種選擇,名字叫「錯過」。
這個問題,其實就是我們面臨的選擇的問題。面對入職、戀愛、機會的誘惑,你往往第一次「後悔」,第二次「錯過」,但是你永遠無法回到過去。
如果你既不想後悔,又不想錯過,那麼什麼樣的心智模式能夠幫助我們做最好的選擇?
數學家歐拉給出一個重要的數字:37%。
對於在玉米地選擇玉米棒子的問題。數學家的策略是,你要把這片玉米地分成兩個階段。
前37%為第一階段。在這個階段,你只看不選,就是認真觀察比較這個階段最大的玉米棒子,記住那個玉米棒子的大小。
等過了37%,進入第二階段。從這個階段開始,你一旦遇到一個比第一階段那個最大的玉米棒子還要大的玉米,或者類似的玉米,就毫不猶豫地選擇它。
分兩個階段這個策略和37%這個數字,是數學家歐拉好不容易算出來的,這實際上是一個隨機選擇優化問題。這個辦法就叫37%規則。
37%的規則並不能保證你一定能選擇到最大的玉米,但是在這片玉米地里,玉米棒子大小是隨機出現的。在這種隨機出現的情況下,它是一個能夠選到一個足夠大玉米的好辦法。從概率的角度來講,如果你看了不到37%的玉米就開始選擇,你將來很可能後悔選早了;如果你看了超過37%的玉米開始選,你將來可能後悔選晚了。
愛學習的你肯定會問,這個數值是如何算出來的。
我們來看求解過程。
假設這片玉米地有N個玉米,數學模型上說,就是先拒掉前面 k 個玉米,不管這些玉米有多大;然後從第 k+1 個玉米開始,一旦看到比之前所有玉米都要大的,就毫不猶豫地選擇它。不難看出,k 的取值很講究,太小了達不到試的效果,太大了又會導致真正可選的餘地不多了。這就變成了一個純數學問題:在玉米總數 n 已知的情況下,當 k 等於何值時,按上述策略選中最大玉米的概率最大?
如何求出最優的 k 值?
對於某個固定的 k,如果最適合的玉米出現在了第 i 個位置,k的概率記作P(k)。
用 x 來表示 k/n 的值,並且假設 n 充分大,則上述公式可以寫成:
對 -x · ln x 求導,並令這個導數為 0,可以解出 x 的最優值,它就是歐拉研究的神秘常數的倒數—— 1/e !
由於 1/e 大約等於 0.37(e ≈2.718281828459),因此這條法則也叫做 37% 法則。
三、演算法與生活,如何在生活中應用37%法則。
現在,你知道了37%法則是你作為一個理性的人在這個不確定的世界中所能做的最佳策略,那麼你可以無怨無悔,沒有那麼多糾結和痛苦了。
比如買房子和擇偶,都可以應用37%法則。
對於買房子,這個問題的條件如下:
你隨機遇到各種房子,但你只打算買一個。
遇到一個房子,如果你買下來,這個房子就是你的。如果你選擇不買,很快別人就會把它買走,你沒有第二次機會。你應該給自己設定一個看房總數的限度,或者一個時間期限。比如在一個月內一定要買到房子。
根據37%法則,將一個月時間分為兩個階段。前11天為第一階段,這個階段只看不買,了解市場上的情況,你喜歡和不喜歡的房子。這個階段你一定要記住你最滿意的房子。
等從第12天開始,你一旦遇到一個比第一階段那個最滿意的房子要好,或者類似的,就要毫不猶豫買下來。
對於擇偶,同樣可以運用37%法則。比如,一個女性從20歲開始找對象,設定的目標是30歲之前結婚,那麼根據37%法則,兩個階段的分割點就在23.7歲。
在20歲到23.7歲之間是觀察期,只交往不結婚,但是必須記住在交往的男生中最喜歡的那一個。23.7歲之後是決策期,一旦遇到一個比那個人還好或者差不多好的男生,就應該選擇和他結婚。
但是對於擇偶,這個數學模型會更複雜,因為假定的是你選擇他,他就必須答應。實際生活中可能不會如此,如果有被拒絕的可能性,那麼分割點就不是37%。
假設被拒絕的可能性是一半,那麼要把37%變成25%。也就是說,條件不好的人要縮短觀察期。
如果你的條件非常好,就算一開始你錯過了一個人,過了一段時間去找他,他還有可能答應你的話,那麼你的觀察期應該延長。假設這個同意的可能性是一半,那麼你可以把觀察期延長到61%。
總的來說,條件好就多等等,不要急於決定;條件差就趕緊行動。數學模型計算的結果,跟我們的常識是相符合的。
這個37%法則,說的是面對一個不確定的世界,在你根本不知道命運會怎樣的情況下,所能採取的最佳策略。
在生活中,很多人就敗在不知道什麼時候停止選擇。理性的人,應該知道什麼時候停止。因為,當選擇之後更重要的是去經營我們的選擇。
在我們這個最好的時代,發展的步伐是無法阻擋的,我們所能做的是掌握一些有用的演算法,用理性精神來面對現實,抓住智能時代的機遇,而不是迴避它、否定它和阻止它。未來的社會,屬於那些具有創意的人,屬於那些理性的人,屬於那些懂得在生活中運用演算法的人。
推薦閱讀:
※某種意義上,數學家就是哲學家
※麥肯錫方法論,讓你成為世界上最聰明的那批人
※銷售KPI制定和管理方法
※序言--論好奇心到」可溯性「原則
※Live:如何在短時間內掌握一項技能(文字版)