甚麼是演算法? — Algorithm

大家小時候應該有看過這個時代的眼淚  —  電話簿,厚厚的一本跟字典一樣,裡面有著密密碼碼的小字,時光倒回到 20 年前,假如我今天想要找到彰化縣鹿港鎮的海霸王餐廳的電話號碼,就要先從彰化縣的行政區開始翻起,然後找到餐廳類別後再依照筆劃數找到海霸王,順序就是彰化縣>鹿港鎮>餐飲業>第一個字是筆劃 10 劃的>海… 海之味、海世界、海霸王!經過千辛萬苦,總算找到海霸王餐廳的電話。

時間回到現代,如果想要找到彰化鹿港的海霸王餐廳你會怎麼做?當然是二話不說打開網頁用關鍵字「彰化、鹿港、海霸王餐廳」搜尋對吧?不到 10 秒就找到餐廳的電話了。

以上兩個例子跟演算法有甚麼關係?可以發現這兩種方式都可以達到找到電話號碼的最終目的,但是花費的步驟和時間可是天差地遠,中間這個解決問題的步驟和方式就是演算法的精隨。

甚麼是演算法?

經過一連串的步驟 ,可以解決某個問題。

以做一道黃金炒飯來說,準備好食材,依照食譜上的步驟一步一步烹調,最後做出成品,而程式也是如此,我們可以輸入特定的值,經過程式的有限運算步驟之後輸出預期的結果,演算法可以用 pseudo code(虛擬碼)或程式語言表示。

下圖就是 pseudo code,概略地描述程式邏輯但不包括實作

演算法具有這些特性:

  • 輸入(input): 0 個或是 1 以上的輸入
  • 輸出(output):輸出結果至少有一個
  • 明確性(Definiteness):每個步驟都是明確的
  • 有限性(Finiteness):假如不是有限步驟,一直無止盡的執行,沒有設定終止條件的話,那麼電腦就會進入無窮迴圈了!
  • 有效性(effectiveness):每個步驟具有可行性,可以用紙筆來表達

其實演算法在現實生活中無所不在,最常見的就是臉書會自動推薦一些好友給你,然後這個人可能是你的國小同學之類的,透過你們之間的共同好友關係,進而推論出這個人有可能是你認識的人,抑或著像是 youtube 會根據用戶的觀看習慣,推薦相關的影片,像我最近很熱愛看 3c 產品開箱,每次點進去 youtube 首頁就會優先推薦我 3c 相關的影片,或是在 Sportify 聽一些老歌的時候,歌單下方也會出現一個列表  —  你可能也有興趣的歌曲,接者會推薦一些年代相近的懷舊歌曲給我,以前都會驚嘆這是甚麼神奇的魔法,現在就知道這都是演算法的推算結果了!