劉篤晉
摘要:算法分析與設計是計算機專業學生必須掌握的一門極其重要的核心骨干課程,本課程學習需要學生具有扎實的編程基礎和較強的抽象思維及創新能力,傳統純粹重視算法理論的教學方法下學生學習效果普遍不太理想,教師教學難度較大,為改進傳統的算法分析與設計課程教學,采用多元結合的教學方式,實際的教學證明,多元結合的教學方式在強化學生的算法思維能力和獨立動手解決實際算法問題能力培養中具有重要作用。對課程在教學中的問題進行了深入分析,從身邊的算法、算法的貫通性、項目對課程學習的驅動性等多元結合的教學方法進行了研究,為推進算法分析與設計課程的教學提供了一條有益的思路。
關鍵詞:算法分析與設計;多元結合;身邊的算法;貫通性;驅動性
中圖分類號:G712 文獻標識碼:A 文章編號:1009-3044(2018)06-0100-02
1引言
算法分析與設計教學是一門在教師引導下以學生為主體培養學生具有算法創新精神和獨立算法問題分析、解決能力的教學活動。本課程教學的成功與否直接關系到計算機專業人才培養目標的成敗。在課程教學中具有直觀性、多變性、突發性、綜合性等特點。算法分析與設計課程也是計算機相關專業可持續發展的必要條件H。要培養高質量的全面發展的計算機專業人才,必須改革算法分析與設計教學,充分發揮教師主導、學生主體的教學特色,緊密依托項目,挖掘學生的潛力。
算法分析與設計是一門面向設計,且處于計算機學科核心地位的重要課程,主要任務是理解掌握算法設計的主要方法,培養對算法計算復雜性正確分析的能力,為獨立設計算法和對算法進行復雜性分析奠定堅實的理論基礎,對每一位計算機專業的科研、教學及從業人員都是非常重要和必不可少的,由于課程相當抽象,理解難度大,且算法設計與分析是一種創造性思維活動,同一個問題可能有多種不同的方法來解決,因此本文對當前本科院校算法課程中遇到的普遍問題進行了探討和分析,通過身邊的算法、算法的貫通性、實際項目的驅動性等多元結合的方法進行教學,以提高學生將所學知識轉化為實際能力的水平,教學效果明顯提高。這種多元結合的方法,對其他課程的學習也有良好的借鑒意義。
2算法分析與設計課程在實際教學中的問題分析
通過與學生的多次交流和對學生實際能力的反復測試,并與成都理工大學、四川大學、西南民族大學等兄弟院校同行的認真探討,算法分析與設計這門課程教學中普遍存下以下問題:
2.1實際教學中普遍強調重設計輕實現
相當多的學校在實際教學中要求學生對某一需要解決問題只要求寫出算法即可,不要求實現或很少要求實現甚至要求學生課外去實現,但是在課外許多學生根本就沒去實現,由于學生水平的原因,相當部分學生也難以實現,算法的不實現導致學生很難發現自己算法中的錯誤,而算法的設計是一項創造性工作,同一個問題,不同的學生可能有不同的設計,老師由于時間的關系又不可能將學生所有算法都去檢測一遍,因而造成相當一部分學生雖然課程學完了,但沒有實踐檢驗,覺得頭腦空空,好像學的東西全都是虛的,缺乏自信心。
2.2實驗內容大多以單一的具體為主,缺乏綜合性訓練
由于本門課程難度大,許多老師擔心學生完成不了,給學生實驗的內容都是相當簡單的,甚至是以前學習其他課程學過的,雖然將其他課程內容進行算法練習無可厚非,但純粹的單一訓練,使學生只為練習而練習,不知道究竟該算法在實際運用中如何用,有什么用,過量的單一的訓練,使得學生學的知識是一盤散沙,課程完成后,不會用于實際,無法進行綜合性實際運用,造成了和社會主流需求脫節。
2.3實驗教學中知識拓展度不夠,缺乏對學生深層次能力的訓練
在算法的實驗教學中,相當一部分學生只是在老師指導下,完成了字面的實驗內容,完成后直接提交給老師就算完成,須知算法設計是一項相當具有挑戰性工作,在實際項目攻關中,居于核心地位,很多情況下表面看來對算法問題的已經解決,深入研究才發現,表面算法的提出只是在具體條件約束下的低效解決,沒有考慮到算法在高維問題下的廣度性和深度性,未進行深層次的算法完成,只是完成了問題算法約束條件下的低維、低效內容,也就是說只達到了學習目標的一部分,該實驗內容的拓展部分應該由學生繼續深入學習或經團體深入討論完成的卻沒有完成,如何將算法在深度和廣度上表達得精練和高效,這本來由學生繼續學習能夠很好完成的重要部分,卻沒有實現,這些能力的缺乏,使得學生畢業后和高素質人才的標準相距甚遠。
3教學方法改革思考與探索
為了解決算法分析與設計課程教學中的諸多問題,緊扣“算法分析與設計”課程大綱,本文進行了積極的探索,并結合當前主流的教學手段,采用從身邊的算法、知識融會貫通以及項目驅動等多元結合的教學方法,將教學內容進行擴展。對計算機專業學生來說,算法分析與設計這門課就是要學會計算機解決問題的方法,讓學生走出“算法只在計算機中,走出計算機好像就沒有算法的誤區”,充分發揮多種交流手段和方法,學生之間以小組為單位自查、自糾、自勵,并定期舉行專題講座以激發學生不斷創新。
3.1從身邊的算法開始學習
算法是指解決問題的一種方法或一個過程,算法離每個人并不遙遠,但許多同學一聽說算法馬上想到的是抽象復雜難理解的東西,總覺得算法是一門高深玄妙的課程,沒有學習之前,心中就開始感覺到壓力,帶著這種壓力去學習,結果可想而知,其實算法在每個人身邊,本文通過一個具體的身邊案例讓學生明白,算法并不陌生,比如下面一個具體例子:
某工廠生產有1000000只燈泡,規定燈泡使用壽命1000小時以上的為合格,為判斷這批燈泡是否合格,請結合自己所學知識,采用合適的算法來解決這一問題?
檢查產品合格這個例子,在身邊是經常遇到的,比起教材中哪些復雜算法,學生更容易理解,通過分析講解,知道要解決這個問題,只要運用概率知識,采用均值和方差結合就能解決,因為單用均值這個指標是無法解決的,根據高等數學知識可知,均值表示樣本的整體質量,如樣本有100只燈泡,若50只使用壽命2000小時,另50只使用壽命0小時,若只按均值來說,這100只燈泡使用壽命就是1000小時,按此方法這批燈泡就是合格的,這種方法明顯是錯誤的,但若將均值和方差結合起來,無疑就能解決問題,因為方差可以限制偏離程度,使得燈泡的整體壽命計算時若偏離程度過大,就可以判斷為這一批燈泡不合格,因此,可以采用均值來判斷整體質量,用方差來判斷偏離程度,兩者方法結合就能較好判斷出燈泡的質量情況。可以看出算法其實在我們日常生活中是經常遇到的,采用算法解決問題,也不是玄妙無比,只要運用所學知識,就會迎刃而解。通過這種類似方法,使學生由淺入深的理解了算法的本質,激發了學生興趣。
3.2將所學課程知識融會貫通
算法分析與設計是一門本科生高年級或研究生的課程,這是由本門課程的特點決定的,這時學生的專業知識已基本具備,學生已學完大部分的重要課程,這門課程必需的高等數學、程序設計、數據結構知識都已學過,因而這時開設這門課程條件已完全成熟,但相當一部分學生雖然已經學完了這些課程,但卻無法綜合運用,都只能是將自己思維定格在各科單獨的課程里,這與算法是程序的靈魂思想格格不入,如何使學生能將所這知識融會貫通,本課程教學中采用在理論講解中每個問題所涉及的課程給學生講全面講透徹,使學生深刻理解某算法在哪些課程中發揮作用,在哪些課程中居于何種地位,使某一算法能將一門或幾門課程的幾個知識點連接起來,真正把算法講活、講透,如課程講到動態規劃算法,讓學生明白動態規劃算法實際上就是一種解決最優化問題的算法,對于最優化問題的解決,讓學生回憶在高等數學里學過的拉格郎日乘法,在約束條件下求極值問題,實際上就屬于一種最優化問題,這樣從學生熟悉的知識引導學生逐漸進入到新的知識,讓學生能較容易的理解什么是動態規劃算法,進一步給學生講解,以后還要學習的粒子算法以及蜂群算法都是解決最優化問題的算法;在實際教學中要求每一個學生采用多個角度寫算法,并力求將每個算法實現,并比較每個算法的復雜性,通過這種循序漸進的教學方法,使學生能學得懂、學得快。
3.3以項目為驅動進行學習
通過對基本概念和一些基本問題算法的學習,學生已能基本解決一些實際問題,但是與社會主流的需要還有差距,必須進行具體的項目訓練,才能使學生能真正實現和社會需要無縫連接,如讓學生學習運用小波變換進行圖像去噪,首先從理論上讓學生明白,小波變換和學習過的傅里葉變換一樣,都是一種變換,不過是選擇的基不同罷了,這兩種變換都不過是通過選擇不同基的情況下,將原函數表達出來,兩種變換都是將原信號變換后,除去噪聲信號,再通過逆變換恢復,以此方式去噪,通過反復實驗,讓學生理解小波變換的不同級數的作用,以及產生不同結果圖的原因。在項目驅動教學中,要充分發揮學生的創新性和能動性,教師要多加引導,同時讓學生在每個實驗小組中充分自由表達自己的觀點和想法,通過集體知識解決問題,達到共同進步的目的,以達到學好知識的同時也培養良好的溝通和團體協作能力。
4結語
本文針對算法分析與設計課程教學過程中的實際問題,采用燈泡使用壽命檢測之類的學生身邊算法,算法的融會貫通性,實際項目的驅動性,這種多元結合的教學方法、教學設計以及教學理念,不僅提高了學生學習積極性,而且明顯提高了教學質量,達到了較好的教學效果,也為其他課程的教學作了嘗試和鋪墊。