摘要:《算法分析與設(shè)計(jì)》課程是計(jì)算機(jī)科學(xué)和應(yīng)用數(shù)學(xué)類專業(yè)的核心課程之一,在數(shù)學(xué)類專業(yè)同樣起著非常重要的作用。本文通過對(duì)實(shí)驗(yàn)課程教學(xué)過程中存在的問題進(jìn)行分析,提出了提高學(xué)生上機(jī)實(shí)現(xiàn)算法的興趣和能力,改善教學(xué)質(zhì)量的方案,并且通過了課程實(shí)踐的驗(yàn)證,改革后的措施獲得了良好的效果。
關(guān)鍵詞:算法分析與設(shè)計(jì)實(shí)驗(yàn) 教學(xué)改革 Python算法
1 概述
《算法設(shè)計(jì)與分析》課程是計(jì)算機(jī)科學(xué)和應(yīng)用數(shù)學(xué)類專業(yè)等的核心課程,其前導(dǎo)課程主要有《面向?qū)ο蟪绦蛟O(shè)計(jì)》、《數(shù)據(jù)結(jié)構(gòu)》等。該課程由于涉及大量的抽象數(shù)據(jù)類型和算法,理論和實(shí)踐性很強(qiáng),各種經(jīng)典算法思想都是從經(jīng)典問題的解決方案中總結(jié)提煉出來的,因此學(xué)生學(xué)習(xí)起來有相當(dāng)大的難度。在該課程的教學(xué)過程中發(fā)現(xiàn),多數(shù)學(xué)生對(duì)該課程只注重理論學(xué)習(xí),忽視了運(yùn)用實(shí)踐,沒有利用算法思想來思考和解決實(shí)際問題,導(dǎo)致實(shí)驗(yàn)課的教學(xué)效果不理想。但是,實(shí)驗(yàn)課是算法設(shè)計(jì)與分析課程的一個(gè)重要的環(huán)節(jié),課堂上所學(xué)的內(nèi)容只有通過實(shí)驗(yàn)才能較好的掌握,它是檢驗(yàn)教學(xué)效果和鞏固所學(xué)算法的關(guān)鍵。因此就要求教師思考如何設(shè)計(jì)與改進(jìn)實(shí)驗(yàn)教學(xué)的內(nèi)容、方法和手段,從而改變算法實(shí)驗(yàn)課的現(xiàn)狀。
2 存在的問題分析
當(dāng)前的算法實(shí)驗(yàn)教學(xué)效果不理想,學(xué)生在實(shí)驗(yàn)過程中往往表現(xiàn)為對(duì)算法流程無從下手進(jìn)行實(shí)現(xiàn),并且缺乏信心,主要原因有以下方面:
2.1 課程本身內(nèi)容難度大 《算法分析與設(shè)計(jì)》課程內(nèi)容豐富,理論性強(qiáng),學(xué)習(xí)量大。課程內(nèi)容主要是討論和介紹計(jì)算機(jī)算法的復(fù)雜性理論,結(jié)合對(duì)一些熟悉的算法進(jìn)行分析和總結(jié),強(qiáng)化基礎(chǔ)理論知識(shí),對(duì)一些大型工程軟件的分析,會(huì)有一定的輔助作用。它主要介紹計(jì)算機(jī)科學(xué)及應(yīng)用領(lǐng)域常見的有代表性的非數(shù)值算法及算法設(shè)計(jì)的若干重要方法,同時(shí),介紹算法分析的基本知識(shí)。闡述計(jì)算模型和時(shí)間復(fù)雜性的定義;討論遞歸技術(shù)和算法分析的基本手段;介紹算法設(shè)計(jì)的幾類方法,如分治法、回溯法、貪心法、動(dòng)態(tài)規(guī)劃法、分枝限界法等,并結(jié)合某些有實(shí)用意義的經(jīng)典算法來加深設(shè)計(jì)方法的探討,由淺入深地進(jìn)行算法效率分析,使學(xué)生在掌握各種算法設(shè)計(jì)方法和分析基本技術(shù)的同時(shí),也使邏輯思維得到鍛煉。
2.2 對(duì)程序設(shè)計(jì)語言掌握不好 數(shù)學(xué)類專業(yè)學(xué)生在前導(dǎo)課程中只學(xué)習(xí)了C語言程序設(shè)計(jì)、面向?qū)ο蟪绦蛟O(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu),學(xué)習(xí)和接觸到的都只是簡(jiǎn)單的數(shù)據(jù)類型和單個(gè)函數(shù)的程序,主要是進(jìn)行語法的學(xué)習(xí),因此對(duì)《算法分析與設(shè)計(jì)》實(shí)驗(yàn)課程中需要大量使用C語言的頭文件、宏定義、結(jié)構(gòu)體、指針等的學(xué)習(xí)較少,缺乏理解,從而造成了學(xué)生在進(jìn)行算法實(shí)驗(yàn)中不懂如何編程實(shí)現(xiàn)或者是在編譯階段錯(cuò)誤很多,因此學(xué)生對(duì)此很容易造成失去學(xué)習(xí)的積極性。而且學(xué)生面對(duì)大量的程序編譯調(diào)試錯(cuò)誤時(shí),他們的注意力就會(huì)集中在編程語言的語法層面,忽視了算法思想本身,形成惡性循環(huán),使得教學(xué)效果很不理想。
2.3 實(shí)驗(yàn)項(xiàng)目安排不合理 原有的實(shí)驗(yàn)項(xiàng)目安排不合理,第一和第二個(gè)實(shí)驗(yàn)相對(duì)較難,而學(xué)生在進(jìn)行該課程實(shí)驗(yàn)的時(shí)候,一般都是沿用原來C程序設(shè)計(jì)實(shí)驗(yàn)的作法。實(shí)驗(yàn)前沒有做相應(yīng)的預(yù)習(xí)和準(zhǔn)備,沒有考慮數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),到實(shí)驗(yàn)室一打開計(jì)算機(jī)就直接進(jìn)入編程環(huán)境,立即開始編寫源代碼。緊接著就編譯運(yùn)行,然后就是編譯錯(cuò)誤很多,即使編譯通過,運(yùn)行結(jié)果與預(yù)想的結(jié)果卻相差很遠(yuǎn)。然后就造成學(xué)生做完第一次算法實(shí)驗(yàn)后就再也提不起興趣了,總覺得這個(gè)實(shí)驗(yàn)都是太難了,沒有信心實(shí)現(xiàn)出來,從而造成了惡性循環(huán)。
3 實(shí)驗(yàn)教學(xué)改革的實(shí)踐對(duì)策
根據(jù)上述問題,結(jié)合該課程的知識(shí)內(nèi)容抽象、教學(xué)難度大的特點(diǎn),我們從如下幾個(gè)方面對(duì)該課程的實(shí)驗(yàn)進(jìn)行改革和優(yōu)化:
3.1 實(shí)驗(yàn)指導(dǎo)書內(nèi)容的改革 在新的課程實(shí)驗(yàn)教學(xué)大綱指導(dǎo)下,針對(duì)知識(shí)點(diǎn)適當(dāng)?shù)剡x擇具有代表性、難度適當(dāng),而且工程項(xiàng)目中使用較多的典型算法,讓學(xué)生進(jìn)行編程實(shí)現(xiàn)和調(diào)試。將實(shí)驗(yàn)分為基礎(chǔ)實(shí)驗(yàn)、自選實(shí)驗(yàn)、綜合實(shí)驗(yàn)。其中基礎(chǔ)實(shí)驗(yàn)為教師在現(xiàn)場(chǎng)輔導(dǎo)學(xué)生在實(shí)驗(yàn)課堂上必須完成的內(nèi)容。自選實(shí)驗(yàn)為難度更大一些的,要求學(xué)生掌握比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)結(jié)構(gòu),以及算法的表示和實(shí)現(xiàn)。綜合實(shí)驗(yàn)則是為了讓學(xué)生在課程教學(xué)過程中能掌握程序設(shè)計(jì)的思想和方法,以小組為單位,選擇教師提供的一些大型的綜合題目,需要學(xué)生全面綜合運(yùn)用所學(xué)過的基礎(chǔ)知識(shí)來解決問題。這樣使得不同層次的學(xué)生可以選不同層次的實(shí)驗(yàn)內(nèi)容,所有的學(xué)生都可以選擇適合自己能力水平的實(shí)驗(yàn),實(shí)驗(yàn)內(nèi)容設(shè)計(jì)基礎(chǔ)知識(shí)的驗(yàn)證,學(xué)生學(xué)到的課堂知識(shí)可以很快轉(zhuǎn)為可以解決問題的工具,使學(xué)生進(jìn)一步理解《算法分析與設(shè)計(jì)》對(duì)程序設(shè)計(jì)思想的作用。
3.2 編程語言的選擇 大多數(shù)院校的算法實(shí)驗(yàn)課程都選擇使用C/C++來實(shí)現(xiàn),但是針對(duì)數(shù)學(xué)類專業(yè)的學(xué)生來說,由于計(jì)算機(jī)類的課程較計(jì)算機(jī)科學(xué)專業(yè)的少,而且存在數(shù)學(xué)類專業(yè)學(xué)生的C語言編程水平普遍不高的現(xiàn)象。因此,為了使得學(xué)生把注意力從編程語言語法轉(zhuǎn)為集中在算法本身上,我們選擇Python腳本語言作為該課程實(shí)驗(yàn)的編程語言。Python是一種面向?qū)ο?、直譯式的編程語言,也是一種功能強(qiáng)大的通用型語言。它的語法非常簡(jiǎn)捷和清晰,采用縮進(jìn)用于定義語句。美國(guó)麻省理工的計(jì)算機(jī)編程入門和算法課程都是使用Python語言作為編程教學(xué)語言[1-5]。
例如我們對(duì)用蒙特卡羅方法來求PI的問題進(jìn)行求解,以顯示Python與C語言的語法區(qū)別:
從上述的示例代碼中可以看出,python的可讀性非常好,即使不寫注釋,也能很容易讀懂。語法和算法的偽代碼有些類似,因此更易于展示算法的運(yùn)行過程。
3.3 實(shí)驗(yàn)內(nèi)容與學(xué)時(shí)分配改革
減少實(shí)驗(yàn)次數(shù),但是保證總學(xué)時(shí)不變,降低第一和第二次實(shí)驗(yàn)的難度,以提高學(xué)生對(duì)實(shí)驗(yàn)課程興趣。
從上述兩個(gè)表格的對(duì)比中可以看出,新的實(shí)驗(yàn)內(nèi)容中在難易度和學(xué)時(shí)安排上都做了調(diào)整,實(shí)驗(yàn)一相對(duì)最容易,安排時(shí)間也是最少的,此次實(shí)驗(yàn)用于引導(dǎo)學(xué)生入門。實(shí)驗(yàn)二增加了的難度不大,而且增加了實(shí)驗(yàn)學(xué)時(shí)。依次類推,后面的實(shí)驗(yàn)就循序漸進(jìn)了。
4 總結(jié)與展望
通過對(duì)《算法分析與設(shè)計(jì)》實(shí)驗(yàn)課程的改革,提高了學(xué)生對(duì)該課程的掌握程度,學(xué)生通過完成上機(jī)的實(shí)驗(yàn)項(xiàng)目,提高了學(xué)生對(duì)實(shí)際問題分析的能力和編程水平?!端惴ǚ治雠c設(shè)計(jì)》實(shí)驗(yàn)課程的建設(shè)在數(shù)學(xué)類專業(yè)的建設(shè)中具有重要作用,結(jié)合數(shù)學(xué)類課程《數(shù)值分析》、《組合數(shù)學(xué)》等,學(xué)生在后續(xù)的學(xué)習(xí)過程中能夠通過相應(yīng)的編程實(shí)現(xiàn)來強(qiáng)化理論學(xué)習(xí)的效果,因此,通過該課程實(shí)驗(yàn)的改革來激發(fā)數(shù)學(xué)專業(yè)學(xué)生的編程興趣、培養(yǎng)動(dòng)手能力,從而提高學(xué)生的整體素質(zhì)。
參考文獻(xiàn):
[1]http://ocw.mit.edu/courses/#electrical-engineering-and-c
omputer-science.
[2]毛睿,朱寧.數(shù)學(xué)建模教學(xué)的探索[J].桂林電子工業(yè)學(xué)院學(xué)報(bào),2005,25(4):89-92.
[3]徐安農(nóng).數(shù)學(xué)實(shí)驗(yàn)課實(shí)踐與研究[J].桂林電子工業(yè)學(xué)院學(xué)報(bào),2004,24(2):94-96.
[4]楊華宣.高等數(shù)學(xué)中某些問題的探討[J].桂林電子工業(yè)學(xué)院學(xué)報(bào),2004,24(5):72-76.
[5]林昕茜.數(shù)學(xué)建模思想在高等數(shù)學(xué)教學(xué)中應(yīng)用價(jià)值的研究[J]. 桂林電子科技大學(xué)學(xué)報(bào),2009,29(2):155-158.
[6]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,2001.
[7]Zelle,John M. Python Programming: An Introduction to Computer Science[M]. 1st edition. Franklin Beedle Associates,2003.
作者簡(jiǎn)介:趙汝文(1984-),男,廣西欽州人,碩士,研究方向?yàn)樾畔踩退惴ǚ治觥?/p>
通訊作者:梁王歡(1979-),男,廣西欽州人,副編審,研究方向?yàn)樾畔⒖萍计诳芯糠治觥?/p>