【現代人必備思維】「演算法」思考模式如何增強問題解決能力?

【我們為什麼挑選這本書】你我生活充滿著演算法。Spotify 用演算法找歌給你聽,Youtube 用演算法找影片給你看,Facebook 用演算法找文章給你讀。

然而,你不知道的是你也可以利用演算法過生活,轉換你的思考原則過一個更確實、更有創意活力的生活。(責任編輯:陳伯安)

「你是個電影明星嗎?」不是

無論你是否想出了答案,我都可以向你保證,只要我們問一個不同的問題,你就會知道那問題是正確的。

讓我們來玩玩「二十個問題」這個童年遊戲:我想像我是某個名人,由你來問我各種問題,然後試著猜出我是誰。轉折在於我只能用是或不是來回答問題。和朋友玩一次這遊戲,思考一下你在猜測時會問什麼問題,如此來看看遊戲可能進行的方向。

「你是女的嗎?」不是

「你還活著嗎?」不是

「你是個電影明星嗎?」不是

「你來自英國嗎?」是的

「你是個作家嗎?」是的

「你活在二十世紀嗎?」不是

「你活在十九世紀嗎?」不是

「你是莎士比亞嗎?」是的

這個遊戲時,你可能會提出類似的問題。你不太可能會從提問「你是亞里斯多德嗎?」「你是詹姆士.龐德嗎?」「你是居禮夫人嗎?」這樣的問題開始,若用這種方式提問,你可能永遠也沒辦法在二十個問題之內得到答案。你只有在最後,你已經很確定答案時(就像例子中那樣)才會提出這種問題。相反地,你可能會先提出「你是女的嗎?」之類的問題。

為第一個問題,為什麼這是個好問題呢?這是因為無論答案為何,它都排除了另一半的可能性。如果你提問的是「你是女王嗎?」這樣的問題,若你剛好對了,你可以排除掉百萬種以上的可能性,但如果你是錯的(這種可能性較大),你就只排除掉一人。

換句話說,提出這樣的問題得要有中樂透的運氣,才能玩得好這個遊戲。所以,玩「二十個問題」的秘訣在於,無論答案是什麼,你每一次都要提出能排除一半人選的問題。

演算法可以破解「二十個問題」

提出這種二分法的問題,比每次只提出一個人名好上許多,但有多好呢?假設一開始我想的是一百萬人中的一個人,那麼透過每次提問來排除掉一半的人,總共需要幾個問題呢?

在提出一個問題後,人選只剩下五十萬人;兩個問題後,變成二十五萬人;在提出十個問題後,人選只剩下原本一百萬人當中的一千人了。持續進行下去……之後每再一個問題分別會剩下五百人、二百五十人、一百二十五人……,而在第二十個問題時,只剩下一個可能人選。

因此,如果你每次都能提出完美的二分法問題,你一定可以贏得這個遊戲。你永遠都可以在二十個問題裡猜出答案。

這全都是演算法思考。我們一直在試著找出一個能玩「二十個問題」遊戲的演算法,雖然我們尚未想出一套完整的演算法,但我們確實已想出提出問題的方法。當你玩這遊戲時,這就是你的問題了。

我們在此使用了另一個計算思考的技法:拆解(Decomposition)。我們將問題切(拆解)成不同部分,好讓我們能分別專注處理每一個小問題。我們已經想出整體的策略;至於要想出能排除半數人選的問題,則是另一個不同的問題。

拆解是個常見的解決問題策略,也是電腦科學家的一個必要工具。電腦科學家在寫程式或設計處理器(好比你筆電或電腦中的那種)時要解決的問題,數量往往十分龐大。 現代電腦晶片比起整個地球的道路網絡還更複雜,可想而知想要一次就設計完成有多困難。只有把它拆解成你可以分別處理的元件,才有可能完成工作的一天。

拆解仰賴的是抽象化,即將細節藏起來。此處,我們將所要提出的確切問題這種細節隱藏起來,只思考該問的問題類型。我們前面在思考我們的演算法效率有多高時,也使用到了拆解。我們將寫完整本作品所需的時間這問題,拆解成溝通單一字母所需的時間,以及將結果轉化為寫完整本書所需時間這兩個問題。

用字母當例子來簡化一下吧

所以,在提出正確問題的前提下,最糟情況只需詢問二十個問題,就能從一百萬個可能性中找出我在想的那個人。

將上述遊戲與從二十六個字母中找出病患所想的那個字母平均需要十三個問題(最糟情況是二十六個問題)做比較,我們就會發現,當我們問「是 A 嗎?是 B 嗎?」時,我們所做的事等於是在問「你是米老鼠嗎?」「你是尼爾森.曼德拉嗎?」你在試著從許多事中找出我在想的那一個人,一模一樣。再一次,它本質上的確是一樣的問題,就像聯想字詞一樣!

