郭麗清 郭一晶
摘 ?要: 為了提升“算法設計與分析”課程的教學質量,引入STT教學模式進行教學改革。針對教學過程中存在“弱”、“難”、“雜”的問題,提出“獎”、“例”、“享”的課堂互動教學方法。教學實踐證明,該方法能有效激發學生學習興趣,提升學生課程參與度,提高學生分析問題、解決問題的能力,取得較好的教學效果。
關鍵詞: 算法; 弱難雜; STT; 獎例享
中圖分類號:G421;TP312 ? ? ? ? ?文獻標識碼:A ? ? 文章編號:1006-8228(2020)06-73-03
Abstract: In order to improve the teaching quality of "Algorithm Design and Analysis" course, this paper introduces the STT teaching mode for teaching reform. To address the problems of "weak", "difficult" and "miscellaneous" during teaching process, the interactive classroom teaching methods of "award", "example" and "enjoyment” are proposed. It has been proved by practice that the methods can effectively stimulate students' interest in learning, vigorously enhance students' participation in courses, improve students' ability of analyzing and solving problems, and achieve better teaching results.
Key words: Algorithms; weak; difficult and miscellaneous; STT; award; example and enjoyment
0 引言
眾所周知,程序=數據結構+算法。算法的本質是一個問題的解決方案。對于同一個問題,通常有多個解決方法。不同的方法,解決問題的效率差異很大。設計一個高效的程序不僅需要編程小技巧,更需要合理的數據組織和清晰高效的算法[1]。
“算法設計與分析”是計算機學科的核心課程,主要研究計算機及其相關領域中的一些常用算法。通過本課程的學習,學生對算法的基本概念、描述方法、設計過程以及計算機領域解決的問題類型等有一個全盤的了解;掌握蠻力法、分治法、減治法、貪心法、動態規劃法、回溯法等算法設計技術,進而運用這些方法來解決一些常用的實際問題;同時,學生可學會分析算法、估計算法的時間復雜性和空間復雜性,以便理解并科學評估有關算法質量,從而提高程序設計的質量。該課程對學生將來從事計算機系統結構、系統軟件和應用軟件的研究與開發提供一個廣泛扎實的計算機算法知識基礎。算法設計與分析是計算機學科公認的最難課程之一,如何激發學生的學習熱情,加深學生對算法設計策略的理解,進而提升教學質量和教學效果,一直是課程教學過程中的重點。本文從當前教學中存在的問題分析著手,探討STT[2]教學模式在算法設計與分析課堂教學過程中的實際應用,以期給同類課程教師提供一些借鑒與啟發。
1 當前教學中存在的問題
算法設計與分析是一門理論性與實踐性兼顧的課程,在學習該課程的過程中需要注意理論與實踐相結合,對理論性較強的部分,需通過多次練習加以鞏固理解,需要充分地上機練習,結合應用實例在具體計算機環境中加深對理論知識的理解。
本課程主要采用探究研討法、講練結合等教學方式。每次講授一種新算法,先介紹算法設計策略的基本思想,然后從解決計算機中的經典問題和生活中的實際問題入手,由簡至繁、層層遞進地講解,通過對設計策略的反復應用,加深學生對算法設計思想的理解。此外,我們對某些經典問題甚至采用不同算法進行解決,對于熟悉的問題,學生可以更快地理解不同算法的核心思想和設計要點,同時也讓學生更加深刻地體會到一個問題可以有不同的解決方案。即便這些都已考慮,還是由于課程難度、現實學情等一些因素,教學過程依然存在一些問題。
⑴ “弱”——理論學習的畏難心理,積極主動性較弱
算法是一門抽象性的學科,需要大量的理論基礎知識,涉及不少數學知識和相關符號。在歷年的教學過程中,了解到學生們普遍反映理論知識枯燥、算法很難學,并在學習過程中產生畏難情緒,影響了他們主動學習算法這門課程的積極主動性,進而影響了課程的教學質量和教學效果。
⑵ “難”——基礎水平參差不齊,課程內容設計難度大
算法是計算機相關專業學生的必修課程,一般開設在大二下學期。其先修課程包括程序設計基礎(如:C、C++、Java之類)、離散數學、數據結構等。先修課程比較多,每個同學掌握程度略有差異,學生的水平參差不齊。
這樣的學情/狀況,給教學過程特別是課堂內容設計帶來較大的難度。關注基礎薄弱同學,基礎較好接收能力較強的同學無法得到有效提高;拔高課程內容,容易導致基礎較弱的同學跟不上,進一步產生厭學情緒,嚴重者甚至放棄該課程。為此,教師需要投入大量的時間,從海量的算法中挑選出合適的實例,構建階梯式的學習題庫。
⑶ “雜”——理解現有的算法,但無法應用于復雜的實際問題
高等教育重在培養應用型人才,學習算法的核心目的是為了讓學生能夠應用相關算法解決實際問題[3]。然而,從實際成效看,大部分學生即使已經學習并理解現有的算法,但是在遇到復雜的實際問題時,很難抽象出背后的算法模型。
比如某次上機測試實驗,輸油管道問題[4],某公司計劃建一條由東向西的主輸油管道。該管道需穿過一個有n口油井的油田。從每口油井都有一條輸油管道沿最短路經與主管道相連。若給定n口油井的坐標位置(x,y),主管道位置選擇哪里可以使得各油井到主管道之間的輸油管道長度總和最小的位置?該問題的本質是一個對n口油井y坐標的排序問題,進一步解析,問題可以轉化為如何快速找到y坐標值的中位數,該位置即為總輸油管道建立的最優選址位置。經過分析,我們采用快速排序[5]的原理在線性時間內即可實現,具體如圖1所示。但是在有限的考核時間內,很多學生沒有很好地完成。
2 STT教學模式探討
TTT和STT起源于英語課堂教學,TTT(Teacher Talking Time)代表教師在教學中講授中所占用的時間,STT(Student Talking Time)代表學生在課堂中發言中占用的時間。STT教學模式本質是一種經典的互動教學模式。在教師引導下,師生、同學之間采用對話、研討和交流的方式,形成良好的互動教學氛圍,充分調用學生的積極主動性,培養學生自學能力,開發學生的創造思維[6]。傳統的英語課堂以TTT為主,近幾年來不斷增加課堂的STT部分。實踐表明,適當增加教學中的STT,對英語教學質量的提高有明顯的促進作用[2]。算法設計與分析課堂,教師為了構建知識理論體系,經常采用“灌輸式”教學方法,即典型的TTT為主的教學模式。
我們在教學過程中,嘗試引入STT教學模式,引導學生思考活躍學生思維,激發學生的學習熱情,發揮學生積極主動性,進而更好地理解算法設計的本質思想。主要采用以下幾個方法。
⑴ “獎”——建立合適的獎勵機制,提升學生課堂參與度
學習的困難會降低學生的學習熱情,進而影響教學質量。課堂激勵可以有效提升學生的學習興趣[8]。在課堂設計過程中,加大教學過程管控分值,提高學生課堂參與度。比如:對于參與專題分享的同學,平時分加3-5分。外在的激勵一定程度上,提高了學生參與的積極性。激勵理論包括外在激勵和內在激勵。內在激勵往往具有更穩定、持久的驅動力。內在激勵是指學習本身帶來給人的激勵,包括學習的興趣、自信心、成就感等。對于課堂中積極互動的同學,不管怎樣都先給予鼓勵,愿意分享想法是一種勇氣,也是一種進步。良好地課堂氛圍,會促進學生學習的興趣。思考越多,回答到點上的可能性就越大,學生的自信心、成就感也會隨之提高。
⑵ “例”——生活實例入手,激發學生學習興趣
興趣是最好的老師。在課堂中,適當增加生活的實例,通過解決實際問題,激發學生的學習興致。每次介紹新算法時,從生活的實例或歷史典故入手,引出算法設計策略的基本思想。
例如,百錢百雞問題引入蠻力法的設計的思想,然后逐步引導學生對算法進行優化,加深對蠻力法的理解。又例如,學習動態規劃算法時,通過貨幣找零問題,溫習貪心算法的核心思想,引導學生思考如何解決不一定時最優解問題,導入動態規劃的設計理念。對于涉及較多的數學符號、公式的經典問題,通過對實際例子的講解,降低學生對理論學習的畏難情緒,結合課堂練習,加深學生對知識的理解和鞏固。如:經典的TSP問題[5],從小蜜蜂采蜜開始講解,衍生到學生畢業旅行、城市的道路交通規劃、快遞送貨、互聯網中的CDN加速等應用。
這些嘗試有效地提高了學生的學習興趣,培養了學生分析問題、解決問題的能力。值得注意的是,在課堂中注重提問藝術,根據不同學生設置不同的問題,引導學生思考,讓學生盡可能有的說,愿意說。
⑶ “享”——任務驅動專題分享,充分發揮學生主觀能動性
采用類“翻轉課堂”[7]教學模式,結合課堂上已經講過的內容,提前2-3周布置相關主題并提供相關參考資料。自主組隊報名為主,教師指定為輔參與模式。準備過程中,與學生保持交流互動,引導學生深入思考,學會歸納總結,分析算法的時間復雜度和空間復雜性以及這類算法生活中適用的場景。排序問題專題分享,加深了學生對一題多解思想的理解,鞏固相關算法的設計思想。0-1背包專題分享,提供背包9講相關資料,專題小組的“小老師們”從0-1背包入手,重點分享了完全背包、多重背包、樹形背包。學生從小偷偷珠寶問題入手,逐層遞進地分析問題,在算法優化過程,引入二進制思想,將問題“退化”為0-1背包問題的求解,樹形背包延伸到學生如何實現最優總學分選課。這期分享異常精彩,收獲良多。每個人思考問題的思維差異性很大,教師因為已經很熟悉,有時忘記當年是怎么理解這個問題。
通過“課堂翻轉”,學生分享的模式,更好地了解了學生思考方式,為后續“以學生為中心”的課堂提供了借鑒。參與分享的學生也表示,通過參與主題分享加深了自己對算法的理解,同時鍛煉了團隊協作意識。此外,每次同學分享的內容,也拓展了本課程的學習題庫。
3 總結
算法設計與分析是計算機學科的核心課程。本文深入剖析了該課程存在的一些問題,嘗試引入STT教學模式,進行針對性的教學改革實踐。通過應用算法解決生活實際問題、任務驅動學生專題分享、建立合適的獎勵機制等方式有效地激發了學生學習興趣,提升了學生分析問題解決問題的能力。特別是小組式的專題分享,鍛煉了學生的表達能力,增強學生的團隊合作意識。從期末考核結果看,學生成績也有所提升。在后續的教學工作中,考慮與學校ACM競賽結合,以賽促學,培養學生創新實踐能力。
參考文獻(References):
[1] 孫俊,吳小俊,李岳陽.《計算機算法設計與分析》教學方法研究[J].科技信息,2013.23:173,217
[2] 張曼,李迎旭,李超.論英語課堂教學中的TTT和STT[J].課程教育研究,2013.10:81
[3] 張銘,耿國華,陳衛衛,胡學鋼.數據結構與算法課程教學實施方案[J].中國大學教學,2011.3:56-60
[4] ?洛谷.P1862輸油管道問題[EB/OL].https://www.luogu.org/problemnew/show/P1862
[5] 王紅梅,胡明.《算法設計與分析》(第2版)[M].清華大學出版社,2016.
[6] 孫澤文.課堂互動教學研究[D].華中師范大學,2008.
[7] 何克晶,張星明,鄭運平.算法設計與分析課程全方位實踐教學改革探索[J].計算機教育,2017.2:45-49
[8] 嚴明貴.課堂激勵是培養學習興趣的推動力[J].教學與管理,2012:121-123