你的運氣值多少錢?——用「代幣遊戲」破解電腦的搜尋代價(Searching algorithms)

搜尋關鍵字、數值或特定資料,是許多電腦應用的基礎——無論是查詢銀行餘額、在筆電找檔案,或是 Google 搜尋。

人們期望電腦能瞬間找到答案,我們最討厭看到螢幕上出現正在處理中的「死亡轉圈圈」。

但電腦其實很單純,它一次只能看一筆資料。試想一下,如果電腦每次都要把幾十億個網頁「全部看完」才能找到你要的東西,那你可能要等到天荒地老。

為了避免這種情況,電腦科學家發明了不同的「搜尋演算法 Searching algorithms 」。

今天,我們要把抽象的「運算時間」變成孩子在意的「代幣(零用錢)」。透過一場要花錢的遊戲,讓孩子親身體驗:面對亂七八糟的資料時,運氣多麼昂貴;而面對整理好的資料時,邏輯又是多麼省錢。

第一階段:亂序搜尋(破產的風險)

首先,我們要模擬電腦在處理「未排序資料(Unsorted List)」時的無奈,這種方法稱為「順序搜尋 (Sequential Search)」。

  1. 任務設定:
    • 準備 15 張卡片,一面畫著動物,另一面寫著數字(1-15,但不照順序)。把動物面朝上排成一列。
    • 關鍵道具: 給孩子 10 顆彈珠(或糖果/代幣)。
    • 規則: 「我要找數字 4。你每翻開一張卡片,就要付給我 1 顆彈珠。如果彈珠用光了還沒找到,你就輸了」。
  2. 殘酷的體驗:
    • 孩子開始翻牌。因為從動物圖案看不出背後的數字(資料是亂的),他們沒有邏輯可言,只能隨機選或從頭翻。
    • 情境 A (幸運): 第 1 張就翻到了!孩子很開心:「我只花了 1 顆彈珠!」
    • 情境 B (不幸): 翻到第 13 張才找到。
    • 生活譬喻: 這就像你借了一本書給朋友,但忘了借給住在這 6 間房子裡的哪一位。因為不知道是誰,你只能一間一間敲門去問。
  3. 引導思考:
    • 「哇,你剛剛差點破產耶!如果資料變多,變成兩倍(30 張),你覺得你要花的時間會變多少?」
    • 答案: 平均來說,資料變兩倍,找的時間就會變兩倍。這就是依靠運氣的代價。

第二階段:排序搜尋(邏輯的勝利

現在,我們要讓孩子體驗「整理資料」的威力,介紹「二分搜尋 (Binary Search)」。

  1. 改變設定:
    • 一樣有15張卡片,這次使用數字在的範圍是1到100之間,但是我們把它們由小到大排好(Sorted)。
    • 題目是要找到數字 52
  2. 新規則:
    • 我們有15個不同的數字,每張卡片上一個。雖然你看不到它們,但這次它們是按從小到大的順序排列的。這些數字的範圍是1到100。
    • 「你還是只有 10 顆彈珠。但因為這次有排好順序,當你翻開一張牌,就要付給我 1 顆彈珠,如果不是我要的數字,你可以把所有不可能是答案的牌全部移除!」。

第三階段:省錢大作戰

  • 家長引導: 「既然每一顆彈珠都很珍貴,你想翻哪一張,可以幫你刪掉最多張牌?」
  • 孩子通常會指中間。
  • 家長動作:
    • 翻開選中的卡片,露出下面的數字。
    • 如果數字正確,遊戲結束
    • 猜錯則移除這張卡片以及所有數字不可能是該數字的卡片(即選中卡片右側或左側的所有卡片)
  • 引導思考
    • 重複「翻牌 -> 判斷大小 -> 掃掉一半」的過程。這叫做「分治法 (Divide and Conquer)」。
    • 「猜了多少次才找到這個數字?」。
    • 「怎麼猜可以一次移除最多卡片?」。

第四階段:概念連結 (Concept Connection)

為什麼 Google 這麼快?

  1. 效率的飛躍:
    • 從「順序搜尋」到「二分搜尋」的進步,展示了選擇正確演算法的重要性。
    • 這也解釋了一個驚人的事實:用二分搜尋法,搜尋 200 萬筆資料的時間,幾乎跟搜尋 100 萬筆資料一樣快(只多切一次而已)。
  2. 現實應用:
    • 這就是為什麼電腦可以處理海量數據。它透過不斷「切一半」,讓龐大的任務瞬間變得微不足道。

第五階段:除錯與思考 (Debug & Challenge)

什麼時候該用哪一招?

我們要確認孩子理解適用情境,而不只是死背方法。

  • 提問: 「既然『切一半』這麼省彈珠,為什麼我們第一關(找動物卡)的時候不用?」
  • 引導回答: 「因為第一關的卡片是亂的 (Random Order)!如果沒排好順序,你根本不知道答案在哪一邊,只能亂猜」。
  • 總結:
    • 資料亂七八糟時: 只能用順序搜尋,雖然可能要找很久。
    • 資料排好順序時: 一定要用二分搜尋,利用邏輯來排除錯誤選項。

📝 教學觀察重點表 (Clinical Interview Guide)

觀察點❌ 較無效的反應 (只看結果)✅ 較有效的引導 (看重過程)
當孩子在第一關(亂序)想用策略時「這裡沒有邏輯,你就隨便猜。」「你覺得選中間那張會比較容易中嗎?因為它是亂排的,選中間跟選旁邊,中獎機率有一樣嗎?」
當孩子在第二關(排序)猜錯邊時「不對,52 比 40 大,你應該留右邊。」「等等,如果我們把右邊都丟掉了,萬一 52 躲在右邊怎麼辦?我們再確認一次,52 是比 40 大還是小?」
關於「預測」的討論「你猜 5 次是對的。」「如果這 6 間房子是你朋友家,你覺得你需要敲幾次門才能找到書?為什麼有人覺得 1 次,有人覺得 6 次?」(討論運氣與平均值)

參考來源:csunplugged earching algorithms