我抽了號碼牌,坐在郵局等候區,欣賞這個百看不厭的排隊方式:把全部等候者都放在同一條排隊路徑。傳統上,每個窗口有排一條隊伍,當某窗口遇到一位需要服務很久的客人時,後面客人全部都遭殃,得等到天荒地老。簡單的「全部排成一列」就能避免這個慘劇發生,一位得服務久的客人最多癱瘓一個窗口,其他人依然得以順利前進。
很多人以為抽號碼牌只是體貼客人,不需要罰站,其實排隊效率也因此提升,客戶體驗更好。
這是排隊理論教我們的知識。
※
我們每天在工作、開會、回信、接小孩等各種事情中忙碌,難得偷閒去書店走走,忍不住拿起「時間管理」的書,試圖尋找提升效率的方式,請書本中的大師教我們該怎麼安排行程、怎麼決策,或是更籠統地說,該怎麼做事。
演算法,就是教電腦「該怎麼做事」的方法。
乍看之下,電腦的工作跟人差很多,但就像每個人生活型態不一樣,卻適用同一套時間管理模式,因為經過「抽象化」之後,不管是住在京都的傳統職人、紐約的金融業者,還是正在澳洲打工度假的年輕人,生活都是由一連串任務所構成。電腦每分每秒在執行的各種軟體、運算,也能看成是「任務」。
人與電腦最大的差別在於(讓我們暫時把人工智慧放在一邊),人類有個極具威力的大腦,能讓我們憑直覺處理大多數事情,根據經驗反饋,進一步強化直覺。直覺非常好用,以至於有時候根本不清楚直覺幫我們做了什麼決定,又是怎麼做出來的。
剛開始學寫程式的人應該都會犯「跳過好幾步」的毛病,明明以為這樣寫就好了,看到錯誤訊息才知道自己漏掉變數宣告,或是無意識省略了幾個步驟。人與人溝通時,我們會互相用直覺與經驗幫忙補起這些被省略的部分,但遇到電腦就沒辦法,一定得把事情寫得鉅細靡遺。寫程式就好像教還在牙牙學語的超級英雄,他威力強大,但你得慢慢來,一步步講清楚。
也因此,演算法與演算法的語言,能把事情剖析得非常清楚,考慮到各種不同狀況。比起跟人學習,演算法有時候能讓我們更快學會。舉例來說,打領帶這件事情一度很困擾我,不管看幾次影片,朋友在我面前示範,我都還是像要自殺一樣只會用領帶勒著自己,直到看了《繫領帶的85種方法》(The 85 Ways to Tie a Tie)。書中把領帶移動的方向分成左(left)、右(right)、中(center),再根據把領帶穿進去(in)與拿出來(out),清楚定義了打領帶的六種可能的步驟為:Li、Lo、Ri、Ro、Ci、Co,以Li為例,就是把領帶從左側往裡面穿。再利用這些步驟,就可以定義每一種打領帶的方式,例如簡單的四首結是「Li Ro Li Co」四個步驟,溫莎結是「Li Co Ri Lo Ci Ro Li Co」。是不是比起影片或口語解說要清楚多了?
《繫領帶的85種方法》將打領帶拆解成6個步驟。(圖片來源 / wiki)
這就是打領帶演算法。不只如此,當我們把每一種打領帶的方式都變成一個演算法,你會看到它們只是不同排列組合,運用一些數學工具,你甚至能進一步設計出新的打領帶方式。這就是用演算法表述事情時,讓事情每條肌理都清楚呈現後的威力。
※
只要是電機資工領域的人,對《決斷的演算:預測、分析與好決定的11堂邏輯課》中介紹的演算法必然多少都聽過,可作者就是能以我們不曾想過的角度切入,讓讀者大開眼界。以第二章〈開發與善用〉為例,意思是要評估到底該「開發新事物」,還是「善用現有的事物」,好比在你常去的手搖飲料店附近開了一間新店,你要去嘗試嗎?或是新出了一款飲料,你要換個口味嘗嘗嗎?嘗鮮有可能會付出代價,結果一點都不好喝;可如果不嘗鮮,就不會知道到底有沒有更好喝的飲料。這是一個抉擇,而演算法可以幫助我們做出決定。
讀《決斷的演算》時我很驚訝,原來這樣的決策在生活中出現的頻率如此之高:
- 公司是否該投資研發新產品,還是固守現有的產品線?
- 好萊塢該拍有基本盤的電影續集,還是該拍新電影?(從現在的院線片你就知道答案是什麼了)
- 選舉該給新人一個機會,還是支持連任?
- 該投用新藥做臨床實驗嗎?
- 甚至我戴上耳機決定要聽陳奕迅還是給新人一個機會?
這些背後都是同樣的決策機制。現實生活看起來非常複雜多樣,但表述成數學語言或是演算法,表象被剝掉,我們會發現許多事情背後的道理其實是一樣的。老子云:「當其無,有器之用。」抽象化是讓人們覺得數學無用的主要原因之一,覺得跟現實脫節。其實恰恰相反,正因為不特定跟某一個現實情境連結,一個數學知識,一套演算法,才能廣泛應用在不同領域。
※
演算法的第二個威力是「精準描述」。以本書第一章提到的「最佳停止點」為例,最常見的生活例子是尋找真愛,太早定下來,可能會錯過之後更好的對象,但太晚才定下來,也可能淪為沒得選,其實早就錯過理想對象的窘境。我們大概可以憑直覺想像(或是爸媽的忠告),要先觀望一陣子,長大一點再認真談感情。數學分析可以很精準地告訴你:理想上觀望期應該占據你整個戀愛時期的37%。
不只如此,它還能針對不同情境做分析。比方說剛剛的情境是假設你告白成功率是100%,只限於金城武使用的規則。如果告白有50%的機率被拒絕,你該做的事情就是提早結束觀望期,提早到25%就定下來,如此一來找到真愛的機率是25%;如果再放寬一點,容許你錯過後依然可以回頭告白,但對方一樣有50%的機率拒絕,則定下來的時間點可以延後到61%,找到真愛的機率也是61%。最後,如果你對於找到真愛沒有太大興趣,只想找一位身價一億元的對象,有了這麼清楚、可以量化的目標,在完美資訊下,找到的機率提升為58%。
剛剛講的這幾種狀況,你的直覺應該都能認同我們採取的對應策略,有些得提前定下來,有些可以延後。可是一定得依賴嚴謹的數學推理,建構對應的演算法,你才能得到每一個精確的數字。
※
《決斷的演算》這本書可以有好幾種不同的閱讀方式:
如果你剛好在電機、資工領域,讀這本書能讓你利用生活經驗,更加了解幾項重要的演算法與設計演算法的邏輯。以我自己來說,我想將本書做為每一位進入我實驗室的新生禮物。
如果你跟電腦科學沒有直接工作或學術上的關聯,只是純粹想了解有沒有什麼方法,能幫助我們的日常生活過得更有效率,在決策時有所依循,那同樣很適合閱讀這本書。
請記得,我們其實不是在跟演算法或電腦學習,而是跟偉大的科學家、數學家學習。在過去,這些天才腦袋只對有幾個質數,或為什麼蘋果會從樹上掉下來這些純粹數學、物理現象有興趣。由於電腦的發明,他們之中的一部分才開始關心「怎樣才是做事的好方法」,澈底發揮理性思維,設計演算法,教電腦如何預測、分析、做決定。
和電腦一起當學生,跟著科學家和數學家學習吧。
作者簡介
延伸閱讀
回文章列表