iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0

我們昨天介紹了資料結構,那今天來簡單的看演算法吧!
先簡單解釋一下為什麼要在資料結構的文章裡介紹演算法,

我們經常在各個地方都能看到演算法的存在,其實他沒有你想像的困難

像是泡泡麵、煮飯、找教室路線,甚至整理撲克牌,背後都存在一套「為了達成目標而設計的步驟」。
而這套步驟,就是 演算法(Algorithm)

什麼是演算法?

根據字典定義 : 演算法(Algorithm)是一種明確且有限的步驟,用來解決特定問題或完成任務

再換個說法就是:

利用步驟來達成事情

用小朋友的話來理解的話就是:
假設你要用 1、5、10 元湊出 72 元
那他的方式可以為

用1元開始加
2
3
4
...
72 ->成功!

或是

從最大的10元開始加
10
20
...
70
還不夠2元!
71
72 ->成功!

那可以看出第一個方法明顯比較慢,要加 72 次
那第二個方法只要 9 次就能找到答案

兩種方法都能解決「湊出 72 元」這個問題,但效率差很多

這就是演算法的核心:解決同一個問題可以有很多種做法,而演算法在乎的正是
「用什麼樣的步驟,能又快又好地達成目標」。

方法二之所以看起來比較快,是因為它每一步都優先選擇當下能帶來最大效果的做法(先使用面額最大的 10 元)。
這種「每一步都選擇目前看起來最好的選項」的想法,其實就是之後會介紹到的
貪心法(Greedy) 的核心概念。

不過要注意的是,貪心法並不保證每次都是最佳解。因此這裡只是先建立一個概念,之後介紹貪心法時再深入探討。

演算法的條件有哪些呢

演算法的五大特性

特性 說明
Input(輸入) 至少要有 0 個或多個以上的輸入資料
Output(輸出) 執行完畢後,至少要產生 1 個以上的輸出結果
明確性(Definiteness) 每一個步驟都必須清楚、不能模糊,不能有「大概」、「差不多」這種說法
有效性(Effectiveness) 每一個步驟都必須是實際可執行的,且能在有限時間內完成
有限性(Finiteness) 整個演算法必須在有限的步驟內結束,不能無窮無盡地執行下去

常見的演算法

分類 演算法 說明
遞迴 Recursion 函式呼叫自己來解決問題,後面排序、樹、圖的走訪都會用到
排序演算法 Bubble Sort、Selection Sort、Insertion Sort、Merge Sort、Quick Sort 讓資料按照特定順序排列
搜尋演算法 Linear Search、Binary Search 在資料中找出特定目標
圖的走訪演算法 BFS、DFS 走訪圖狀結構中的節點

至於分治法(Divide and Conquer)和貪心法(Greedy)之後如果有機會的話
會再介紹 !

明天我們要來介紹判斷演算法好壞的工具,時間複雜度(Time Complexity)和Big O表示法


參考資料與書籍

  1. 圖解資料結構×演算法:運用C++ 胡昭明
  2. MDN Web Docs, "Algorithm"
    https://developer.mozilla.org/en-US/docs/Glossary/Algorithm
  3. AlgoDaily, Algorithms in Everyday Life
    https://algodaily.com/lessons/algorithm-examples-everyday-life
  4. GeeksforGeeks, Interesting Examples of Algorithms in Everyday Life
    https://www.geeksforgeeks.org/dsa/interesting-examples-of-algorithms-in-everyday-life/

上一篇
Day1 - 前言& 什麼是資料結構
下一篇
Day 3 - 時間複雜度(Time Complexity) 與 Big O
系列文
從0開始的資料結構旅程!4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言