如果這本質上和找出一個人正在想的字母是一樣的問題,那麼很明顯地,同樣的策略能給我們比之前所想到的種種解決方法,都還要好的解答。此處我們再次使用到了模式比對及通化。我們正在轉變問題,好再次使用過去已經得到的解。那麼,我們的排除半數解決方案使用在字母上,會是怎樣的對應方式呢?

我們一開始可以問「這是一個母音嗎?」但剩下來的四個問題該問些什麼呢。既然我們每一次都需要排除半數的字母,那麼第一個問題顯然會是「這是一個在 A 到 M 之間的字母嗎?」如果答案是「是」,那麼我們再問「這是一個在 A 到 F 之間的字母嗎?」如果答案是「否」,那麼我們就改問「這是一個在 N 和 S 之間的字母嗎?」以此類推。

這樣一來,我們就一定能在五個問題內得到那人心裡想的字母。從頂端開始,根據已知的是╱否問題一路向下走。在最糟的情況下,你也永遠會在五個問題後得到一個字母。 這就是演算法思考的另一部分。

而在可能出現混淆狀況時,我們則需確保雙方同意一致的細節,比如當我們說「這是一個在 A 到 M 之間的字母嗎」時,我們需要清楚知道,我們是否有把字母 M 包括進來(我們有)。

我們甚至可以使用頻率分析技巧,來進一步改善這個解。舉例來說,在二十六個字母中,我們可以用比五個問題更快的方式得出字母 E 以及其他常用的幾個字母。

你可以試試看,設計出一個能做到這件事的決策樹;我們也可以使用聯想字詞的技巧,來猜測只拼了一部分的單字。我們從早先的演算法所得到的解決方案,仍然適用於此處;我們再次重新使用了過去的解決方案。

我們喜歡「模式」,因為「模式」幫著我們活下去

有多少次你抬頭仰望夏日晴空中的雲朵,在雲中發現了胖嘟嘟的動物?或是有多少次你在早餐盤裡新鮮的炒蛋中,發現某個電影明星的臉正在盯著你看?這兩個都是我們大腦嘗試從周遭世界尋找模式的例子。

在這些例子中,我們的大腦只是在尋找隨機出現的模式,但我們的大腦還發現其他更為重要的模式——它們甚至能夠幫助我們活下去。

尋找並預測模式,無疑是我們大腦的主要工作,包括嘗試找尋視覺模式讓我們看見物體,或是尋找聽覺模式讓我們聽見聲音。其他模式還包含我們做出的決策、採取的行動等等。

這些決定的基礎,來自我們對於之前發生過的事所擁有的經驗模式。我們喜歡模式;模式讓我們覺得舒服。舉例來説,電視新聞按照固定模式進行:它會告訴我們接下來發生什麼事,接著展示新聞,然後再次提醒我們剛剛播了什麼——這就是我們在觀看電視新聞時經驗到的三個階段。

文學中也充滿了我們喜歡並熟悉的模式。單一神話(monomyth)是作家暨神話學家約瑟夫.坎伯(Joseph Campbell)於 1949 年提出的概念,指出所有英雄的旅程都遵循一個類似的模式,而這模式反覆出現在現今及歷史上的許多故事及電影中。這模式包含一個踏上探險路程的人、他面對了一個主要挑戰、他克服了挑戰、最後以改頭換面之姿回到故鄉。

這模式具備戲劇的三段式結構,即起始、中段及結論,出現在荷馬的史詩《奧迪賽》、大部分莎劇,以及托爾金的《魔戒》中。它也是《星際大戰》及《法櫃奇兵》等電影的基礎。這模式似乎提供故事堅實的架構,因此我們覺得這些故事很有趣、容易瞭解,並且令人感到滿足。

世界不缺少「模式」,只缺少發現

我們已看到模式比對也是計算思考的核心之一,被使用在觀察抽象化及通化上,藉此找出產生式規則並選擇合適的表示法。電腦科學家對尋找及預測模式的最佳理解方式深感興趣,因此將計算思考應用在發明模式比對最好的方式上,結果通常找到的,是以複雜模式比對演算法呈現的方式。

這些演算法被應用在電腦上,讓機器能自己進行模式比對——計算思考甚至能被應用在計算思考本身背後的概念上。

模式比對的演算法,會檢視組成我們基因數據的化學基礎,從中尋找模式,用來與特定疾病患者的模式進行比對。這類演算法會嘗試預測金融市場的變動,提供競爭優勢。

