李晉麗 孫春娟 張學(xué)波
摘要:算法設(shè)計(jì)與分析是計(jì)算機(jī)學(xué)科中的基礎(chǔ)課程,但在實(shí)際教學(xué)中,存在學(xué)生基礎(chǔ)不一、理論與技術(shù)難以平衡、難以培養(yǎng)計(jì)算思維等問題,針對(duì)課程教學(xué)中容易出現(xiàn)的這些問題,對(duì)可采取的解決方案進(jìn)行探討,從制定合理目標(biāo)、科學(xué)設(shè)置教學(xué)內(nèi)容、合理應(yīng)用多種教學(xué)手段、突出計(jì)算思維的培養(yǎng)、將競(jìng)賽引入課堂、建立教學(xué)輔助平臺(tái)、改進(jìn)考核方式七個(gè)方面進(jìn)行分析,旨在突出以學(xué)生為中心、以應(yīng)用為目的,從而促進(jìn)課程教學(xué)質(zhì)量的提高。
關(guān)鍵詞:算法設(shè)計(jì)與分析;實(shí)踐教學(xué);輔助平臺(tái);計(jì)算思維
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)10-0111-03
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 引言
《算法設(shè)計(jì)與分析》課程是一門面向設(shè)計(jì)的計(jì)算機(jī)專業(yè)基礎(chǔ)課程,處于計(jì)算機(jī)學(xué)科的核心地位,其先修課程包括離散數(shù)學(xué)、數(shù)據(jù)結(jié)構(gòu)、高級(jí)語言程序設(shè)計(jì)等,為計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)、計(jì)算機(jī)軟件與理論、計(jì)算機(jī)應(yīng)用技術(shù)等學(xué)科提供廣泛扎實(shí)的計(jì)算機(jī)算法知識(shí)基礎(chǔ),也可為其他非計(jì)算機(jī)專業(yè)研究生學(xué)生提供相關(guān)知識(shí)。作為一門基礎(chǔ)課程,學(xué)生的學(xué)習(xí)質(zhì)量至關(guān)重要,但在實(shí)際教學(xué)實(shí)施過程中,由于學(xué)生的差異性、本門課程自身的特征,存在各種問題,因此有必要研究教學(xué)改進(jìn)方案,持續(xù)提升教學(xué)質(zhì)量。
2 教學(xué)中容易出現(xiàn)的問題
2.1學(xué)生來自各個(gè)專業(yè),基礎(chǔ)水平差異明顯
該門課程是計(jì)算機(jī)技術(shù)、軟件工程專業(yè)學(xué)位碩士研究生必修課程,同時(shí)作為其他專業(yè)的研究生選修課程。學(xué)生來自不同專業(yè),先修課程不同,有的學(xué)生具備數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)基礎(chǔ)知識(shí),而有的學(xué)生則比較薄弱,尤其在程序設(shè)計(jì)方面欠缺;有的學(xué)生沒有接觸過算法相關(guān)內(nèi)容,而有的學(xué)生參加過算法相關(guān)競(jìng)賽,對(duì)算法比較熟悉;有的學(xué)生是應(yīng)屆生,具有較強(qiáng)的專業(yè)基礎(chǔ),但缺乏實(shí)踐經(jīng)歷,有的學(xué)生是在職干部,工作多年,專業(yè)基礎(chǔ)薄弱,但具有較多的實(shí)踐經(jīng)驗(yàn);這些各方面的問題都給教學(xué)帶來一定的難度,需要在整個(gè)過程中既兼顧薄弱者,又要讓能力強(qiáng)的學(xué)生有更多收獲。
2.2重應(yīng)試、輕實(shí)踐,教學(xué)內(nèi)容缺乏針對(duì)性
高等教育重在培養(yǎng)應(yīng)用型人才,算法設(shè)計(jì)與分析是一門實(shí)踐性較強(qiáng)的課程,課程學(xué)習(xí)中一方面要培養(yǎng)學(xué)生學(xué)習(xí)知識(shí)的系統(tǒng)性和完整性,而在應(yīng)用方面,則要求學(xué)生能夠?qū)W會(huì)使用算法解決實(shí)際問題,即要培養(yǎng)學(xué)生解決實(shí)際問題的能力。在教學(xué)過程中,教學(xué)內(nèi)容缺乏針對(duì)性,更多的是通過對(duì)經(jīng)典算法的實(shí)踐來加強(qiáng)應(yīng)用。而要把算法真正應(yīng)用于解決實(shí)際問題,針對(duì)不同的問題,如何設(shè)計(jì)算法,這在本門課程的教學(xué)中是一個(gè)重難點(diǎn)。
2.3學(xué)生缺乏對(duì)理論知識(shí)的學(xué)習(xí)興趣
算法設(shè)計(jì)與分析課程中需要理論知識(shí)的支撐,但學(xué)生往往反映理論枯燥,缺乏學(xué)習(xí)興趣,教師為了讓學(xué)生掌握系統(tǒng)的知識(shí),容易出現(xiàn)“滿堂灌”的現(xiàn)象。如何平衡好理論與技術(shù)的關(guān)系,保證學(xué)生充足的時(shí)間上機(jī)實(shí)踐的同時(shí),又要讓學(xué)生樂于學(xué)習(xí)理論知識(shí),這也是教學(xué)中需要關(guān)注的問題。
2.4計(jì)算思維的培養(yǎng)是難點(diǎn)
計(jì)算思維是當(dāng)前計(jì)算機(jī)領(lǐng)域教學(xué)中比較關(guān)注的一個(gè)問題,即了解計(jì)算機(jī)是如何思考的,學(xué)習(xí)和計(jì)算機(jī)溝通,讓它幫我們高效地處理事情。具體來說,就是利用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念和方法對(duì)問題進(jìn)行描述、建模、求解[1]。計(jì)算思維無處不在,是解決問題的有效工具,應(yīng)該在本門課程教學(xué)過程中,融入計(jì)算思維的培養(yǎng),這也是教學(xué)實(shí)施的一個(gè)挑戰(zhàn)。學(xué)生往往反映可以學(xué)習(xí)和理解現(xiàn)有的算法,但遇到一個(gè)要求解的問題,卻難以分析,不知如何將具體問題抽象成計(jì)算機(jī)可以理解的模型,不知如何一步步推理設(shè)計(jì)出解決問題的方法。
2.5缺乏支撐教學(xué)的實(shí)例庫
本門課程實(shí)踐性強(qiáng),學(xué)生在了解算法思想的基礎(chǔ)上,需要加強(qiáng)對(duì)問題求解的算法實(shí)踐。目前主要是以選定教材為基礎(chǔ),要求學(xué)生參照教材、課件及課后習(xí)題,動(dòng)手完成相關(guān)算法的驗(yàn)證與設(shè)計(jì)。但由于學(xué)生基礎(chǔ)不一,需要建設(shè)層次不同的實(shí)例庫,供學(xué)生練習(xí),這就需要教師投入一定的精力,從大量的算法實(shí)例中進(jìn)行精選,設(shè)置層次類別,以便于學(xué)生階梯式學(xué)習(xí)。
3 教學(xué)中可采取的解決方案
3.1制定合理的目標(biāo)
要想提高教學(xué)質(zhì)量,必須確立明確的學(xué)習(xí)目標(biāo)。學(xué)習(xí)目標(biāo)包括知識(shí)技能目標(biāo)、思維意識(shí)目標(biāo)和情感價(jià)值目標(biāo)。學(xué)生普遍反映本門課程難,這是因?yàn)楸鹃T課程的綜合性強(qiáng),不僅要讓學(xué)生掌握算法設(shè)計(jì)的基本理論和主要方法,初步具備對(duì)算法復(fù)雜性進(jìn)行正確分析的能力,并能舉一反三,將所學(xué)內(nèi)容應(yīng)用到算法設(shè)計(jì)實(shí)踐中去,為后續(xù)課程的學(xué)習(xí)、課題研究奠定必要的算法設(shè)計(jì)基礎(chǔ)。要提高學(xué)生對(duì)計(jì)算機(jī)課程的學(xué)習(xí)興趣和熱情,引導(dǎo)學(xué)生注重將創(chuàng)造性思維活動(dòng)與科學(xué)嚴(yán)密性論證緊密結(jié)合,在學(xué)習(xí)、實(shí)踐中逐步養(yǎng)成善于思考、肯于鉆研的良好習(xí)慣,激發(fā)自覺投入科學(xué)研究的熱忱。
3.2科學(xué)設(shè)置教學(xué)內(nèi)容
課程內(nèi)容既要包含基礎(chǔ),又要突出重點(diǎn),還要設(shè)置進(jìn)階內(nèi)容。本門課程共設(shè)了九章內(nèi)容,旨在讓學(xué)生掌握各類算法的基本思想:第一章重點(diǎn)講述算法復(fù)雜性分析所用的數(shù)學(xué)方法;第二至八章為本課程的重點(diǎn),其內(nèi)容為算法設(shè)計(jì)的主要方法,包括排序算法、遞歸與分治策略、貪心算法、動(dòng)態(tài)規(guī)劃算法、回溯算法、分支與限界算法等,該部分要注重理論學(xué)習(xí)與設(shè)計(jì)實(shí)踐相結(jié)合;第九章隨機(jī)化算法與NP完全性理論是當(dāng)前計(jì)算機(jī)算法領(lǐng)域的熱點(diǎn)研究課題,設(shè)置為本課程的擴(kuò)展內(nèi)容。對(duì)于基礎(chǔ)比較差的學(xué)生補(bǔ)充數(shù)據(jù)結(jié)構(gòu)等基礎(chǔ)知識(shí)的講解。總體來說,內(nèi)容設(shè)置科學(xué)合理。
在教學(xué)過程中,應(yīng)該把握重點(diǎn),算法的設(shè)計(jì)與分析思想應(yīng)該貫穿整門課程的教學(xué)中,如第一章重點(diǎn)講解算法分析的數(shù)學(xué)符號(hào)和方法,但在后續(xù)章節(jié)的講授中,應(yīng)該把第一章算法的分析方法貫穿于其中;如講解0-1背包問題的回溯法時(shí),應(yīng)該與動(dòng)態(tài)規(guī)劃求解法進(jìn)行比較,突出不同算法的設(shè)計(jì)思想。
由于學(xué)生基礎(chǔ)水平不同,可以用算法來屏蔽專業(yè)差距,拋開編程語言的細(xì)節(jié),重在掌握算法的核心思想,不限制學(xué)生所用的編程語言,讓學(xué)生選擇自己熟悉的語言實(shí)現(xiàn)。還可讓編程能力比較低的學(xué)生預(yù)先熟悉環(huán)境,自學(xué)程序設(shè)計(jì)相關(guān)知識(shí);而對(duì)于專業(yè)技能比較高的學(xué)生,設(shè)置比較有難度的題目,開創(chuàng)其思維;也可結(jié)合學(xué)生研究課題,提供前沿文章供研究。
3.3合理應(yīng)用多種教學(xué)手段
該門課程是一門理論與實(shí)踐結(jié)合的課程,遵循素質(zhì)教育、創(chuàng)新教育和研究式教育的基本原則,以計(jì)算機(jī)算法設(shè)計(jì)與分析的理論和方法為重點(diǎn),按照理論與實(shí)踐相結(jié)合的教學(xué)模式,采用“精講、自學(xué)、研討、編程實(shí)踐”多種手段結(jié)合的方式,調(diào)動(dòng)學(xué)生學(xué)習(xí)的積極性,增強(qiáng)學(xué)生的學(xué)習(xí)自主性。
教學(xué)方式上可以結(jié)合翻轉(zhuǎn)課堂,應(yīng)突出以學(xué)生為中心,適當(dāng)?shù)剡x擇部分內(nèi)容讓學(xué)生來當(dāng)“教師”,如講述動(dòng)態(tài)規(guī)劃算法的基本思想及實(shí)例后,讓學(xué)生對(duì)另外的實(shí)例應(yīng)用進(jìn)行分析,并比較動(dòng)態(tài)規(guī)劃與分治法區(qū)別,動(dòng)態(tài)規(guī)劃算法與貪心算法的共同點(diǎn)等。還可采用研討式教學(xué)方法,選擇學(xué)生感興趣的內(nèi)容,學(xué)生為主角,討論交流自己的觀點(diǎn);教師進(jìn)行主持,引導(dǎo)學(xué)生提問或回答問題,并適當(dāng)糾正或補(bǔ)充學(xué)生的觀點(diǎn),最后進(jìn)行評(píng)價(jià)總結(jié)。學(xué)生自己當(dāng)教師和研討式教學(xué)都可以提高學(xué)生的學(xué)習(xí)興趣,提高上課的聽課效率,也鍛煉了學(xué)生的膽量和表達(dá)能力。
該門課程應(yīng)用面廣、操作性強(qiáng),只靠課堂學(xué)時(shí)是不夠的,學(xué)生的自學(xué)也尤為重要,尤其對(duì)于基礎(chǔ)水平較差的學(xué)生,教師應(yīng)鼓勵(lì)其充分利用課外時(shí)間進(jìn)行自學(xué)。教師可以給學(xué)生提供參考書籍等資源,以利于學(xué)生自學(xué);也可以讓學(xué)生搜索與算法相關(guān)的前沿文章,進(jìn)行分析研究。
3.4突出學(xué)生實(shí)踐、培養(yǎng)計(jì)算思維
針對(duì)本課程所體現(xiàn)的創(chuàng)造性思維活動(dòng)與科學(xué)嚴(yán)密性論證結(jié)合緊密的特點(diǎn),注重理論學(xué)習(xí)與實(shí)際問題結(jié)合,強(qiáng)調(diào)學(xué)生動(dòng)手實(shí)踐,突出課程的設(shè)計(jì)性。對(duì)于特定算法設(shè)計(jì)策略,通過生活中的例子引入,然后介紹其基本思想、主要特點(diǎn),再講解計(jì)算機(jī)科學(xué)和應(yīng)用中的經(jīng)典實(shí)例問題解決方法。教學(xué)過程中,注意實(shí)例由簡(jiǎn)到繁,對(duì)每個(gè)實(shí)例算法所需的時(shí)間和空間進(jìn)行分析,使學(xué)生在學(xué)到常用精巧算法的同時(shí),又能通過對(duì)算法設(shè)計(jì)策略的反復(fù)應(yīng)用,牢固掌握這些基本策略。對(duì)某些經(jīng)典問題(如背包問題、TSP問題等)選擇用不同的策略求解,比較分析各種策略的優(yōu)缺點(diǎn),使學(xué)生理解各種算法策略的特點(diǎn)、適用場(chǎng)合,并能融會(huì)貫通,即在求解實(shí)際問題中,合理地選擇所需要的策略[2]。要求學(xué)生動(dòng)手實(shí)現(xiàn)經(jīng)典問題的解決,并設(shè)置一定數(shù)量的算法設(shè)計(jì)題目,在打牢算法設(shè)計(jì)與分析的理論基礎(chǔ)的同時(shí),引導(dǎo)學(xué)生對(duì)問題進(jìn)行多角度思考,突出解決實(shí)際問題,培訓(xùn)學(xué)生的計(jì)算思維。
在教學(xué)中突出任務(wù)驅(qū)動(dòng)、以問題為中心、應(yīng)用實(shí)例教學(xué)法,讓學(xué)生隨時(shí)反映學(xué)習(xí)中存在的問題,并及時(shí)解決;對(duì)于每種算法,多講與實(shí)際應(yīng)用結(jié)合的實(shí)例,通過實(shí)例加強(qiáng)理解。在學(xué)生實(shí)踐方面,需要設(shè)置不同難度類型的題目,包括:對(duì)經(jīng)典算法的驗(yàn)證型、對(duì)已有算法的分析改進(jìn)、綜合性問題解決。由于學(xué)生水平不同,可針對(duì)不同學(xué)生設(shè)置不同題目,既要保證學(xué)生基礎(chǔ)知識(shí)的掌握,又要鼓勵(lì)表現(xiàn)突出的學(xué)生大膽創(chuàng)新,全面提高學(xué)生的編程實(shí)踐、算法設(shè)計(jì)、創(chuàng)新思維能力。
3.5合理將競(jìng)賽引入課堂
算法設(shè)計(jì)問題千變?nèi)f化,必須有大量的實(shí)踐才能真正掌握算法。目前每年都會(huì)舉辦程序設(shè)計(jì)競(jìng)賽,較著名的有:ACM-ICPC、TopCoderOpen、藍(lán)橋杯、華為軟件精英挑戰(zhàn)賽、微軟編程之美等,如果學(xué)生積極參加此類競(jìng)賽,既能提高學(xué)習(xí)興趣,又能通過競(jìng)賽掌握更多的知識(shí);如果有幸能從競(jìng)賽中脫穎而出,對(duì)學(xué)生學(xué)習(xí)是更大的激勵(lì)。教師應(yīng)鼓勵(lì)學(xué)生積極參加競(jìng)賽,也可以選擇ACM競(jìng)賽中的題目進(jìn)行課堂講解和分析,提高學(xué)生將算法應(yīng)用于工程實(shí)踐的能力。
教師可以參照ACM競(jìng)賽的方式和內(nèi)容,對(duì)學(xué)生分組,選取合適的題目,舉辦班級(jí)內(nèi)競(jìng)賽,促進(jìn)學(xué)生的學(xué)習(xí)動(dòng)力。競(jìng)賽內(nèi)容可以選擇算法分析題、算法改進(jìn)題、算法設(shè)計(jì)題,對(duì)于每類題目,教師需要預(yù)先研讀,能夠正確分析學(xué)生的解答,教師還可以選出優(yōu)秀的學(xué)生作品讓學(xué)生討論分析。[3]
3.6建立教學(xué)輔助平臺(tái)
教學(xué)輔助平臺(tái)可以給學(xué)生提供資源,包括課件、課后練習(xí)、參考代碼、視頻等輔助資料,同時(shí)可以提供交流互動(dòng)功能,讓學(xué)生與教師實(shí)時(shí)交流、在線答疑等,也可以進(jìn)行在線考核,完成教師給定的題目,并上傳作業(yè)等,這些是傳統(tǒng)的教學(xué)輔助平臺(tái)所具備的功能。
為了更好地輔助學(xué)生學(xué)習(xí),將傳統(tǒng)教學(xué)平臺(tái)改進(jìn):一是建設(shè)答題闖關(guān)式的系統(tǒng),平時(shí)測(cè)驗(yàn)均可通關(guān)闖關(guān)完成,教師可以通過平臺(tái)查看學(xué)生的任務(wù)完成情況;二是參照ACM競(jìng)賽的在線評(píng)判模式,學(xué)生的任務(wù)完成情況由系統(tǒng)自動(dòng)判閱,教師可以根據(jù)學(xué)生完成任務(wù)運(yùn)行時(shí)間的統(tǒng)計(jì)進(jìn)行評(píng)價(jià)分析。這不僅提高了教師的教學(xué)效率,由于富有挑戰(zhàn)性,還會(huì)促進(jìn)學(xué)生學(xué)習(xí)的積極性和有效性。[4]
教學(xué)輔助平臺(tái)中還要重視實(shí)例庫的建設(shè),教師收集實(shí)例并進(jìn)行分類,區(qū)分類型和難度,實(shí)例庫可以用于支撐教師測(cè)試或?qū)W生自學(xué)。實(shí)例庫中應(yīng)該至少覆蓋算法的五種基本策略:遞歸與分治、貪心法、動(dòng)態(tài)規(guī)劃法、回溯法、分支限界法,對(duì)于隨機(jī)化算法等可設(shè)為擴(kuò)展內(nèi)容;在類型上,設(shè)置分析性、設(shè)計(jì)性兩大類,以設(shè)計(jì)類為主,設(shè)計(jì)類分為經(jīng)典驗(yàn)證型、必選設(shè)計(jì)型、可選設(shè)計(jì)型,實(shí)例分層推進(jìn),學(xué)生根據(jù)自身的需求,在實(shí)例庫中選擇實(shí)現(xiàn),從而加強(qiáng)了根據(jù)學(xué)生特點(diǎn)的針對(duì)性教學(xué)。[5]
3.7改進(jìn)考核方式
考核的目的一方面是檢驗(yàn)學(xué)生掌握知識(shí)的程度,另一方面是督促學(xué)生學(xué)習(xí)的積極性。由于本門課程理論與實(shí)踐結(jié)合緊密,因此,不能單純地以閉卷考試作為考核的方式,而應(yīng)加入對(duì)算法設(shè)計(jì)能力的考核。可設(shè)置多種、多階段的考核方式:一是可以布置不同難度、有針對(duì)性的作業(yè)進(jìn)行階段性測(cè)試,主要通過上機(jī)實(shí)驗(yàn)課來完成,要求在規(guī)定的時(shí)間內(nèi)完成給定任務(wù);二是設(shè)置期中測(cè)試和期末測(cè)試,期中測(cè)試要求學(xué)生解決難度適中的綜合性問題,期末考試則需要測(cè)試知識(shí)掌握的系統(tǒng)性、全面性,采用閉卷考試方式。學(xué)生綜合成績(jī)則由平時(shí)測(cè)試成績(jī)和考試成績(jī)綜合判定,既要測(cè)試學(xué)生基礎(chǔ)知識(shí)的掌握程度,又要測(cè)試對(duì)問題的解決能力。
4 總結(jié)
本文探討了算法設(shè)計(jì)與分析課程教學(xué)中存在的主要問題,并從解決這些問題著手,結(jié)合教學(xué)經(jīng)驗(yàn),從教學(xué)內(nèi)容、教學(xué)手段、考核方式等多方面進(jìn)行了探討,重在突出以學(xué)生為中心、以任務(wù)為驅(qū)動(dòng)、培養(yǎng)創(chuàng)造思維的教學(xué)方式,從而增強(qiáng)學(xué)生學(xué)習(xí)的積極性,提高課程教學(xué)質(zhì)量。在以后的教學(xué)工作中,將會(huì)對(duì)各種改進(jìn)措施分別研究,制定更細(xì)化的實(shí)施方案。
參考文獻(xiàn):
[1] 孫亞紅. 《算法設(shè)計(jì)與分析》課程教學(xué)中計(jì)算思維的培養(yǎng)研究[J] . 電腦知識(shí)與技術(shù),2012(16):3910-3911.
[2] 朱曉勇.《算法設(shè)計(jì)與分析》教學(xué)大綱[EB/OL]. 2018.11.20. https://wenku.baidu.com/view/c3c21d3c3a3567ec102de2bd960590c69ec3d8b8.html.
[3] 李華,趙建平,等. 基于ACM-ICPC的算法設(shè)計(jì)與分析課程改革[J]. 計(jì)算機(jī)教育,2013(7):88-91.
[4] 何克晶,張星明,鄭運(yùn)平. 算法設(shè)計(jì)與分析課程全方位實(shí)踐教學(xué)改革探索[J]. 計(jì)算機(jī)教育,2017(2):45-49.
[5] 陳媛,盧玲. 專業(yè)學(xué)位碩士算法設(shè)計(jì)課程立體案例庫設(shè)計(jì)與實(shí)踐[J]. 計(jì)算機(jī)教育,2017(5):79-81.
【通聯(lián)編輯:王力】