iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
自我挑戰組

每日攝取一點資料結構和演算法系列 第 2

Day2: 什麼是演算法?— Algorithms

  • 分享至 

  • xImage
  •  

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

時間回到現代,如果想要找到彰化鹿港的海霸王餐廳你會怎麼做?當然是二話不說打開網頁用關鍵字「彰化、鹿港、海霸王餐廳」搜尋對吧?不到10秒就找到餐廳的電話了。以上兩個例子跟演算法有甚麼關係?可以發現這兩種方式都可以達到找到電話號碼的最終目的,但是花費的步驟和時間可是天差地遠,中間這個解決問題的步驟和方式就是演算法的精隨。

甚麼是演算法?

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

下圖就是pseudo code,概略地描述程式邏輯但不包括實作
https://ithelp.ithome.com.tw/upload/images/20210902/20128604x02MILDSEF.png
圖片來源:assignmentaccess

演算法具有這些特性:

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

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


上一篇
Day1: 開始學習演算法和資料結構的契機
下一篇
Day3: Big O — 時間複雜度與空間複雜度
系列文
每日攝取一點資料結構和演算法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言