「排序 (Sorting)」是電腦最常做的工作之一。如果資料沒排好,電腦找東西就會變得很慢。
但是,要把幾百萬筆資料排好順序,是一件浩大的工程。
今天我們不看程式碼,我們用「看不見內容的神秘罐子」和一個「天平」,讓孩子親手感受一下,為什麼電腦科學家總是想方設法要幫電腦「省力氣」。
第一階段:電腦的視力限制
首先,我們要模擬電腦的限制:它不能像人眼一樣一眼看穿誰最重,它一次只能比較兩個東西。
- 任務設定:
- 準備 8 個外觀一模一樣的容器(例如貼滿膠帶的牛奶盒或底片罐),分別將裡面裝進不同量的水或沙子。
- 關鍵道具: 一個天平(可以用衣架自製,或只是用雙手當天平)。
- 規則: 「你的任務是把這 8 個罐子,從最輕排到最重。但是你不能偷看裡面,一次只能拿兩個罐子放在天平上比。」。
- 穩紮穩打的直覺 (Selection Sort):
- 孩子通常會怎麼做?他們會隨便抓兩個比,把輕的留著,再拿去跟下一個比,直到找出「全場最輕」的那一個,把它放到最左邊。
- 然後,在剩下的罐子裡,再重複一次,找出第二輕的。
- 正向引導思考 (Engineer Mindset):
- 這種「每次挑出一個最輕的」方法,叫做「選擇排序法 (Selection Sort)」。
- 家長提問: 「這是一個非常穩健的方法!不過我們來算算看,剛剛為了排好這 8 個罐子,天平大概動了 28 次。想像一下,如果今天是全校 1000 個學生的資料,你覺得電腦會不會希望能有一種『捷徑』,讓它可以早點把工作做完去休息?」。
第二階段:電腦高手的省力絕招
現在,我們要介紹一招電腦高手的省力絕招,叫做「快速排序法 (Quicksort)」。這是一種運用「分治法 (Divide and Conquer)」的魔法。
- 改變策略:
- 「這次我們來幫電腦省點電。我們試著不要一個一個挑。」
- 規則:
- 從這堆罐子裡隨機抓一個出來,放在桌子中間。我們叫它「隊長 (Pivot)」(或基準點)。
- 剩下的罐子,每一個都來跟隊長比一下。
- 比隊長輕的: 請去左邊集合。
- 比隊長重的: 請去右邊集合。
- 視覺化效果:
- 當孩子比完一輪後,桌子上會變成三群:左邊(輕)、中間(隊長)、右邊(重)。
- 關鍵提問: 「看!現在左邊那些輕的罐子,還需要花力氣去跟右邊那些重的罐子比嗎?」
- 答案: 「不用!因為左邊一定比右邊輕。我們成功把一個大麻煩,切成兩個小麻煩了!」
第三階段:速度的對決
- 繼續切分 (Recursion):
- 現在專注處理左邊那一小堆。再選一個新隊長,再分一次(輕的左邊、重的右邊)。
- 右邊那一堆也做一樣的事。
- 一直重複同樣的動作,直到每一堆只剩下一個罐子為止。
- 比較次數:
- 讓孩子算算看。用剛剛的第一種方法(選擇排序)可能要比 28 次。
- 用這個「選隊長、切兩半」的方法(快速排序),運氣好的話只要 14 次就能排好!。
- 結論: 「哇!我們少做了一半的工作!如果是一百萬筆資料,這個方法會快上 20000 倍,這能幫電腦省下非常多的電力和時間!」。
第四階段:概念連結 (Concept Connection)
為什麼要學這麼多種方法?
- 生活譬喻:
- 選擇排序 (Selection Sort): 就像你在玩撲克牌,手上的牌很少時,你習慣一張一張抽出來插到正確位置,這時候用簡單的方法反而方便。
- 快速排序 (Quick Sort): 就像處理全校的考卷,數量非常龐大時,我們先把考卷分成「及格」和「不及格」兩大堆,再分別處理,這樣效率最高。
- 電腦的考量:
- 電腦科學家在乎的不只是「做完」,而是「有效率地做完」。選擇好的演算法,可以讓原本要跑 5 小時的程式,變成 1 秒鐘就跑完。
第五階段:除錯與思考 (Debug & Challenge)
運氣也是實力的一種?
這一步是為了引導批判性思考。
- 提問: 「快速排序法看起來無敵快,但我們來當個『測試員』。有沒有什麼情況下,這個方法會失靈?」
- 實驗: 「如果你運氣超級特別,每次隨手抓的『隊長』剛好都是最輕的那一個,會發生什麼事?」
- 發現: 所有的罐子都會跑去右邊,左邊空空的。這樣就沒有達到「切一半」的效果了!
- 結論: 原來,如果運氣太極端,快速排序法可能會變得跟第一種方法一樣慢。這就是為什麼電腦科學很有趣,永遠有新的挑戰等著我們解決。
教學觀察重點表 (Clinical Interview Guide)
這張表幫助您使用正向語氣來引導孩子思考。
| 觀察點 | ❌ 較無效的反應 (負面/糾錯) | ✅ 較有效的引導 (正向/啟發) |
| 當孩子覺得第一種方法很慢時 | 「對啊,這樣做很累吧?手很痠對不對?」 | 「這是一個很棒的發現!你注意到了重複的動作很多。如果你是設計電腦的人,你會想發明什麼新規則來讓工作變輕鬆?」 |
| 比較不同排序法時 | 「快速排序法比較好,選擇排序法很爛。」 | 「每一種方法都有它的強項。如果你只有 3 個罐子要排,你會想用複雜的快速排序,還是直接比一比就好?我們來想想什麼時候該用哪一招?」 |
| 解釋遞迴 (Recursion) | 「這叫遞迴,就是函式呼叫自己。」 | 「你看,我們只是不斷重複這個簡單的遊戲。把一個大問題,變成好幾個小小的、容易解決的問題,這是不是很聰明的策略?」 |
