劉曉璐



摘 要:針對算法分析與設計課程的教學實際,文章分析了該課程教學模式的局限性和傳統(tǒng)的實踐教學中存在的問題,提出將ACM-ICPC競賽模式引入該課程教學的觀點,開發(fā)了一個基于ACM-ICPC模式的程序測評系統(tǒng),并應用在算法分析與設計課程的實踐教學中,取得了良好的教學效果。
關鍵詞:ACM-ICPC;算法分析與設計;實踐教學
中圖分類號:G642 文獻標志碼:B 文章編號:1673-8454(2015)10-0065-03
一、引言
算法分析與設計是面向設計的計算機專業(yè)核心課程,主要通過對經典算法的學習和研究,使學生掌握算法的設計策略和算法復雜度的分析方法,培養(yǎng)學生分析和解決實際問題的能力,為開發(fā)高效的軟件系統(tǒng)奠定了堅實的基礎。該課程教學內容繁多,涉及的知識面很廣,主要內容包括算法分析方法、遞歸算法、分治算法、貪心算法、動態(tài)規(guī)劃、回溯算法、分支限界、近似算法、概率算法等經典的算法,覆蓋了多項式、數論、矩陣、集合、圖論、幾何、模式匹配等數值和非數值計算問題。
目前,各高校該課程分配的課時普遍較少,教學方法也都是以講解為主,即使設置了實驗課,在實踐環(huán)節(jié)通常也只是一味地對算法進行驗證,很少考慮到算法的運行效率分析、測試數據的規(guī)模以及實際的應用場景。學生對算法的學習主要以理解和記憶為主,缺乏對知識的重構和對算法的靈活運用,遇到實際問題便無從下手。而且,在傳統(tǒng)實踐教學中,學生抄襲代碼的情況嚴重,不能有效提高學生的實踐能力,無法體現實踐教學的真正作用。在這種教學模式下,學生缺乏對實際問題進行抽象和分析的能力,思維創(chuàng)新和實踐能力難以得到有效提高。本文結合我校實際教學情況,將ACM-ICPC競賽模式與算法分析與設計課程的建設相結合,達到了良好的教學效果。
二、課程現狀
算法分析與設計課程的建設在我校起步較晚,我校從2010年開始招收計算機科學與技術專業(yè)本科學生,從2012年開始為計算機科學與技術專業(yè)學生開設算法分析與設計課程。第一屆課程只有理論課,學生缺少實踐機會。該課程的開設是面向計算機科學與技術專業(yè)大三的學生,學生在學習該課程之前,已經學習了C/C++程序設計、數據結構、Java程序設計、高等數學和離散數學等課程,但是由于學生欠缺良好的計算思維,邏輯分析能力相對不足,編程實踐能力仍然比較弱,學生在學習該課程時倍感吃力。
目前,我校在算法分析與設計課程信息化建設方面有許多不足,主要體現在以下幾點:
(1)課程之間的聯(lián)系不夠緊密
算法分析與設計課程與其他課程的關系是很密切的,如數據結構,它們之間相互作用,從而提高計算機專業(yè)學生的實踐能力,為學院培養(yǎng)高素質的應用型人才。由于這些課程的前后都沒有很好地銜接,課程之間的重點和難點沒有對應上,所以學生在上算法分析與設計課程時需要重新復習之前所學的課程,從而增加了學生學習的工作量。
(2)教學資源不足
當前課程并沒有信息化系統(tǒng)的支持。學生只能通過網絡搜索所需的資源,獲取教師的PPT也只能通過教師,教學資源沒有實現整合和共享。
(3)編程競賽平臺不多
程序設計能力的提升需要學生多思考多編程,而這方面實踐能力的獲取最有效的方式就是競賽活動。在參加或舉辦程序設計類競賽方面,學生只參與了國內的“藍橋杯”這一個程序設計類競賽,學院內部并沒有開展此類競賽活動。
三、ACM-ICPC模式下的課程建設
1.ACM-ICPC在課程中的作用
ACM國際大學生程序設計競賽(ACM-ICPC)是由美國計算機協(xié)會(ACM)主辦的,是一項旨在展示大學生創(chuàng)新能力、團隊精神和在壓力下編寫程序、分析和解決問題能力的年度競賽。經過40多年的發(fā)展,ACM-ICPC已經發(fā)展成為最具影響力的大學生計算機競賽。競賽時間為5個小時,重點考察選手的算法和程序設計能力。選手通過網絡提交程序,評委負責將結果(正確或出錯的類型)通過網絡盡快返回給選手。
將ACM-ICPC競賽模式引入算法分析與設計的教學中,可以激發(fā)學生的主動學習積極性,鼓勵學生勤思考、多實踐,相對于傳統(tǒng)的實踐教學具有以下幾方面的優(yōu)勢:
(1)在網上進行實踐教學,沒有時間和空間的局限性。教師可以在測評系統(tǒng)中對同一個實驗項目布置多個難度各異的題目,學生可以根據自己的掌握情況,從易到難選擇合適的時間完成訓練題目。學生完成編程提交代碼后可以立刻得到評測結果,這樣可以激發(fā)學生的學習熱情。教師也可以分析學生提交程序是否正確或錯誤,并進行針對性的講解。
(2)對創(chuàng)造校園的學術交流氛圍有良好的促進作用。學生在課余時間通過在網上提交自己編寫的程序源代碼,自主進行算法和程序的交流,有利于培養(yǎng)學生的學術修養(yǎng),實現學生與教師、學生與學生之間的交流和互動。
(3)減輕教師實踐教學時的指導負擔。傳統(tǒng)的實踐教學在機房進行,教師需要在整個機房進行巡視,為有疑問的同學進行解答。這讓教師在實踐教學中的指導負擔非常繁重,教師的指導范圍也不能全面覆蓋整個班級,在一定程度上打擊了學生的積極性。而ACM-ICPC競賽模式的在線測評系統(tǒng)可以對學生提交的作業(yè)進行評測,大大減輕了教師的負擔。
2.測評系統(tǒng)的設計與開發(fā)
我們將基于ACM-ICPC競賽模式的在線測評技術引入算法分析與設計課程的教學中,開發(fā)了一個程序在線測評系統(tǒng)。該系統(tǒng)基于Java EE,是一個程序在線評判、程序設計競賽和交流的平臺,可不斷擴展題庫供學生進行程序設計練習,系統(tǒng)自動對提交的程序源代碼進行編譯、運行并評判程序的正確性。系統(tǒng)可供課程日常訓練和網上實時競賽使用,也具備站內交流和站內全文檢索功能。考慮到后期改進和后續(xù)開發(fā)的需要,系統(tǒng)的開發(fā)采用的是目前主流的MVC架構,使用的是Struts框架。系統(tǒng)有兩個版本的評判模塊,一個基于純Java,另一個基于C++,兩者均可在Windows平臺下運行。
學生在系統(tǒng)提交程序后,系統(tǒng)先將程序保存至數據庫,再寫入評判隊列,由系統(tǒng)評判內核進行編譯、運行并返回結果,返回的結果類型有AC、WA、RTE、TLE、PE、MLE、CE。每個題目可能有多個測試數據,內核在讀取主系統(tǒng)傳遞給它的參數后,編譯程序,生成可執(zhí)行文件,之后對于每個測試數據運行一次“驗證測試數據”的操作,只有當所有測試數據均驗證無誤,才返回AC,如果在某次驗證返回錯誤,則返回相應的錯誤信息,在任何時候遇意外終止將返回RTE。評判內核的程序流程如圖1所示。
系統(tǒng)用戶分為四種:普通用戶、高級用戶、論壇版主及系統(tǒng)管理員。任何學生都可注冊成為普通用戶。普通用戶可以做練習題,提交程序并得到系統(tǒng)的評判和結果反饋;可以根據程序提交情況參與用戶排名;擁有并可使用自己的站內信箱;可以查看、保存和管理自己提交的源代碼;可以在論壇發(fā)帖,參與問題討論;可以參加程序設計競賽,并查看比賽結果和統(tǒng)計數據。任何解答題目超過20道的普通用戶,可自動升級為高級用戶。高級用戶擁有普通用戶的所有權限,還可以上傳題目和測試數據,并可對自己上傳的題目進行管理、修改等。高級用戶上傳的題目,經管理員確認后,便可加入系統(tǒng)的正式題庫,系統(tǒng)在題目信息中記錄上傳題目者的相關信息。論壇版主為系統(tǒng)管理員授予,擁有普通用戶的所有權限,同時對相應的論壇板塊擁有管理權。系統(tǒng)管理員管理系統(tǒng)的日常運行,擁有所有的管理權限,需要對題目和測試數據進行篩選,檢查系統(tǒng)運行情況,組織程序設計競賽。
3.課程設置
結合我校實際情況,我們在算法分析與設計課程的實踐教學內容上設計了遞歸算法、分治算法、動態(tài)規(guī)劃算法、貪心算法、回溯算法、分支界限算法共6個經典算法的實驗項目。由于實踐教學課時有限,傳統(tǒng)的教學方式每個實驗項目只能設計2-3道題目。引入ACM-ICPC模式之后,學生可以利用課余時間通過網絡完成程序設計,每個實驗項目題量增加到6-8個,題目難度各異,學生可以根據自己的知識掌握程度和能力選擇合適的時間完成。較容易的題目可以先完成,具有一定的綜合性、難度較大的題目,可以在有相當的訓練量之后完成。
這種循序漸進的訓練方式,更有利于學生對算法原理的理解和掌握,也更有利于形成由淺入深的思維模式,有效提高學生的分析問題、解決問題的能力。測評系統(tǒng)中的部分習題如表1所示。
課程的考核參考學生提交程序的次數、通過率、提交程序的難度等,作為學生平時成績的考核依據,這樣可以鼓勵和督促學生積極參與實踐。
四、課程建設實踐成果
實施ACM-ICPC競賽模式的程序在線測評系統(tǒng)以后,學生的學習積極性得到了較大的提高。學生對經典算法的掌握程度和實踐能力也大大提高了。
學生在各種全國性考試和比賽中取得了較好的成績。以我校參加“藍橋杯”全國軟件專業(yè)人才設計與創(chuàng)業(yè)大賽的情況為例,不僅在報名人數上大幅增長,獲獎人數和獲獎等級也有了明顯的提高,具體如圖2所示。
在課程的實踐教學中,學生設計算法的訓練量加大,平均每人每學期完成習題數量為34題,較實施前增長88.9%。學生的自主學習能力有所提高,教師在實驗課上的空閑率由原來的0.4%增長到33.3%,學生對教師的依賴程度大大降低。
五、結語
基于ACM-ICPC模式的算法分析與設計課程將理論學習與實際操作相結合,注重培養(yǎng)和提高學生分析和解決實際問題的能力,以公平、公正、公開的競爭形式帶動學生的自主學習,調動學生交流和研究的積極性,為課程的開展提供了良好的氛圍。在后續(xù)的研究和開發(fā)中,我們將把基于ACM-ICPC模式的程序測評系統(tǒng)擴展到全系范圍內的更多的程序設計類課程。
參考文獻:
[1]龔宇平,梁麗.計算機專業(yè)大學生創(chuàng)新思維的培養(yǎng)[J].教育與職業(yè),2014(8).
[2]陸慧.應用型本科高校創(chuàng)新型人才培養(yǎng)存在的問題與對策[J].教育與職業(yè),2013(35).
[3]趙春風.基于J2EE技術ACM競賽程序在線評測系統(tǒng)的設計與實現[D].廈門:廈門大學,2013.10.
[4]李華,趙建平,李奇等.基于ACM-ICPC的算法設計與分析課程改革[J].計算機教育,2013(7).
[5]趙暉,付秀花.計算機語言程序設計課程的教學創(chuàng)新[J].教育與職業(yè),2013(23).
[6]王偉嘉,張洪萍,寧亞輝等.關于《數據結構》課程與ACM-ICPC競賽結合的探討[J].計算機工程與科學,2014(S1).
[7]芶生平,楊鵬,汪小平等.以ACM/ICPC競賽為載體 探索課程體系建設與創(chuàng)新人才培養(yǎng)新模式[J].中國大學教學,2010(7).
[8]ZHU Jie-ao, SUN Mian, LIU Xue, LI Hao. Learning Software Engineering through Experience of ACM-ICPC Training and Practicing Exercises[C].Proceedings of 2010 Third International Conference on Education Technology and Training(Volume 1),2010.11.
(編輯:李曉萍)