簡介:演算法競賽

歡迎!你有沒有好奇過,為什麼手機上的某些應用程式用起來快如閃電,而有些卻要載入很久?通常,秘訣不只是更快的網絡或更好的手機,關鍵在於程式碼的效率 (Efficiency)。在本章中,我們將探討「演算法的效率」。你將會學到,解決同一個問題的方法幾乎不只一種,而選擇正確的方法可以節省大量的時間!

如果初看這些概念覺得有點抽象,不用擔心——我們會用大量的日常例子來讓你清楚理解。

1. 通往同一目標的不同路徑

首先要了解電腦科學的核心原則:解決同一個問題,可以使用多於一種的演算法。

想像你想登上山頂。你可以:
1. 直接走陡峭的山坡上去(非常累人)。
2. 走一條漫長、蜿蜒的盤山小路(距離較長,但比較輕鬆)。
3. 搭乘纜車(最快、最輕鬆)。

在這三種情況下,你都能到達山頂。它們全部都「有效」。然而,你選擇的方法決定了你所花費的時間和精力。演算法也完全一樣!電腦可以使用「慢」的方法或「快」的方法來得出正確答案。

快速重溫:多種解決方案

重點:單單因為一個演算法有效且能得出正確答案,並不代表它是該工作的「最佳」方案。

2. 什麼是「效率」?

在 AQA GCSE 的課程大綱中,當我們談論效率時,我們特別關注的是時間效率 (Time Efficiency)。這並不是指電腦處理器的時脈有多快,而是指演算法完成任務需要執行多少個步驟

時間效率:衡量演算法根據其需要處理的數據量(輸入大小),運作需要花費多久的指標。

你知道嗎?

我們不以秒來衡量效率,因為不同電腦的速度各不相同。相反,我們透過計算演算法執行的操作次數(例如比較或加法)來衡量。一個真正高效的演算法會盡可能減少操作次數。

3. 比較演算法

為了找出哪個演算法更好,我們會比較當「工作量」(輸入規模)增加時,它們的表現如何。

讓我們看看之後課程會遇到的一個經典例子:在 100 人的列表中找出特定的名字。

演算法 A:「逐個檢查」法(線性搜尋 Linear Search)

你從列表的開頭開始,檢查每一個名字,直到找到正確的那一個。

  • 如果名字在開頭,速度很快(1 個步驟)。
  • 如果名字在最後面,你必須檢查 100 個名字(100 個步驟)。
  • 如果你將列表增加到 200 人,則可能需要 200 個步驟

演算法 B:「分而治之」法(二元搜尋 Binary Search)

如果列表是按字母順序排列的,你可以直接跳到中間。如果目標名字在字母表中較前,你就忽略後半部分。以此類推,不斷將列表減半。

  • 對於 100 人的列表,最多只需要約 7 個步驟
  • 如果你將列表增加到 200 人,它只需多加 1 個步驟(總共 8 個步驟)!

結論:演算法 B 高效得多,因為隨著數據量的增加,與演算法 A 相比,它所需的步驟數仍保持在非常低的水平。

避免常見錯誤:

學生常以為程式碼「很長」(行數多)就代表演算法沒效率。這是不對的!一段包含會執行一百萬次的迴圈 (loop) 的短程式碼,遠比只執行一次的長程式碼低效得多。

4. 為什麼效率很重要?

對於少量的數據(例如 5 個名字的列表),速度差異極小,你幾乎感覺不到。但對於龐大的數據量,效率就是應用程式瞬間完成運作與應用程式崩潰之間的差別。

類比:想像在圖書館找一本書。
低效:從門口開始,經過每一個書架逐一搜尋(線性搜尋)。
高效:利用分類標示和按字母排序的書架,直接走向你需要的那一區(二元搜尋)。

關鍵點:高效的演算法讓電腦能夠處理海量數據(如 Google 搜尋或社交媒體動態),而不會變得遲鈍緩慢。

總結與記憶技巧

「快速重溫」欄
1. 多種方式:在程式設計中,解決問題的方法總不止一種。
2. 效率 = 時間:在考試中,效率指的是時間效率(需要多少步驟)。
3. 可擴展性 (Scalability):一個高效的演算法,其步驟數不會隨著數據增加而失控地暴增。

記憶技巧:披薩店口訣 (Pizza Shop Mnemonic)

記住 A.C.E. 來幫助你理解為什麼要比較演算法:
A - Alternatives (替代方案):總有另一種解決方法。
C - Comparison (比較):我們要檢查哪一個更好。
E - Efficiency (效率):我們想要使用最少時間/步驟的方法。

做得好!你已經掌握了演算法效率的基本原理。記住:這不僅是關於得到正確答案,更是關於以最聰明的方式達到目標。