陳 貞
(莆田學(xué)院 信息工程學(xué)院,福建 莆田 351100)
“數(shù)據(jù)結(jié)構(gòu)與算法”是計(jì)算機(jī)專業(yè)的核心課程之一,在計(jì)算機(jī)本科教學(xué)中起著承上啟下的作用.這門課程教學(xué)的核心在于通過數(shù)據(jù)結(jié)構(gòu)各種概念的講解讓學(xué)生能夠較全面地理解數(shù)據(jù)結(jié)構(gòu)所要講授的內(nèi)容,然后通過各種算法的處理與實(shí)現(xiàn),掌握不同數(shù)據(jù)結(jié)構(gòu)及算法的特點(diǎn),了解在軟件設(shè)計(jì)中如何用到數(shù)據(jù)結(jié)構(gòu)的原理來解決問題[1].“數(shù)據(jù)結(jié)構(gòu)與算法”課程的先修課程中有一門是語(yǔ)言程序設(shè)計(jì),掌握好一門程序設(shè)計(jì)語(yǔ)言對(duì)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)這門課程中算法的實(shí)現(xiàn)會(huì)起到很好的幫助,同時(shí)這門課程也是計(jì)算機(jī)中其它專業(yè)的先修課,如操作系統(tǒng)、編譯技術(shù)、數(shù)據(jù)庫(kù)概論等等.在很多的科學(xué)計(jì)算或模擬試驗(yàn)中,都會(huì)使用到各種的數(shù)據(jù)結(jié)構(gòu)和算法來解決,是設(shè)計(jì)應(yīng)用軟件的基礎(chǔ)工具.
“數(shù)據(jù)結(jié)構(gòu)與算法”這門課程作為一門理論課,不像flash、網(wǎng)站設(shè)計(jì)或數(shù)據(jù)庫(kù)等課程,在學(xué)習(xí)的過程就會(huì)見到效果,它的操作性比較強(qiáng).而學(xué)生常常會(huì)認(rèn)為它的理論性太強(qiáng),概念過多,相對(duì)較為枯燥,一開始接觸就感覺難以理解,也不清楚具體怎么用,所以雖然對(duì)于課程在態(tài)度上是重視的,但學(xué)習(xí)起來會(huì)覺得相當(dāng)茫然,不知道從何入手;而到課程中期時(shí),隨著內(nèi)容的逐漸深入,學(xué)生就會(huì)覺得理論過多,內(nèi)容過于枯燥,算法無法實(shí)現(xiàn),慢慢失去興趣;所以到課程結(jié)束時(shí),大多學(xué)生不清楚自己具體學(xué)到了什么,更不用說怎么去用所學(xué)的數(shù)據(jù)結(jié)構(gòu)知識(shí)去解決問題了.
為了推動(dòng)教學(xué)方式、教學(xué)手段、學(xué)習(xí)方式的創(chuàng)新和改革,我們把實(shí)踐技能培訓(xùn)和創(chuàng)新能力培養(yǎng)作為課程建設(shè)的主要目的,通過不同難度的綜合設(shè)計(jì)性實(shí)驗(yàn),定期開展課程學(xué)習(xí)研討會(huì),引導(dǎo)學(xué)生探索“探究性學(xué)習(xí)、自主性學(xué)習(xí)、合作性學(xué)習(xí)、實(shí)踐性學(xué)習(xí)”等新型的學(xué)習(xí)方式,提高學(xué)習(xí)效果.
如何培養(yǎng)學(xué)生學(xué)習(xí)這門課程的興趣,是我們?cè)诮虒W(xué)中一直在努力的,當(dāng)然這是一個(gè)比較復(fù)雜的系統(tǒng)問題.在培養(yǎng)興趣的過程中,我們需要注意對(duì)學(xué)生興趣的及時(shí)引導(dǎo)或轉(zhuǎn)移,同時(shí)在課堂教學(xué)中,經(jīng)常對(duì)學(xué)生進(jìn)行興趣強(qiáng)化.如教學(xué)中讓學(xué)生了解所學(xué)知識(shí)在現(xiàn)實(shí)生活中的具體應(yīng)用,讓學(xué)生看到一種實(shí)用軟件產(chǎn)品中用到所學(xué)的知識(shí),所學(xué)有所用,這樣就會(huì)大大激發(fā)學(xué)生濃厚的學(xué)習(xí)興趣[2].
興趣的培養(yǎng)需要在多方面給予學(xué)生引導(dǎo).在教學(xué)手段上以多媒體技術(shù)和網(wǎng)絡(luò)技術(shù)為依托,制作高質(zhì)量的多媒體課件、算法動(dòng)態(tài)演示系統(tǒng)和教學(xué)網(wǎng)站.在教學(xué)中,學(xué)生經(jīng)常會(huì)對(duì)一些算法的過程難以理解,通過圖形和動(dòng)態(tài)演示的方式將這些難以理解的算法形象地表示出來,讓學(xué)生看到算法執(zhí)行的動(dòng)態(tài)過程,將抽象的知識(shí)具體化,這樣有助于學(xué)生對(duì)抽象問題的理解.
對(duì)課堂講授內(nèi)容的把握上,要有張有弛,吸引學(xué)生的注意力.如何在課堂上激發(fā)學(xué)生的探究興趣及熱情,是看我們教師如何把握好課堂的教學(xué).在教學(xué)中可以選擇一些基礎(chǔ)、本質(zhì)的知識(shí)點(diǎn),通過“案例”的引導(dǎo)與分析,讓學(xué)生在引導(dǎo)中共同思考,理解概念,把握要點(diǎn),同時(shí)激發(fā)他們的探究興趣和熱情.例如在介紹隊(duì)列時(shí),可以通過“食堂排隊(duì)買飯”的現(xiàn)實(shí)生活作為案例,引入隊(duì)列的概念,分析隊(duì)列的特點(diǎn).食堂排隊(duì)的過程就是一個(gè)隊(duì)列的操作過程,最先排隊(duì)的同學(xué)排在第一個(gè),他也是最先能打到飯的人,而后面的同學(xué)在排隊(duì)的過程只能排在隊(duì)尾,這樣的一個(gè)過程等同隊(duì)列插入、刪除操作,即按照先進(jìn)先出原理是一樣的.通過這樣一個(gè)現(xiàn)實(shí)的生活案例讓學(xué)生理解隊(duì)列是一種操作受限的線性表、進(jìn)隊(duì)和出隊(duì)的操作,以及隊(duì)列的先進(jìn)先出的特點(diǎn).這也就是通過案例中用到的知識(shí)點(diǎn)來是解決算法,分析過程,得出結(jié)論.與此同時(shí),協(xié)助和指導(dǎo)學(xué)生主動(dòng)建構(gòu)同類知識(shí),如講解棧的概念及操作,讓學(xué)生舉例說明現(xiàn)在生活中何種情況是屬于棧,然后比較棧與隊(duì)列的操作的相同與不同.它的目的就是通過“案例”的基礎(chǔ)知識(shí)的掌握使學(xué)生舉一反三,并提高和發(fā)展他們的創(chuàng)造能力.
又例如在講解各種經(jīng)典排序算法中的希爾排序時(shí),因?yàn)橄柵判虻臅r(shí)間耗費(fèi)與算法中“增量”序列的函數(shù)有關(guān),這個(gè)分析是一個(gè)復(fù)雜的問題,而到目前沒有人求得一種最好的增量序列,大量的研究只是得出一些局部的結(jié)論.為此,讓學(xué)生以課外分組的形式,查閱一些相關(guān)資料與研究,討論目前所提出的一些較理想的增量取法,并將這些取法通過實(shí)驗(yàn)來證明其優(yōu)越性.通過這種課外探索的方法激發(fā)學(xué)生上機(jī)編程的興趣,也可以讓學(xué)生逐漸學(xué)會(huì)探索實(shí)踐的創(chuàng)新精神.
另外在講授一些具有一定歷史意義的具體課程內(nèi)容時(shí),如哈夫曼樹,迪杰斯特拉算法等,除講解其基本原理以外,還可以對(duì)當(dāng)時(shí)的分析過程、設(shè)計(jì)過程給與分析,以激發(fā)學(xué)生的興趣,和對(duì)問題的探索精神,同時(shí)培養(yǎng)他們自己去查閱資料的能力.在課外的知識(shí)探索中引導(dǎo)學(xué)生深入思考,調(diào)動(dòng)學(xué)生學(xué)習(xí)的主動(dòng)性.
在課堂上通過典型案例的講解,對(duì)課程重點(diǎn)內(nèi)容提供一些思考題、學(xué)科前沿問題供學(xué)生討論,引導(dǎo)學(xué)生進(jìn)行深入思考,激發(fā)學(xué)生的創(chuàng)新思想,在教與學(xué)中充分調(diào)動(dòng)學(xué)生學(xué)習(xí)的主動(dòng)性,提高學(xué)生自學(xué)探索的能力,通過所學(xué)知識(shí)來分析問題、解決問題,在引導(dǎo)與自我探索中獲取新知識(shí),提高理論聯(lián)系實(shí)際能力.
“紙上得來終覺得淺,絕知此事要躬行”.一些學(xué)生感覺“數(shù)據(jù)結(jié)構(gòu)與算法”課程難以理解,學(xué)習(xí)起來困難的一部分原因在于將理論與實(shí)踐脫離了[3].作為一門理論和實(shí)際緊密結(jié)合的課程,在整個(gè)實(shí)踐教學(xué)過程中,如何選擇實(shí)踐題目,既能從學(xué)生的實(shí)際學(xué)習(xí)能力出發(fā),又能使得學(xué)生理解和掌握課程知識(shí)體系中的理論和抽象概念,是一項(xiàng)重要的工作.學(xué)生只有通過適當(dāng)?shù)膶?shí)踐訓(xùn)練,才能理解掌握課程內(nèi)容,通過實(shí)踐,理解各類設(shè)計(jì)實(shí)現(xiàn)方法,提高軟件系統(tǒng)的實(shí)踐能力.
實(shí)踐教學(xué)需要循序漸進(jìn),從基礎(chǔ)算法,技能訓(xùn)練再到綜合設(shè)計(jì)和開發(fā)訓(xùn)練,每一層次的實(shí)踐需要學(xué)生達(dá)到理論課堂知識(shí)與實(shí)踐相結(jié)合的目的.
(1)基礎(chǔ)訓(xùn)練:每一次的課堂都會(huì)涉及每一種數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識(shí),根據(jù)課堂教學(xué)中講授過的內(nèi)容,布置一些針對(duì)本堂課基礎(chǔ)知識(shí)點(diǎn)的小型練習(xí)題,一次實(shí)驗(yàn)解決一個(gè)問題,讓初學(xué)者易于接受.也通過這種簡(jiǎn)單直接的驗(yàn)證性算法,讓學(xué)生樹立編程的信心.
(2)技能訓(xùn)練:掌握了基礎(chǔ)算法之后,需要訓(xùn)練通過基礎(chǔ)算法來解決實(shí)際問題,如,多項(xiàng)式的加法、乘法運(yùn)算,數(shù)制轉(zhuǎn)換等問題,讓學(xué)生思考解決這樣一些問題需要用到的存儲(chǔ)結(jié)構(gòu),及如何通過基礎(chǔ)算法來實(shí)現(xiàn).通過一些與實(shí)際問題相結(jié)構(gòu)的簡(jiǎn)單技能訓(xùn)練,讓學(xué)生在掌握基本算法的基礎(chǔ)上,靈活運(yùn)用來解決問題,從面激發(fā)學(xué)生實(shí)踐的興趣.
(3)綜合訓(xùn)練:綜合性實(shí)驗(yàn)?zāi)康氖菫榱伺囵B(yǎng)學(xué)生對(duì)知識(shí)的綜合應(yīng)用能力,運(yùn)用不同的思維方式分析問題、解決問題.這部分的訓(xùn)練可以安排在課程教學(xué)內(nèi)容過半之后,在題目的選擇上應(yīng)盡量覆蓋多個(gè)章節(jié)的知識(shí)點(diǎn),學(xué)生在綜合性實(shí)驗(yàn)中需要通過需求分析,比較選擇不同數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的不同.如在講完線性表這一類型的結(jié)構(gòu)后,可以安排“迷宮求解”做為線性表部分的綜合性實(shí)驗(yàn),讓學(xué)生提出通過棧和隊(duì)列兩種不同方式來實(shí)現(xiàn)路徑的求解;而講解完圖的數(shù)據(jù)結(jié)構(gòu)后,就可以以學(xué)校的校園平面圖作為一個(gè)綜合性設(shè)計(jì)題目,設(shè)計(jì)校園的導(dǎo)游圖,讓學(xué)生綜合運(yùn)用遍歷、最短路徑等知識(shí)來解決實(shí)際問題,如為用戶提供學(xué)校景點(diǎn)信息的查詢,查找任意兩景點(diǎn)之間的最短路徑,等等.此類實(shí)驗(yàn)旨在培養(yǎng)學(xué)生綜合應(yīng)用知識(shí)的能力,在解決問題中靈活利用基本算法.
(4)開發(fā)訓(xùn)練:現(xiàn)代的軟件開發(fā)需要團(tuán)隊(duì)的合作,而課程的開發(fā)訓(xùn)練可能與實(shí)際的軟件開發(fā)有一定的距離,但這一部分的訓(xùn)練,目的是通過分組實(shí)施此類實(shí)驗(yàn),在實(shí)驗(yàn)過程中培養(yǎng)小組成員結(jié)構(gòu)化程序、模塊化程序設(shè)計(jì)的方法和能力,提高編寫程序的技巧和軟件設(shè)計(jì)的能力.考慮學(xué)生的差異性,設(shè)計(jì)不同的問題.學(xué)生可以通過分組,查閱資料,來選擇自己擅長(zhǎng)的主題,確定實(shí)驗(yàn)題目.學(xué)生確定完實(shí)驗(yàn)題目,需要按照軟件工程開發(fā)流程來做,包括需要提交需求分析、模塊設(shè)計(jì),撰寫實(shí)驗(yàn)報(bào)告,包括分析數(shù)據(jù)結(jié)構(gòu),程序代碼及測(cè)試數(shù)據(jù),以及實(shí)驗(yàn)的總結(jié)報(bào)告,包括實(shí)驗(yàn)過程的一些思路,問題的分析及解決問題的討論.這一部分的訓(xùn)練不一定得解決一個(gè)相當(dāng)復(fù)雜的問題,但需要學(xué)生學(xué)會(huì)團(tuán)隊(duì)的分工合作,鍛煉他們的合作能力,在團(tuán)隊(duì)的交流中拓展思路.
教學(xué)中針對(duì)探索和批判這兩個(gè)關(guān)鍵因素,培養(yǎng)學(xué)生主動(dòng)獲取知識(shí)、進(jìn)一步綜合已有的知識(shí)去創(chuàng)造新知識(shí)的能力.“數(shù)據(jù)結(jié)構(gòu)與算法”這門課程的理論性相當(dāng)強(qiáng),如果只是一味地強(qiáng)化課堂教學(xué),將所有的知識(shí)點(diǎn)面面俱到,滴水不漏,反而不利于學(xué)生問題的提出[4].許多知識(shí)點(diǎn)的把握需要由學(xué)生自主去體會(huì)、思考與探究.所以課堂上需要培養(yǎng)學(xué)生的問題意識(shí),引導(dǎo)學(xué)生做些課外的資料查找,并定期在課堂上請(qǐng)學(xué)生將自己興趣的問題及資料同大家一起分享,從而鍛煉學(xué)生自主學(xué)習(xí)與鉆研的能力,引導(dǎo)學(xué)生做科研的興趣.
例如在介紹“查找”這一章時(shí),教師可以先引入實(shí)際學(xué)校對(duì)學(xué)生管理系統(tǒng)的操作出發(fā),引出“查找”的需求;帶領(lǐng)學(xué)生用已經(jīng)掌握的知識(shí)去解決學(xué)生系統(tǒng)的存儲(chǔ)問題,例如順序表或鏈表,數(shù)據(jù)類型的結(jié)構(gòu)等等,再引入散列表的概念;引導(dǎo)學(xué)生根據(jù)實(shí)際需求分析查找的要求,給出順序、折半、分塊、散列法等的查找方法;分析這些方法的優(yōu)缺點(diǎn)、復(fù)雜度,思考在什么情況下適合用什么樣的解決方案;同時(shí)讓學(xué)生通過實(shí)驗(yàn),比較各種方法實(shí)現(xiàn)查找的時(shí)間復(fù)雜度.另外啟發(fā)學(xué)生除了教材所用的方法,是否還有其它方法或是對(duì)這些方法的改進(jìn),引導(dǎo)他們課外去查閱資料.在這個(gè)過程中,就有學(xué)生發(fā)現(xiàn)有人將折半查找min=(low+high)*0.5中的參數(shù)0.5改進(jìn)為0.618(黃金分割線),于是就與同學(xué)討論,實(shí)驗(yàn)比較,通過排序時(shí)間來看哪種算法更優(yōu)化.這樣,無形中激發(fā)了學(xué)生編程的熱情,也讓學(xué)生逐漸養(yǎng)成了探索研究的創(chuàng)新精神.
《數(shù)據(jù)結(jié)構(gòu)與算法》是一門理論與實(shí)際結(jié)構(gòu)非常密切的專業(yè)基礎(chǔ)課,需要培養(yǎng)學(xué)生嚴(yán)謹(jǐn)?shù)乃季S,同時(shí)也需要培養(yǎng)學(xué)生應(yīng)用能力及獨(dú)立思考的創(chuàng)新能力.在課程教學(xué)過程中注重培養(yǎng)學(xué)生的興趣,采用“問題化、層次化、多樣化”的模式,在實(shí)際教學(xué)中取得了較好的效果.在實(shí)踐中,通過由基礎(chǔ)到復(fù)雜的訓(xùn)練模式,幫助學(xué)生循序漸進(jìn)提高編程能力,增強(qiáng)了學(xué)生解決問題的信心.課堂外引導(dǎo)學(xué)生通過查閱資料,提高自主學(xué)習(xí)的能力,培養(yǎng)科研意識(shí).
〔1〕嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu) C(語(yǔ)言版)[M].北京:清華大學(xué)出版社,1997.
〔2〕承蓓.高職數(shù)據(jù)結(jié)構(gòu)教學(xué)中三個(gè)情境導(dǎo)入設(shè)計(jì)案例[J].信息與電腦(理論版),2014(9).
〔3〕鄧桂英,高麗萍,李銳等.“數(shù)據(jù)結(jié)構(gòu)”教學(xué)中提高學(xué)生的編程能力淺談[J].計(jì)算機(jī)時(shí)代,2013(8).
〔4〕曹春萍,陳平.問題驅(qū)動(dòng)法在“數(shù)據(jù)結(jié)構(gòu)”教學(xué)中的應(yīng)用探討[J].中國(guó)電力教育,2014(23).