文章編號:1672-5913(2008)10-0072-02
摘要:本文就筆者在“算法設(shè)計與分析”課程中的教學(xué)改革實(shí)踐對理論與技術(shù)的平衡問題提出了一些看法,并結(jié)合近期在學(xué)生中所作的調(diào)查統(tǒng)計提出了一些觀點(diǎn)。
關(guān)鍵詞:算法設(shè)計;算法分析;實(shí)踐環(huán)節(jié)
中圖分類號:G642
文獻(xiàn)標(biāo)識碼:B
“算法設(shè)計與分析”近年來在很多院校的本科階段開設(shè),體現(xiàn)計算學(xué)科以算法為主要研究內(nèi)容的學(xué)科目標(biāo)。算法研究的是解決計算問題的操作序列,早在計算機(jī)技術(shù)發(fā)明之前,人們就對算法作了大量的研究。在本科階段開設(shè)“算法設(shè)計與分析”,就是要使學(xué)生通過本課程的學(xué)習(xí)認(rèn)識算法的設(shè)計與分析對程序設(shè)計與程序性能改善的理論指導(dǎo)作用,為今后在職業(yè)生涯中開發(fā)出具有創(chuàng)新性的應(yīng)用程序打下良好基礎(chǔ)。
基于這一指導(dǎo)思想,在計算機(jī)專業(yè)本科階段“算法設(shè)計與分析”課程的教學(xué)改革就要求我們把握好理論與技術(shù)的平衡。如何把握本門課程中理論與技術(shù)的平衡,筆者認(rèn)為需要從如下幾個方面加以考慮。
1教學(xué)內(nèi)容
算法課是理論課,它指導(dǎo)的是程序設(shè)計的思想和行為。因此,本課程的教學(xué)內(nèi)容以理論為主應(yīng)是合理的。問題在于對本科階段的理論深度與廣度的把握。首先,從我國普通高校本科階段數(shù)理基礎(chǔ)課的教學(xué)實(shí)際出發(fā),學(xué)生掌握的數(shù)學(xué)知識限于微積分、線性代數(shù)、數(shù)理統(tǒng)計初步以及不多的離散數(shù)學(xué)(包括集合論、近世代數(shù)、數(shù)理邏輯和圖論的基本概念)基礎(chǔ)知識,遠(yuǎn)不能達(dá)到在理論論證中靈活運(yùn)用的程度。在算法課程中,無論是算法的設(shè)計還是算法的分析,都不能超越這一基礎(chǔ)。盲目追求理論嚴(yán)密將會嚴(yán)重挫傷學(xué)生的學(xué)習(xí)積極性。其次,本課程往往開設(shè)于高年級階段,課時少也限制了教學(xué)容量。但是,通過有限的理論教學(xué)要使學(xué)生明白如下幾點(diǎn):
●程序設(shè)計不能沒有理論指導(dǎo)
●理論指導(dǎo)下設(shè)計的程序更優(yōu)秀
●實(shí)際的應(yīng)用需求將會推動理論的發(fā)展
因此,筆者在本課程的教學(xué)中在內(nèi)容上注重以下三個方面:
●經(jīng)典算法設(shè)計方法
●常用的算法分析方法
●算法性能改善對理論研究的要求
2教學(xué)模式
很多重點(diǎn)院校,特別是偏重于理論研究的院校開設(shè)算法課通常不包含實(shí)驗(yàn)環(huán)節(jié)。但計算學(xué)科發(fā)展至今,更多的學(xué)生走進(jìn)計算機(jī)系學(xué)習(xí)計算機(jī)技術(shù),把算法課作為一門純理論課來開設(shè),對大多數(shù)學(xué)生是不利的。以前算法課不含有實(shí)踐環(huán)節(jié)的一個可能的原因是技術(shù)遠(yuǎn)落后于理論(數(shù)學(xué)理論已有近千年的歷史,而計算機(jī)技術(shù)卻僅有短短幾十年的發(fā)展歷程),很多精巧的理論很難用當(dāng)時的描述工具和運(yùn)行平臺加以實(shí)現(xiàn)。今天,我們不但能夠用高度抽象的程序設(shè)計語言描述復(fù)雜的算法,在微型計算機(jī)上實(shí)現(xiàn)大多數(shù)流式算法,很多院校還配置了中小型計算機(jī),讓學(xué)生可以做并行算法的實(shí)驗(yàn)。所以,現(xiàn)在我們已經(jīng)有了驗(yàn)證理論的物質(zhì)條件,就應(yīng)當(dāng)把算法課的課堂擴(kuò)展到實(shí)驗(yàn)室去。
應(yīng)當(dāng)認(rèn)識到,為算法課增添適當(dāng)課時的實(shí)驗(yàn)環(huán)節(jié)不但是可行的也是必要的。這首先要從教學(xué)目標(biāo)出發(fā),我們培養(yǎng)的是今后從事計算機(jī)軟硬件開發(fā)制造和計算機(jī)技術(shù)應(yīng)用的工程技術(shù)人才,學(xué)習(xí)算法就是要培養(yǎng)他們能用正確的理論指導(dǎo)創(chuàng)新開發(fā)的實(shí)踐。其次,通過實(shí)驗(yàn),讓學(xué)生知道現(xiàn)有技術(shù)可能還不足以實(shí)現(xiàn)理論上已有的成果,引導(dǎo)學(xué)生思考明天可能的技術(shù)改進(jìn)或理論創(chuàng)新。筆者所在學(xué)校將算法課的教學(xué)模式設(shè)置為3:1的理論與實(shí)踐教學(xué)學(xué)時比。課堂教學(xué)以理論闡述論證為主,實(shí)驗(yàn)課實(shí)現(xiàn)算法并驗(yàn)證算法的效率。筆者最近在學(xué)生中作了一個問卷調(diào)查,調(diào)查了如下問題:
對你而言“算法設(shè)計與分析”課程對提高程序設(shè)計技術(shù)的水平________________。
回答“沒有什么幫助”占3%,回答“有一點(diǎn)幫助”占23%,回答“有較大幫助”占47%,回答“有很大幫助”28%。
對你而言學(xué)習(xí)“算法設(shè)計與分析”課程的最大好處在于_______________。
回答“深入學(xué)習(xí)程序設(shè)計語言”的占20%,回答“深入學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)”的占23%,回答“提高程序設(shè)計能力”的占56%。
這說明大多數(shù)學(xué)生認(rèn)為算法課確實(shí)能提高他們的程序設(shè)計能力。
3實(shí)驗(yàn)課的設(shè)計
筆者認(rèn)為,在實(shí)驗(yàn)課中將課堂討論的理論加以驗(yàn)證,加深對理論的理解僅僅是實(shí)驗(yàn)課最基本的任務(wù)。絕大多數(shù)學(xué)生必須保質(zhì)保量地完成這一任務(wù)。但是,我們從調(diào)查問卷中對如下問題的統(tǒng)計數(shù)據(jù)中卻看到一個很讓人擔(dān)心的情況:
你認(rèn)為學(xué)習(xí)“算法設(shè)計與分析”課程的最大困難在于___________________。
回答“聽課理解”的占5%,回答“閱讀理解”的占26%,回答“習(xí)題練習(xí)”的占17%,回答“算法實(shí)現(xiàn)”的占53%。
也就是說,半數(shù)以上的學(xué)生認(rèn)為用他們在一、二年級所學(xué)的程序設(shè)計技能來實(shí)現(xiàn)已有的算法有困難。認(rèn)真想來這也符合規(guī)律:一、二年級學(xué)習(xí)的是程序設(shè)計語言和基本的數(shù)據(jù)結(jié)構(gòu),學(xué)生沒有充分體驗(yàn)到用語言和數(shù)據(jù)來設(shè)計解決問題的算法進(jìn)而開發(fā)出能實(shí)際運(yùn)行的程序的問題。所以,算法課的實(shí)踐環(huán)節(jié)對工科學(xué)生來說,不僅是必要的,還是必須的。算法課增添實(shí)驗(yàn)環(huán)節(jié)既能讓學(xué)生驗(yàn)證理論,還能在低年級所學(xué)的程序設(shè)計基礎(chǔ)上提高程序設(shè)計開發(fā)的能力。
然而筆者認(rèn)為,僅僅停留在算法的驗(yàn)證上還是不夠的。當(dāng)今的程序設(shè)計技術(shù)日新月異,利用當(dāng)前的新技術(shù)實(shí)現(xiàn)并應(yīng)用經(jīng)典算法,使學(xué)生能夠跟上技術(shù)發(fā)展的步伐,增強(qiáng)就業(yè)競爭力應(yīng)當(dāng)是我們在“算法設(shè)計與分析”課程中加入實(shí)驗(yàn)環(huán)節(jié)的另一個重要著眼點(diǎn)。利用諸如模板、仿函數(shù)、迭代子、對象合成等程序設(shè)計模式將實(shí)現(xiàn)的算法拓展成通用的函數(shù)庫或類庫,以此方式在實(shí)驗(yàn)中讓學(xué)生自己掌握在高級程序設(shè)計語言課程中由于學(xué)時限制未曾深入研習(xí)的程序設(shè)計技術(shù),從而切實(shí)地提高程序設(shè)計能力。
普通工科院校計算機(jī)專業(yè)的學(xué)生學(xué)習(xí)算法的設(shè)計與分析的最重要的目標(biāo),應(yīng)當(dāng)是其在程序開發(fā)中的應(yīng)用。實(shí)驗(yàn)內(nèi)容應(yīng)該包含應(yīng)用。筆者認(rèn)為ACM/ICPC(國際大學(xué)生程序設(shè)計競賽)歷年來的題目很好地反映了算法設(shè)計與分析技巧在程序設(shè)計中的應(yīng)用意義。筆者嘗試著在本課程的實(shí)驗(yàn)中讓有能力的學(xué)生研習(xí)一些這方面的題目,效果在一部分學(xué)生中是顯著的。
總之,計算機(jī)教育工作者都在思考計算學(xué)科教育的本質(zhì)以及如何提高本學(xué)科的教學(xué)質(zhì)量。理論與技術(shù)的平衡是這場思考中的一個重要主題。廈門大學(xué)的趙致琢教授曾經(jīng)指出“理論與實(shí)踐相結(jié)合,理論與實(shí)踐的統(tǒng)一是計算科學(xué)發(fā)展中最重要的特點(diǎn)之一?!币虼?,在教學(xué)中如何凸顯本學(xué)科的這一特點(diǎn),是每一門課程的教師應(yīng)當(dāng)認(rèn)真思考并努力實(shí)踐的。
參考文獻(xiàn)
[1] 中國計算機(jī)科學(xué)與技術(shù)學(xué)科教程2002研究組. 中國計算機(jī)科學(xué)與技術(shù)學(xué)科教程2002[M]. 北京:清華大學(xué)出版社,2002.
[2] 錢能. C++程序設(shè)計教程(第二版)[M]. 北京:清華大學(xué)出版社,2005.
[3] 趙致琢. 計算科學(xué)導(dǎo)論(第三版)[M]. 北京:科學(xué)出版社,2004.
[4] 徐子珊. 算法設(shè)計與分析課程中的工程教育[J]. 計算機(jī)科學(xué),2005,32(8).