這類演算法也會預測電腦遊戲中的角色,該如何和所偵測出的你的遊戲風格對應,以保持你對這遊戲的興趣。這類演算法甚至會讓機器以我們的方式「觀看」這世界。為什麼機器不能從雲朵中也看到小動物呢?模式無所不在,重點在於要怎麼找到它們。

用「模式」變個魔術給你看看

讓我們看一些簡單的模式比對演算法,以此得到基本概念。魔術師很早之前就理解到,他只要知道一個你不知道的秘密模式,便可以用這個模式來創造魔術效果。舉例來說,雙人讀心遊戲就有很長的歷史。魔術團隊中的一名成員在舞台上矇上眼睛,另一人則從觀眾席中選出一個物品。

透過「心電感應」,舞台上的矇眼者儘管眼睛被矇住,還是可以找出剛剛被挑出的物品是什麼。這個魔術之所以可以完成,借用的是精巧的文字密碼,這可需要兩名表演者做大量記憶。

舉例來說,如果選中的物品是支筆,助手會問:「好的,我手裡有什麼?」而如果選中的是懷錶,他的問題就可能會變成:「我手裡是什麼東西?仔細想,慢慢來。」

當然,這些都只是猜測:魔術師可能會發展出更細緻的文字密碼,讓他們的規則更難記住。這種娛樂形式在過去很受歡迎,於是表演者發明出越來越精細的密碼,這模式就藏在舞台上所進行的對話中。透過解碼,不可能的事情就可以發生。

不用超強記憶力的「模式讀心術」

你也可以自己進行讀心術,對隱藏模式的威力進行實驗。這版本不需要和傳統版本一樣用上那麼好的記憶力,但你需要一個共犯,也就是一個與你一起表演的夥伴,還有一屋子的觀眾。

要讓這表演看起來魔幻神秘,需要讓團隊中的一名成員——也就是魔術師——離開房間,然後觀眾秘密選出房裡的一個物品,等魔術師回到房間後,要求他猜出是哪個物品。

「為了證明表演的公正,沒人改變主意」,魔術師助手需留在房內。一旦魔術師回到屋內,助手就要看似隨機地往某個方向看去,手指不同的物品,一一詢問同一個問題:「這是被選出的物品嗎?」魔術師每次都要回答是或不是。

你不用記住一套複雜的口語密碼,才能達到效果;你可以使用預測演算法的簡單的模式比對。事先和你的助手討論好一些物件,像是一盞燈。無論你們選擇哪個物件,讓我們稱它為 X;而秘密信號就是,當助手指向那個物件時,那麼下一個他指到的物件,讓我們稱為 Y,就是觀眾選出的物品。當然,你們兩人需要事先對 X 是哪項物品達成共識。

如果你被要求再次進行同樣的表演,再猜一連串的物品,那麼這模式可能會太過明顯。但只要運用一點計算思考及衍生演算法,你便可以輕鬆迴避這個窘境。每一次你表演這個魔術時,你在指向被選中物品前,都使用一個不同物件做為參照:第一次是檯燈,第二次是地毯,接著則是開關,以此類推。現在,X 每次都會改變。。

當然在開始之前,你要確定房間裡確實有盞燈、有塊地毯,門邊有個開關。接著你在要猜第一個物品時(當猜測次數為一時)指向燈,要猜第二個物品時(當猜測次數為二時)指向地毯,而要猜第三個物品時(當猜測次數為三時)指向開關。

此時,最後的預設陳述要出場了,以免你被要求找出第四、第五甚至第六個物品,因為有些人就是永遠不會滿足!你還沒有準備好,但是優秀的演算法思考指出,你應該要把每一種可能性都包含進去。

因此,當觀眾要求你在原本準備的三次猜測以外再次進行猜測時,你在這裡可以使用預備的理由:「我的法力沒了。抱歉,我無法再繼續下去了。」

(本文書摘內容出自《思考的演算:跟著電腦學思考,你也可以成為計算思考大師 》,由  八旗 出版社授權轉載,並同意 TechOrange 編寫導讀與修訂標題,首圖來源:Public Domain Pictures, Licenced CC 。)

延伸閱讀

臉書演算法大揭密:為什麼反共言論被秒刪,嗆台獨的貼文都沒事?
演算法成 21 世紀海洛因:人類深陷「多巴胺經濟」,上癮卻不自知
「演算法」如何讓 UPS 每年省下 755 億台幣、Google 營收暴漲 125 倍?


我們正在找夥伴!

2019 年我們的團隊正在大舉擴張,需要你的加入跟我們一起找出台灣創新原動力! 我們正在徵 《採訪社群編輯》、《助理編輯》,詳細職缺與應徵辦法 請點我

點關鍵字看更多相關文章: