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