資管系本來有四班,因為少子化,系上將原本班級分出去,成立新的學系或學程,目前是一班。
每學期開課前,每位老師填寫 6 個志願,再由系課程委員會決定每位老師的授課。為了配合學校的政策,減少必修課;但是,學生必須在三個模組中選二個模組修課,才能畢業。不過,選修課要 15 個人才能開課。根據多年的觀察和教書心得,更加覺得基礎的東西非常重要 (1, 2)。演算法是計算機軟體的基礎,也屬於較多人選修的軟體設計模組,所以把演算法當成 6 個志願之一,也希望我可以透過教書的過程中提升自我的能力。
去年剛教的計算機概論,因為系上希望班導能夠教導生,所以改派大一班導教;系上真正的演算法專家因課程也很多,所以,我 (真的?!) 分到演算法。沒想到,人算不如天算,今年的課程委員會將演算法移出軟體設計模組。
多年前的學生畢業專題發表會,有一組做旅遊規劃,示範的例子是 9 個旅遊景點,學生說:『因為旅行推銷員問題 (TSP) 是 NP-complete,所以利用基因演算法求次佳解』。當時我問了 學生問題,仍然得不到滿意的答覆。不過,心中納悶的是,學了一學期的必修課,為什麼還是如此的想法呢?
一般的教法有問題導向或技巧導向,技巧導向或許較容易吸收。但是,當我們面對一個新的問題時,通常不知道要用哪一種技巧,所以我會兩種方法並重。針對幾個重要的問題,先說明實際的應用,在不同的章節中提出不同的解法,然後比較這些方法的複雜度和與最佳化的差距 (suboptimality)。
以 Levitin 的 Introduction to the Design and Analysis of Algorithms 為例, 第三章的窮舉搜尋法就是旅行推銷員問題。 透過網路上的開放程式碼, 將教導學生如何驗證這些程式碼的正確性、 以及一些簡單的測試方法。 也將出不同程度的作業, 以配合不同學習動機的學生, 例如, 所有人都要執行 TSP 的結果, 知道不到十秒就可以算出 9 站的最佳解, 不需要基因演算法。 要求學習動機高的學生修改部分的程式內容, 觀察程式結果的變化。 也將增加實際應用中的考量面向, 例如旅遊停留所需要的時間、 或者特定地點吃飯的限制等等。
也將採用周信宏老師的建議,讓學生針對課程之外的問題,做一個完整的整理與報告,培養主動學習的能力。
沒有留言:
張貼留言