DFS,先往深處走,每到一個點後,不去看這個點旁邊有什麼點可以探索,而是看這個點的下一階段的可能性,一直要走到沒路了才會回頭看看前面有漏掉什麼。這有沒有像我們大部分的前半段人生?國小唸完、就繼續唸中學、然後大學,大學完後因為還有研究所這個選項,就繼續唸,有很多人就這樣一直拿到博士後,沒書可以唸了才來想想還能做什麼。
BFS, 先往廣度走,每到一個點後,不會像DFS就開始往下一階段邁進,而是看看這附近有甚麼可以探索,例如:在大學的時候,就會試試看打工、社團、談戀愛等等等,試過了後才甘願的往下一階段邁進。
如果我們開始要加績效的概念到搜尋問題上,就會視情況用到不同種的演算法,大部分演算法都是所謂的Greedy Algorithms(貪婪的演算法),這些演算法採用經驗法則,所謂的經驗法則就是:每走一步的時候,從當下有的選擇中選出最好的解,如果每一步都這樣走,也許最後的績效會非常好。但是,大部分的經驗法則卻沒辦法保證可以給到最佳解,因為綜觀全局的最佳解也許在某一步是要選擇沒那麼好的解,有時蹲的低一點,反而可以跳得高一點。
人生其實也是這樣耶,我們每一次在選擇要做什麼的時候,即使都選擇最好的那一步,也不見得是最佳解。
舉例來說:假使有一個學生在大學的時候,根據他手邊最好的可能性選擇了清大,然後研究所上了台大,唸完碩士想說要去最好的地方,然後他就去了波士頓的MIT,大家覺得啊!這個學生應該就一帆風順了吧!沒想到在MIT因為旁邊的同學幾乎都是天才,他努力了幾年還是比不上他的天才同學,一個鬱悶就跳進河裡!唉呀!結果他的人生就停在二十幾歲的黃金歲月。
比起來,另一個也是清大的學生,雖然研究所的時候可以上台大,但是他覺得:不一定要往台大擠呀,留下來在清大,博士班的時候也留在清大,拿到博士後,他決定要去歷練人生,也選擇了MIT,雖然MIT有很多天才學生,但是他的心智已經很成熟,知道人生不用什麼都比第一,也快快樂樂的工作,最後甚至回台灣找了個教職,這樣他的人生可以活得快樂一點、而且久一點。
所以同學們,如果未來你們的父母跟你們說:研究所就要唸排名最好的台大,你可以說:我們資料結構課裡面說道經驗法則只能選出local optimal (區域最佳解),人生的最佳解不用唸台大也可以辦到。
我記得我唸博士前,其實也是用DFS來找我自認為的最佳解,高中唸完就唸大學,唸大學的時候就好專心唸書這樣才能有好成績唸碩士班,唸完碩士又出國留學唸博士,我一直以為人生應該就是一直這樣很專心的做好自己分內的所有事情,不要貪看其他和目標無關的事情,人生才算成功。沒想到,在我博士快拿到的那一年,發生了一件事情:我堂姊被殺了。
在她死前一周,我們還在電話上聊天,她緊張地問我:「如果這次我公職沒考上怎麼辦?我都這麼認真的準備兩年了」我回她:「那是因為你人生中有更重要的事情呀!」結果她還沒去考試,就走了,還死於一個她以為是朋友的手上。
因為這個事件,我重新停下來思考人生是什麼?我們永遠不知道生命會在什麼時候結束,所以應該是看生命中那些最重要的事情,對我來說我的生命在這一年轉了一個彎,在這一年我發現生命的選擇應該是把家人考慮在內,接下來我留在指導教授旁邊當了一年半的博士後,只因為要等我弟弟畢業,然後等到找工作的時候,又聽了我媽的話投履歷到台灣的學校,生命總是有意外,You never know!
從我自己的經驗看來,生命中有很多很多意外,希望你們未來不如意的時候,能想起我這段話,一直如意的人生,不見得可以得到生命中的最佳解,有時候不如意反而能幫我們往最佳解邁進。生命超寶貴,有好多人的生命是尬然中止在不知名的地方,能活下來,都是老天給的禮物。