2019年3月16日 星期六

我的孩子適合考 APCS 嗎?

今天在 FB 的家長群組寫了一篇文章講 APCS (大學程式設計先修檢測) ,想想也許有朋友也對 APCS 有興趣,所以也轉到自己的部落格來。

APCS 是 Advanced Placement Computer Science 的英文縮寫,目的是檢測學生對於程式設計的瞭解,目前有一些大學的資工系參考 APCS 的成績來挑選學生,所以很多家長想讓孩子去考 APCS。

我先說結論,如果你的孩子平常有在寫程式,甚至有在參加程式設計比賽,那麼這是一條可以嘗試的路徑;如果數學不好 & 平常沒有在寫程式,看到補習班的廣告想說多了一條升學徑路很不錯,所以想去報名補習班 & 報考 APCS,那其實報名費可以省下來了,因為題目真的不簡單,而且很吃數學能力

APCS 的考試方式

APCS 分觀念題 & 實作題兩部份,觀念題題型為選擇題,共有 25 題,每題 4 分,總分 100 分,考試時間 75 分鐘;實作題 4 題,每題 100 分,總分 400 分,考試時間 150 分鐘。

計分方式採用標準參照,觀念題 90~100 分、實作題 350~400 分換算後為五級分,分數對照請參考下圖。

原始分數與級分對照表
圖、原始分數與級分對照表

APCS 觀念題部份有很多遞迴題目,一題遞迴題就可以解很久,但時間祇有 75 分鐘。

遞迴題範例
圖、遞迴題範例

純觀念題也不容易,比方說輾轉相除法的程式該怎麼寫,這個考程式功力,也考邏輯能力。

觀念題--輾轉相除法
圖、觀念題--輾轉相除法

甚至還有 log 出現……數學不好的人看到這一題大概就瘋了。這其實有演算法 BigO 的觀念在裡面,學過演算法看到這一題就知道答案了,但沒學過的時候真的覺得很棘手。

演算法求執行 BigO
圖、演算法求執行 BigO

觀念題的部份雖然有些題目比較難,但多做一些練習,知道怎麼解遞迴,要拿到 4 級分是沒問題的,甚至有機會拿到 5 級分;但實作題要拿高分就難多了。

實作題需要細心且手腳快

實作題部份,平均不到 40 分鐘要解一題,但它的題目一般會有兩題簡單,兩題困難,要拿到 3 級分還算容易,但要 4 級分就至少要把兩題簡單題目都答對,再答對 0.5 題困難題,這已經不太容易拿到了,5 級分就更難了。

實作題困難的原因在於,第一個,它題目敘述非常長,光是看懂題目就要花不少時間;第二個,答案的格式要非常精確,多一個空白、多一個逗號都算錯 (這邊就會卡死一堆人);第三個,每一題的第四小題通常要程式能力很強的人才寫的出來。

比方說,第一小題可能祇會用 10~100 組資料做測試,但到了第四小題很多都是用 100 萬組資料做測試,記憶體規畫做的不好根本跑不了;或是程式演算法設計的不好無法在規定的時限內 (1 秒) 跑完 100 萬筆資料……

在 1 秒內執行 100 萬筆資料
圖、在 1 秒內執行 100 萬筆資料

不是程式寫出來讓它跑就好了?用 10 筆資料或 100 萬筆資料去執行會有什麼差別嗎?

舉個大家都懂的例子,要請你計算:1 + 2 + 3 + 4 + …… + 100 的和,傻傻的用紙筆慢慢加也還可以把這一題算出來。當題目換一下,要求計算 1 + 2 + 3 + 4 + …… + 1000000 的和,這時如果還用紙筆慢慢算,就算最後能得到正確答案,也要花很久的時間。

不過,如果你聽過高斯的故事,知道可以用 n(n+1)/2 的公式來計算其和,那麼無論是要從 1 加到 100,或是要從 1 加到 1000000,計算出答案的時間都差不多。

所以 APCS 會用 100 萬筆資料去測試程式,就是要求考生不但要解決問題,而且還要用足夠好演算法來解決問題。如果祇是去補習學寫簡單程式,對於演算法沒有瞭解,那這種題目都過不了關。

除了測試的資料量大之外,也有題目長度超過一整頁,光是要看懂這個題目就要花很久的時間。

題目長度超過一頁
圖、題目長度超過一頁

所以那些原本就對寫程式很有興趣的人,可能從國中就開始寫程式,寫了好多年了,已經在鑽研資料結構、演算法的學生才適合去考 APCS

如果都沒有寫過程式,想要靠著學幾堂課就去考試,嗯,不是那麼容易過關,因為題目真的有難度。

1 則留言:

  1. 确实,国内搞信息学竞赛也是同样的道理。不是想搞就能出成绩的,对学生的数学和思维能力要求很高。

    回覆刪除