郭惠芳,劉寒冰
(黃河科技學院 計算機科學系,河南 鄭州 450063)
算法設計與分析課程講授各類經典算法的基本策略和算法設計與分析的基本技巧,為學生打開了更為廣闊的視野。該課程歷來在專業(yè)教學中都屬于高階的、有挑戰(zhàn)性的課程[1-2],為此各院校就如何提高該課程教學效果與質量進行了有益的探索[3-4]。應用技術類院校培養(yǎng)人才的側重點是應用型人才,算法設計與分析課程對于培養(yǎng)學生分析、解決問題的能力,提高學生實際編程技能有重要的作用。然而課程抽象理論偏多,相當一部分學生的基礎知識不夠扎實,接受能力有限。每年課程剛開始時,學生對算法設計有較濃的興趣,這個從他們熱切的眼神中可以看出來,但隨著課程的推進,部分學生遇到了一些困難,學習參與度降低,課堂效率降低。
為了改善算法設計與分析課程的教學效果,希望通過研討課的模式,在教學過程中啟發(fā)學生研究和探索的興趣,培養(yǎng)學生發(fā)現問題、提出問題、解決問題的意識和能力。首先引導學生在課下進行自“研”:充分利用老師提供的及網上的學習資源,就布置的專題查閱資料,研究其內在原理和過程。然后在課上的“討”:匯報研究的內容,并將研究過程中遇到的問題提出來討論。我們?yōu)樵撜n程設計了1個課外開放專題、4個課內專題,課前2周布置。
基于前序數據結構課程的學習,引導學生了解算法在各行各業(yè)中的運用,如大數據挖掘中的算法、導航系統(tǒng)中的算法等。督促學生查閱在各個應用領域得到較好應用的算法,通過查找相關資料,引導大家了解算法應用的不同業(yè)務領域,并寫出報告,在研討課中進行匯報與討論。
課內專題是在教材[5]的每類算法中選擇一個問題進行討論。
(1)分治法中選擇了快速排序,要求課下通過閱讀相關材料,給出快排中劃分方法的幾種實現,討論使用尾元素作為劃分基準的方法。
(2)動態(tài)規(guī)劃方法中選擇了最大子段和的求解,要求課下閱讀相關材料,分別給出窮舉法、分治法以及動態(tài)規(guī)劃方法的實現,討論3種方法的時間復雜度,體會相同問題的不同算法效率的差別。
(3)貪心算法中選擇了貪心算法適用性的討論,以0-1背包和背包問題為案例,說明貪心算法的適用性,同時討論找零錢問題的貪心算法的適用性。
(4)回溯法和分支限界法選擇了迷宮問題進行討論,要求分別給出迷宮問題的回溯法(以深度優(yōu)先搜索順序)以及分支限界法(以廣度優(yōu)先搜索順序/最優(yōu)目標值優(yōu)先順序)的求解方法,并給出搜索軌跡,討論兩種方法的聯系及區(qū)別。
通過課下研究、課上討論,引導學生獨立思考,深入理解相關內容,逐步掌握經典算法的設計技巧,提高代碼編寫的能力,同時不斷樹立學習的自信心,提高自主學習的能力。
研討題目和要求布置一周后,發(fā)現學生課下研究的主動性不高,詢問后得知,獨立自主地選擇一個主題、查資料進行研究對于他們還有些陌生。經過在線的跟蹤指導,學生上報了一些好的選題,例如,百度云秒傳功能的實現——淺談Hash算法、網易云音樂的推薦算法、地圖中最短路徑的搜索算法研究、遺傳算法、數獨算法、衛(wèi)星導航定位系統(tǒng)等。
在隨后的專題研究中,大部分學生有等、靠、拖的思想,部分學生研究、思考浮于表面,上交的匯報很大程度上是從網上摘抄下來且沒有自己的理解與思考的內容。在老師的持續(xù)督促及指導下,一部分學生查詢與消化相關專題的資料,課下進行了較為細致的研究,共有5組學生進行了課上匯報。課外專題匯報過程中,臺下的學生雖然有一定的興趣,但極少發(fā)言,大部分學生未能真正進入討論狀態(tài),主要原因是臺下學生很難明白臺上講的內容,課外專題的研討未能達到預期狀態(tài)。
課外專題研討的冷場說明,研討環(huán)節(jié)中的“研”完全依賴學生課下進行自主地學習與研究是有一定困難的,就一個完整問題進行研究,學生畏難情緒重,自學能力偏弱。僅僅開展形式上的研討教學,并不能達到預期,研討的內容必須根據不同的教學對象進行相應調整,于是我們將每個算法問題化整為零,降低研究難度,將部分完整專題分解為局部問題的討論。
1)快速排序。
我們將研討題目細分為4個子題目:①利用一個劃分實例演示以首元素為基準進行劃分的過程;②在前者基礎上,i、j指針輪流進行掃描后進行交換以及i、j掃描后即進行元素的移動,兩種方式分別進行演示;③以尾元素進行劃分基準,以實例演示劃分過程;④實例演示后,對照過程實現該過程的程序代碼。
分解后的每個子題目分配給一位學生準備,課上進行演示,由于難度降低,學生完成度高,其余學生對相應問題都有一定的知識基礎,學生在臺上的每個演示動作可能都反映了臺下部分學生的思路,學生容易進入狀態(tài),上臺同學積極思考,臺下同學積極討論,遇到困難時,學生就自告奮勇地上臺來進行糾正,討論氣氛完全達到了預期效果。參與度的提高帶來的是學習熱情的高漲。
2)貪心算法。
專題分為3個子題目:①背包問題的貪心算法實例演示;②0-1背包問題貪心法的失敗實例演示;③找零錢的貪心算法成功與失敗的實例演示。
該專題的子題目難度較低,學生參與度比較高,學生研究、討論得非常成功,在總結討論為何背包問題可以用貪心法求解,而0-1背包問題不一定能用貪心法得到最優(yōu)解時,大部分學生都能比較清晰地回答其關鍵所在。
3)迷宮問題。
被分解為3個子問題:①深度優(yōu)先的回溯解法;②廣度優(yōu)先的分支限界法;③針對后者的優(yōu)化手段有哪些?
學生對該問題表現了很大的興趣,前兩個學生分別演示了自己實現的程序,界面各有特色,并顯示了訪問路線,直觀地讓同學們看到了兩種方法的區(qū)別,優(yōu)劣一目了然。準備優(yōu)化方法的學生雖然沒有講到重點上,但是在老師的提示下,臺下的學生最終提出了比較好的優(yōu)化方法。經過這個專題的研討,學生對回溯法與分支限界法有了比較直觀的理解,增加了解決問題的自信心。在課堂討論過程中,涌現了一些有想法、有探索欲望的學生,還有一些學生展示了良好的表達能力,這些學生課下能夠主動與老師在線討論、交流課外學習的內容,研討的氛圍逐步建立。
以往在實驗課前,老師將上機題目布置下去,上機時由老師在實驗室輔導答疑,最后學生上交實驗報告,老師據此打分。這個過程中部分學生學習不夠認真、抄襲現象頻發(fā);還有一部分學生想獨立完成,但遇到問題沒有勇氣請老師來幫助,最終放棄。
將“研討”精神引入實驗室,激發(fā)學生想學習的潛在欲望。首先要求抽簽決定上機題目,老師貼近學生,及時發(fā)現學生的學習狀態(tài),主動詢問引導,鼓勵他們相互討論和幫助。老師對每位學生實施一對一答辯,再據此打分。這一點對學生促動很大,在實驗環(huán)節(jié)中自發(fā)地形成小組,進行討論,相互研討、學習的氣氛因而顯現。
打分是在答辯后進行,學生如果希望得到一個高分,就必須平時多下工夫,在老師面前有一個好的表現,如:為了搞清一個問題,常有學生中午在實驗室加班調程序,也有學生自己感覺分數低,經過持續(xù)的努力,要求老師再次考核,這些現象都令老師感到欣慰,沒有比學生自己想要學更好的學習方法了。
考核是檢驗教學方法優(yōu)劣和督促學習的一種有效手段。本次課程考核分為平時考核、實驗考核以及期末考核。實驗考核方法上面已有闡述,平時考核中增加了課堂測試環(huán)節(jié)。
課內研討的氣氛調動了大部分同學的積極性,但為了防止部分同學只看熱鬧,學習中不求甚解、浮于表面,在課堂上增加了測試環(huán)節(jié),學生平時課堂的測試參與度及測試成績作為平時考核的一部分,計入課程最終考核。我們已在移動互聯網上提供課堂測試功能,有200道左右題目可供測試,在課堂上學生利用手機進行回答,老師可以快速了解學生每個階段的知識掌握情況。課堂上增加過程檢查環(huán)節(jié),督促和幫助學生及時進行復習,同時促進學生獨立地完成作業(yè)。
計算機科學專業(yè)班沒有進行研討課的試點,但是在課堂上對大部分的算法實例都采用研討式的講法,只是未進行課外專題的研究和討論,同時也增加了課堂測試環(huán)節(jié)。全班人數30人,期末考核平均分為80.3,總分分布如圖1虛線所示。相比前二屆(前后試卷難度相當)的成績(78分左右)有明顯提高。
軟件工程專業(yè)是研討課試點班,全班共45人,平均分81.4,總分的分布情況如圖1實線所示,成績相比前二屆的學生成績有較大提高,橫向比較,相比計算機科學專業(yè)班的成績也有些優(yōu)勢。軟件工程專業(yè)出現一個99分最高分,90分以上有9人,這部分學生知識掌握得很好,失分基本是由個別的填空或問答題的回答不準確造成的。80分以上有18人,這部分學生對知識的掌握基本達到預期,在分析和設計題中有少量失分,基本概念部分(問答題或填空題)掌握較好。
圖1 計算機專業(yè)與軟件專業(yè)期末卷面分分布圖
從課內專題研討的情況看,本次研討課的開展在提高學生學習興趣和學習參與度方面有明顯效果;期末考試中極低分數明顯減少,同時80分以上同學的占比顯著提高,這些都說明,在實驗環(huán)節(jié)營造研討氛圍、在課堂測試環(huán)節(jié)保證學習熱情持久性等措施對于提高學習成績是有效果的。
培養(yǎng)應用型人才,首要的是樹立學生的自信心和鼓勵學生探索的勇氣,這是培養(yǎng)任何能力和素養(yǎng)的前提,研討課的開展也必須遵循這個前提。要取得良好的教學效果,研討教學的形式不是最重要的,重要的是以下3個關鍵點:①內容大于形式,研討課的內容組織要能真正調動大部分學生的積極性;②態(tài)度決定成敗,貫徹教學始終的研討態(tài)度與習慣要能挖掘出學生潛在的學習欲望;③過程控制是保障,從每個教學環(huán)節(jié)督促與檢查是研討課取得成績的必要條件。本次研討課雖然取得了一些成績,但教學本身就是一個不斷研究與討論的過程,教學研討抑或是研討教學都將繼續(xù)進行,因為研討本就是一種工作、學習態(tài)度,作為教師,我們要傳遞的就是,知識絕不僅僅是老師說的、書上寫的,更多的要通過自己的探究與檢驗才能得到。
參考文獻:
[1]陳翔. 面向算法設計與分析課程的翻轉課堂教學模式研究[J]. 計算機教育, 2016(8): 147-151.
[2]李志欣. 算法設計與分析課程的教學探索與實踐[J]. 教育教學論壇, 2013(13): 218-219.
[3]秦董洪, 陳智勇. 算法設計與分析課程教學研究[J]. 計算機教育, 2013(11): 98-101.
[4]林劼, 戴波. 項目驅動型算法設計與分析課程教學方法[J]. 計算機教育, 2014(9): 69-71.
[5]王曉東. 計算機算法設計與分析[M]. 4版. 北京: 電子工業(yè)出版社, 2012: 20-22.