陳倩 歐陽驥 胡傳福
(東莞理工學(xué)院 計算機(jī)學(xué)院,廣東東莞 523808)
數(shù)據(jù)結(jié)構(gòu)與算法是計算機(jī)專業(yè)的技術(shù)基礎(chǔ)和主干必修課,課程既有嚴(yán)格的理論證明,又具有很強(qiáng)的構(gòu)造性和應(yīng)用性,要求學(xué)生通過課程的學(xué)習(xí)掌握常用的基本數(shù)據(jù)結(jié)構(gòu)和基本算法設(shè)計策略。數(shù)據(jù)結(jié)構(gòu)與算法課程內(nèi)容較多,難度比較大,所以學(xué)生應(yīng)具備較強(qiáng)的抽象以及抽象描述下的構(gòu)造思想和方法。通過幾年的課程教學(xué)和研究,我們發(fā)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和算法這門課程在教學(xué)過程中容易出現(xiàn)以下問題:首先,純算法和理論的講解,內(nèi)容比較枯燥,學(xué)生容易失去學(xué)習(xí)興趣;其次,教師在教學(xué)過程中因為內(nèi)容較多,容易產(chǎn)生知識過度灌輸?shù)默F(xiàn)象,導(dǎo)致學(xué)生和老師的負(fù)擔(dān)都很重;最后,學(xué)生實踐中設(shè)計和應(yīng)用數(shù)據(jù)結(jié)構(gòu)和算法缺乏方法指導(dǎo),往往出現(xiàn)應(yīng)用時無所適從,不知道該如何開始和進(jìn)行的現(xiàn)象。
針對上述問題,本文提出了一種以問題為主導(dǎo),質(zhì)疑驅(qū)動的數(shù)據(jù)結(jié)構(gòu)與算法教學(xué)模式。這種教學(xué)模式圍繞問題組織教學(xué)內(nèi)容,并把教學(xué)過程分為提出問題、分析設(shè)計方案、實現(xiàn)方案和執(zhí)行驗證四個環(huán)節(jié),在每個環(huán)節(jié)中加入質(zhì)疑因素推動進(jìn)行。這種教學(xué)模式旨在通過實際問題的設(shè)置提高學(xué)生的學(xué)習(xí)興趣和主動性,教師引導(dǎo)學(xué)生在每個環(huán)節(jié)中通過對自己的不斷質(zhì)疑一步步的分析和解決問題,使學(xué)生不僅能掌握課堂理論知識,而且在質(zhì)疑過程中養(yǎng)成良好的工程分析和設(shè)計思維能力。
問題主導(dǎo),質(zhì)疑驅(qū)動的教學(xué)模式,首先需要教師圍繞問題設(shè)計教學(xué)內(nèi)容。設(shè)計的問題本身應(yīng)具有實際的業(yè)務(wù)背景,這樣的問題能夠?qū)W(xué)生產(chǎn)生吸引力,激發(fā)學(xué)生解決問題的興趣;問題難度要適中,太難學(xué)生容易失去信心,太簡單又缺乏挑戰(zhàn)性;問題最好能覆蓋若干個知識點,能有多種解決方案,讓學(xué)生在解決問題時能綜合運(yùn)用所學(xué)知識,對比各種方案的優(yōu)缺點。其次,質(zhì)疑驅(qū)動的教學(xué)模式始終把質(zhì)疑貫穿于所有教學(xué)環(huán)節(jié)。剛開始,質(zhì)疑以教師為主導(dǎo),在每個環(huán)節(jié)中通過質(zhì)疑學(xué)生進(jìn)入下一環(huán)節(jié)或返回上一環(huán)節(jié),到后面階段,引導(dǎo)學(xué)生自己對自己進(jìn)行不斷質(zhì)疑,驅(qū)動他們一步步設(shè)計出符合工程要求的數(shù)據(jù)結(jié)構(gòu)和算法,同時讓他們在這個過程中自己總結(jié)和體會算法設(shè)計的思路和方法。問題主導(dǎo),質(zhì)疑驅(qū)動的教學(xué)模式過程如圖1所示:
圖1 問題主導(dǎo),質(zhì)疑驅(qū)動的教學(xué)模式示意圖
下面結(jié)合一個非常簡單的案例來闡述以問題主導(dǎo),質(zhì)疑驅(qū)動的教學(xué)模式中各個具體環(huán)節(jié)。案例采用的問題描述為:圖書館系統(tǒng)中有一個功能為在給定的n本書中查詢“數(shù)據(jù)結(jié)構(gòu)”這本書的價格?請實現(xiàn)這個功能。
在這個環(huán)節(jié),教師根據(jù)課程內(nèi)容提出一個問題,問題一般圍繞某個或某些知識點展開,要求學(xué)生針對此問題展開分析,理解問題需要實現(xiàn)的功能需求。對于上面的案例,一般的學(xué)生都能夠分析出此問題實際上是設(shè)計一個算法,在n個數(shù)據(jù)元素中查詢某個數(shù)據(jù)元素。教師在這個環(huán)節(jié)可以引導(dǎo)學(xué)生質(zhì)疑自己對問題的理解是否正確?是否全面?等等。比如:教師可以提出這樣的質(zhì)疑:現(xiàn)在的需求是讓你查詢“數(shù)據(jù)結(jié)構(gòu)”這本書的價格,如果需求變化了,比如明天可能需要你查詢“操作系統(tǒng)”這本書的價格,那么算法要怎么辦?對問題的理解和分析是所有算法設(shè)計的前提,經(jīng)過這樣的不斷的質(zhì)疑,學(xué)生以后分析問題就會更加的全面而深入,設(shè)計出來的方案也更加符合工程的要求。
分析和整理問題后就會進(jìn)入設(shè)計環(huán)節(jié),在這個環(huán)節(jié),學(xué)生可以利用課堂學(xué)習(xí)的理論知識輔助資料搜集,討論等方式進(jìn)行數(shù)據(jù)結(jié)構(gòu)和算法方案的設(shè)計。一般來說,學(xué)生在設(shè)計出了能夠解決問題,滿足功能需求的算法后就認(rèn)為完成任務(wù)了。其實,很多的算法設(shè)計貌似能夠解決問題,但是放到實際的應(yīng)用背景,才會發(fā)現(xiàn)因為忽略了很多其他因素而不能滿足實際需要。所以,這個階段,教師需要引導(dǎo)學(xué)生對自己的方案進(jìn)行質(zhì)疑,例如:你有沒有考慮到其他影響因素 (比如算法的效率如何)?是否存在別的算法可以替代,如果有,這些算法各有什么特點?等等。通過這個過程,學(xué)生不僅可以學(xué)會綜合應(yīng)用自己學(xué)到的知識,而且還能培養(yǎng)算法設(shè)計中注重非功能因素 (算法的時間效率、可擴(kuò)展性、互操作性等等)的工程設(shè)計思想。
回到上面的案例,很多學(xué)生會采用一維數(shù)組作為數(shù)據(jù)結(jié)構(gòu)設(shè)計,線性匹配作為查找算法來滿足功能需求。然而,有實際工程經(jīng)驗的人通常不會這樣做,他首先會把數(shù)組元素從小到大進(jìn)行排序,然后按照二分法進(jìn)行查找。因為,這樣的算法設(shè)計在查詢頻繁的情況下,比每次都要進(jìn)行線性匹配查找要快的多。當(dāng)然,學(xué)生很難一下子想到這樣的解決方案,但是,通過質(zhì)疑自己的方案的方式可以驅(qū)動學(xué)生一步步尋找更優(yōu)算法方案,并把它變成思維習(xí)慣。
有了設(shè)計方案,學(xué)生就可以選擇某種編程工具,對設(shè)計方案進(jìn)行實現(xiàn)并運(yùn)行,通過組織測試數(shù)據(jù)驗證和和觀察結(jié)果。大量實際數(shù)據(jù)的測試往往會發(fā)現(xiàn)一些在問題分析和設(shè)計階段沒有考慮到的問題,這些問題自然而然地驅(qū)動學(xué)生質(zhì)疑自己原來的想法,修改甚至推翻原來的算法設(shè)計。還是對于查詢圖書這個例子,我們在測試時會發(fā)現(xiàn)用戶經(jīng)常會增加新書和淘汰舊書,所以沒有辦法保證數(shù)據(jù)永遠(yuǎn)保持有序,一旦有了數(shù)據(jù)的改動就需要重新排序,所以算法效率就不會太高。這種情況學(xué)生就需要尋找更好的解決方案,比如用二叉排序樹,B+樹來替代數(shù)組存儲數(shù)據(jù)元素。
算法與數(shù)據(jù)結(jié)構(gòu)是軟件設(shè)計的基礎(chǔ),也是實踐性和理論性都很強(qiáng)的課程,能夠掌握和靈活應(yīng)用并不容易。本文提出的問題主導(dǎo),質(zhì)疑驅(qū)動的教學(xué)模式目的就是希望能夠用帶有業(yè)務(wù)背景的實際問題激發(fā)學(xué)生的學(xué)習(xí)興趣,通過不斷質(zhì)疑自己培養(yǎng)學(xué)生逐步尋找問題更優(yōu)解決方案的思維模式,為以后進(jìn)行真正的實際軟件項目設(shè)計和開發(fā)打好基礎(chǔ)。
[1]劉波.“算法設(shè)計與分析”教學(xué)探討[J].高等理科教育,2007,74(4):78-80.
[2]嚴(yán)捍,衷宜,趙學(xué)龍.編程語言教學(xué)實踐中QDeV方法探討[J].計算機(jī)教育,2008(5):56-58.
[3]劉維群.軟件工程專業(yè)中《算法設(shè)計與分析》課程的教學(xué)探討[J].洛陽師范學(xué)院學(xué)報,2012,31(8):101-103.
[4]陶影,張斌.數(shù)據(jù)結(jié)構(gòu)實驗教學(xué)應(yīng)重視算法設(shè)計與分析能力的培養(yǎng)[J].實驗室研究與探索,2008,27(12):119-122.