資料結構與人生~ 圖論

閱讀時間約 4 分鐘
(以下是2019 資料結構上課中的喃喃自語)
資料結構中,圖是很重要的一個單元,其中有幾個內容是我個人蠻喜歡的,因為可以應用在不同的領域,例如:如何去走遍整個圖 (Graph traversal)。有兩種常見的遊歷方法 Depth-first search (DFS, 先往深處走)與 Breadth-first search (BFS, 先往廣度走)。我常覺得這很像是人在經歷人生的兩種不一樣的策略。
DFS,先往深處走,每到一個點後,不去看這個點旁邊有什麼點可以探索,而是看這個點的下一階段的可能性,一直要走到沒路了才會回頭看看前面有漏掉什麼。這有沒有像我們大部分的前半段人生?國小唸完、就繼續唸中學、然後大學,大學完後因為還有研究所這個選項,就繼續唸,有很多人就這樣一直拿到博士後,沒書可以唸了才來想想還能做什麼。
BFS, 先往廣度走,每到一個點後,不會像DFS就開始往下一階段邁進,而是看看這附近有甚麼可以探索,例如:在大學的時候,就會試試看打工、社團、談戀愛等等等,試過了後才甘願的往下一階段邁進。
如果我們開始要加績效的概念到搜尋問題上,就會視情況用到不同種的演算法,大部分演算法都是所謂的Greedy Algorithms(貪婪的演算法),這些演算法採用經驗法則,所謂的經驗法則就是:每走一步的時候,從當下有的選擇中選出最好的解,如果每一步都這樣走,也許最後的績效會非常好。但是,大部分的經驗法則卻沒辦法保證可以給到最佳解,因為綜觀全局的最佳解也許在某一步是要選擇沒那麼好的解,有時蹲的低一點,反而可以跳得高一點。
人生其實也是這樣耶,我們每一次在選擇要做什麼的時候,即使都選擇最好的那一步,也不見得是最佳解。
舉例來說:假使有一個學生在大學的時候,根據他手邊最好的可能性選擇了清大,然後研究所上了台大,唸完碩士想說要去最好的地方,然後他就去了波士頓的MIT,大家覺得啊!這個學生應該就一帆風順了吧!沒想到在MIT因為旁邊的同學幾乎都是天才,他努力了幾年還是比不上他的天才同學,一個鬱悶就跳進河裡!唉呀!結果他的人生就停在二十幾歲的黃金歲月。
比起來,另一個也是清大的學生,雖然研究所的時候可以上台大,但是他覺得:不一定要往台大擠呀,留下來在清大,博士班的時候也留在清大,拿到博士後,他決定要去歷練人生,也選擇了MIT,雖然MIT有很多天才學生,但是他的心智已經很成熟,知道人生不用什麼都比第一,也快快樂樂的工作,最後甚至回台灣找了個教職,這樣他的人生可以活得快樂一點、而且久一點。
所以同學們,如果未來你們的父母跟你們說:研究所就要唸排名最好的台大,你可以說:我們資料結構課裡面說道經驗法則只能選出local optimal (區域最佳解),人生的最佳解不用唸台大也可以辦到。
我記得我唸博士前,其實也是用DFS來找我自認為的最佳解,高中唸完就唸大學,唸大學的時候就好專心唸書這樣才能有好成績唸碩士班,唸完碩士又出國留學唸博士,我一直以為人生應該就是一直這樣很專心的做好自己分內的所有事情,不要貪看其他和目標無關的事情,人生才算成功。沒想到,在我博士快拿到的那一年,發生了一件事情:我堂姊被殺了。
在她死前一周,我們還在電話上聊天,她緊張地問我:「如果這次我公職沒考上怎麼辦?我都這麼認真的準備兩年了」我回她:「那是因為你人生中有更重要的事情呀!」結果她還沒去考試,就走了,還死於一個她以為是朋友的手上。
因為這個事件,我重新停下來思考人生是什麼?我們永遠不知道生命會在什麼時候結束,所以應該是看生命中那些最重要的事情,對我來說我的生命在這一年轉了一個彎,在這一年我發現生命的選擇應該是把家人考慮在內,所以接下來我留在我指導教授旁邊當了一年半的博士後,只因為要等我弟弟畢業,然後等到找工作的時候,又聽了我媽的話投履歷到台灣的學校,生命總是有意外,You never know!
從我自己的經驗看來,生命中有很多很多意外,希望你們未來不如意的時候,能想起我這段話,一直如意的人生,不見得可以得到生命中的最佳解,有時候不如意反而能幫我們往最佳解邁進。生命超寶貴,有好多人的生命是尬然中止在不知名的地方,能活下來,都是老天給的禮物。
2會員
20Content count
一個沒有雙重標準的世界
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
題目敘述 題目已經給定一個Trie前綴樹的類別和相關的函式介面interface, 要求我們把功能實作出來。 Trie() 建構子,初始化一個空的Trie。 void insert(String word) 插入一個新的單字word到Trie裡面。 boolean search(Strin
Thumbnail
本文將深入探討鏈表的核心概念,使用 JavaScript 來說明如何實現和操作鏈表(Linked List),包括 append、prepend、remove、find 和 reverse 等五大方法。
Thumbnail
題目敘述 題目會給我們一棵二元搜索樹的根結點root,還有一個指定的目標值val。 要求我們找出在樹中對應到目標值val的節點,假如找不到,請回傳null( null在Python就是None)。 題目的原文敘述 測試範例 Example 1: Input: root = [4,2,
Thumbnail
題目敘述 這題是一個經典的資料結構實作題,要求我們實作指定長度為k的環狀佇列。 請記得,佇列最重要的特質就是先進先出 First In First Out 又簡稱為 FIFO
Thumbnail
你知道台灣人口什麼時候開始減少嗎?什麼時候會剩不到2,000萬人呢?虎年、龍年的影響是什麼?台灣老化的速度又多快?一起來看看吧!
Thumbnail
本篇介紹Mplus的「結構方程模型(Structural Equation Modelling, SEM)」之語法內容,並透過例題向大家示範如何分析撰寫SEM的語法。本文為新手教學,輸入方式可能不是最有效率,但是比較簡單且不太會犯錯
Thumbnail
本章介紹第二種常見的資料結構 - 堆疊(Stack),與陣列建立方式雷同,我們常透過靜態串列與動態鏈結串列的方式來建立堆疊,本文會介紹實作過程與比較兩種方式之間的差異。
Thumbnail
本文為陣列實作的延伸,特別介紹鏈結串列不同的方式,以解決一些常發生在鏈結串列上的問題,並比較不同做法的優缺點。
Thumbnail
本文會介紹靜態結構 - 串列(List)與動態結構 - 鏈結串列(Linked List)來實踐陣列的不同功能,如:刪除、計算元素個數與反轉。
Thumbnail
本文延續從上一篇文章的內容,繼續來介紹如何分別以靜態結構 - 串列(List)及鏈結串列(Linked List)兩種不同的方式來建立實作陣列的新增及修改元素功能。
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
題目敘述 題目已經給定一個Trie前綴樹的類別和相關的函式介面interface, 要求我們把功能實作出來。 Trie() 建構子,初始化一個空的Trie。 void insert(String word) 插入一個新的單字word到Trie裡面。 boolean search(Strin
Thumbnail
本文將深入探討鏈表的核心概念,使用 JavaScript 來說明如何實現和操作鏈表(Linked List),包括 append、prepend、remove、find 和 reverse 等五大方法。
Thumbnail
題目敘述 題目會給我們一棵二元搜索樹的根結點root,還有一個指定的目標值val。 要求我們找出在樹中對應到目標值val的節點,假如找不到,請回傳null( null在Python就是None)。 題目的原文敘述 測試範例 Example 1: Input: root = [4,2,
Thumbnail
題目敘述 這題是一個經典的資料結構實作題,要求我們實作指定長度為k的環狀佇列。 請記得,佇列最重要的特質就是先進先出 First In First Out 又簡稱為 FIFO
Thumbnail
你知道台灣人口什麼時候開始減少嗎?什麼時候會剩不到2,000萬人呢?虎年、龍年的影響是什麼?台灣老化的速度又多快?一起來看看吧!
Thumbnail
本篇介紹Mplus的「結構方程模型(Structural Equation Modelling, SEM)」之語法內容,並透過例題向大家示範如何分析撰寫SEM的語法。本文為新手教學,輸入方式可能不是最有效率,但是比較簡單且不太會犯錯
Thumbnail
本章介紹第二種常見的資料結構 - 堆疊(Stack),與陣列建立方式雷同,我們常透過靜態串列與動態鏈結串列的方式來建立堆疊,本文會介紹實作過程與比較兩種方式之間的差異。
Thumbnail
本文為陣列實作的延伸,特別介紹鏈結串列不同的方式,以解決一些常發生在鏈結串列上的問題,並比較不同做法的優缺點。
Thumbnail
本文會介紹靜態結構 - 串列(List)與動態結構 - 鏈結串列(Linked List)來實踐陣列的不同功能,如:刪除、計算元素個數與反轉。
Thumbnail
本文延續從上一篇文章的內容,繼續來介紹如何分別以靜態結構 - 串列(List)及鏈結串列(Linked List)兩種不同的方式來建立實作陣列的新增及修改元素功能。