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