国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

算法設(shè)計(jì)與分析課程案例教學(xué)模式的探討

2022-07-07 02:19:34秦敏王井陽喬世權(quán)
關(guān)鍵詞:動(dòng)態(tài)案例規(guī)劃

秦敏,王井陽,喬世權(quán)

(河北科技大學(xué) 信息科學(xué)與工程學(xué)院,河北石家莊 050018)

作為問題求解和程序設(shè)計(jì)的重要基礎(chǔ)——算法設(shè)計(jì)與分析在計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的課程體系中是一門重要的必修課,通過該課程的學(xué)習(xí),不但為學(xué)習(xí)其他專業(yè)課程奠定了扎實(shí)的基礎(chǔ),也對培養(yǎng)學(xué)生的邏輯思維和創(chuàng)造性起著不可替代的作用[1]。算法課程作為計(jì)算機(jī)學(xué)科的一門專業(yè)核心課程,尤其注重培養(yǎng)學(xué)生算法基本理論知識(shí)和計(jì)算思維、問題建模、算法設(shè)計(jì)與分析能力[2]。

1 教學(xué)目標(biāo)

本課程是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的重要課程,由于課程的難度比較大,那么課程要達(dá)到什么目標(biāo),如何講授好這門課就是值得探討的課題。目標(biāo)定得太高和太低都不可行,在這里給出本學(xué)校關(guān)于這門課的教學(xué)目標(biāo),希望和大家探討。本課程是為讓學(xué)生掌握經(jīng)典算法,學(xué)會(huì)用算法編程解決實(shí)際問題而設(shè)立。通過本課程的學(xué)習(xí),使學(xué)生能夠掌握經(jīng)典算法,并且能夠使用C 語言編程實(shí)現(xiàn)算法,以案例為驅(qū)動(dòng),理解算法開發(fā)過程,最終達(dá)到能夠進(jìn)行問題建模并用算法進(jìn)行分析和設(shè)計(jì)的目標(biāo)。

2 基于COID 的討論式案例教學(xué)模式

為了充分發(fā)揮學(xué)生的主動(dòng)性,讓學(xué)生成為主體,并不斷提高學(xué)生解決問題的能力和編程能力,借鑒CDIO 思想進(jìn)行了教學(xué)模式的設(shè)計(jì),稱為“基于COID的討論式案例教學(xué)模式”。CDIO 思想是國際工程教育的通用思想,即構(gòu)思(Conceive)、設(shè)計(jì)(Design)、實(shí)現(xiàn)(Implement)、運(yùn)作(Operate)[3]。在這個(gè)模式里教師提出案例問題,學(xué)生思考解決問題的算法策略,并編程實(shí)現(xiàn),最后教師主持學(xué)生討論,比如從案例中發(fā)現(xiàn)的算法間的區(qū)別,以及比較誰的方法最優(yōu),即哪種算法具有最小的時(shí)間復(fù)雜度或空間復(fù)雜度。在這個(gè)過程中,教師和學(xué)生的任務(wù)如表1所示。

表1 基于CDIO 的討論式案例教學(xué)模式表

每一個(gè)案例都經(jīng)過上述四個(gè)過程,經(jīng)過幾個(gè)案例之后,學(xué)生的編程能力顯著提高。在案例的指導(dǎo)和討論中,主要注意以下幾個(gè)方面:比較算法策略之間的關(guān)系,討論誰的方法最優(yōu),以及思維方法的滲透。

2.1 比較算法策略之間的關(guān)系

由于課本重點(diǎn)是講算法策略,對策略之間的關(guān)系并沒有特別說明。如何才能讓學(xué)生更好地理解算法策略,這里采用了通過案例來進(jìn)行算法策略比較的方法。例如分治策略是將原問題分解為若干個(gè)規(guī)模較小但類似于原問題的子問題,遞歸地求解這些子問題,然后再合并這些子問題的解來建立原問題的解。因?yàn)樵谇蠼獯髥栴}時(shí),需要遞歸地求解小問題,因此一般用遞歸的方法實(shí)現(xiàn),即自頂向下。動(dòng)態(tài)規(guī)劃把求解過程變成一個(gè)多步判斷的過程,每一步都對應(yīng)某個(gè)子問題,算法細(xì)心地劃分子問題的邊界,從小的子問題開始,逐層向上求解,通過子問題之間的依賴關(guān)系,有效利用前面已經(jīng)得到的結(jié)果,最大限度減少重復(fù)工作,以提高算法效率[1]。

分治策略和動(dòng)態(tài)規(guī)劃都是將原問題分解為若干個(gè)規(guī)模較小的子問題,求解這些子問題(Conquer),然后再合并這些子問題的解來建立原問題的解,那么這兩個(gè)算法策略之間的區(qū)別是什么呢?是否所有能用動(dòng)態(tài)規(guī)劃解決的問題都可以用分治策略解決呢?區(qū)別在于這些子問題是否會(huì)有依賴,子問題在求解后,可能會(huì)再次求解,于是需要將這些子問題的解存儲(chǔ)起來,當(dāng)下次再次求解這個(gè)子問題時(shí),可以直接使用。動(dòng)態(tài)規(guī)劃所解決的問題是分治策略所解決問題的一個(gè)子集,只是這個(gè)子集更適合用動(dòng)態(tài)規(guī)劃來解決,從而只需更少的運(yùn)行時(shí)間。即用動(dòng)態(tài)規(guī)劃能解決的問題,分治策略肯定能解決,只是運(yùn)行時(shí)間更長。因此,分治策略一般用來解決子問題相互獨(dú)立的情況,各個(gè)子問題之間不能有依賴關(guān)系,稱為標(biāo)準(zhǔn)分治,而動(dòng)態(tài)規(guī)劃用來解決子問題之間有依賴的情況。為了讓學(xué)生理解這一點(diǎn),設(shè)計(jì)了兩個(gè)案例。案例“安排比賽日程表”要求按某種規(guī)則安排n 個(gè)選手的比賽日程表,當(dāng)n 比較大時(shí),手動(dòng)已無法安排,只能采用分治策略,安排n 個(gè)選手分成安排兩個(gè)n/2 的選手,依次類推直到人數(shù)少到可以安排為止,這是一個(gè)分治策略的案例?!扒髨D中兩點(diǎn)間的最短路徑”是一個(gè)動(dòng)態(tài)規(guī)劃的案例,通過這兩個(gè)案例來讓學(xué)生體會(huì)兩個(gè)算法策略的區(qū)別。

再比如動(dòng)態(tài)規(guī)劃一般由兩種方法來實(shí)現(xiàn),一種為自頂向下的備忘錄方式,用遞歸實(shí)現(xiàn),一種為自底向上的方式,用遞推實(shí)現(xiàn)?!扒髨D中兩點(diǎn)間的最短路徑”要求學(xué)生用兩種方法編程,體會(huì)其中的區(qū)別。并用動(dòng)態(tài)規(guī)劃和分治策略兩種算法策略求解“求圖中兩點(diǎn)間的最短路徑”,比較哪種更合適,進(jìn)而思考什么情況下更適合用動(dòng)態(tài)規(guī)劃策略,什么情況下更適合用分治策略?再比如既然動(dòng)態(tài)規(guī)劃通常用遞推來實(shí)現(xiàn),那么它與遞推之間是什么關(guān)系?動(dòng)態(tài)規(guī)劃求解的多階段決策問題必須滿足最優(yōu)子結(jié)構(gòu)特性,而遞推所求解的問題則無須滿足。動(dòng)態(tài)規(guī)劃求解的是最優(yōu)化問題,遞推求解的是判定性問題、構(gòu)造性或計(jì)數(shù)性問題。比如“整幣兌零”若求解最少零幣個(gè)數(shù)屬于求最優(yōu)解,可以采用動(dòng)態(tài)規(guī)劃算法,如果求解的是不同的兌換種數(shù)則是計(jì)數(shù)性問題,只能采用遞推算法。再比如“0-1 背包問題”,是算法課程中動(dòng)態(tài)規(guī)劃策略教學(xué)的重要內(nèi)容。0-1 背包問題可描述為:存在1 個(gè)有限容量的背包和一組有限個(gè)數(shù)的物品,已知背包的容量以及每個(gè)物品的重量和價(jià)值,如何選擇裝入背包的物品,使得在不超過背包容量的前提下裝入背包的物品的總價(jià)值最大[4]。這是一個(gè)典型的動(dòng)態(tài)規(guī)劃算法策略的問題,而動(dòng)態(tài)規(guī)劃算法隨著背包容量增大、物品數(shù)量增加,其運(yùn)行時(shí)間逐漸增加。貪心算法是指在對問題求解時(shí),總是做出在當(dāng)前看來是最好的選擇。也就是說,不從整體最優(yōu)上加以考慮,它所做出的僅是在某種意義上的局部最優(yōu)解,是一種近似算法。從求解效率來說,貪心算法比動(dòng)態(tài)規(guī)劃更高,可以使用“0-1 背包問題”案例讓學(xué)生比較兩種算法的運(yùn)行時(shí)間,進(jìn)而讓學(xué)生理解當(dāng)求解最優(yōu)解時(shí)間太長的話那么接受一個(gè)近似解也是可以的。

2.2 討論誰的方法最優(yōu)

在案例評價(jià)階段,要組織學(xué)生討論比較誰的方法最優(yōu),比如“韓信點(diǎn)兵”這個(gè)案例,韓信在點(diǎn)兵的時(shí)候,為了知道有多少個(gè)士兵,同時(shí)又能保住軍事機(jī)密,便讓士兵排隊(duì)報(bào)數(shù)。按從1 至5 報(bào)數(shù),記下最末一個(gè)士兵的數(shù)為1;再按從1 至6 報(bào)數(shù),記下最末一個(gè)士兵的數(shù)為5;再按從1 至7 報(bào)數(shù),記下最末一個(gè)士兵的數(shù)為4;再按從1 至11 報(bào)數(shù),記下最末一個(gè)士兵的數(shù)為10。韓信至少有多少兵?韓信點(diǎn)兵是一個(gè)典型的枚舉算法的案例,但并不是一個(gè)一個(gè)數(shù)值地枚舉,如何枚舉才能枚舉次數(shù)最少,運(yùn)行時(shí)間最短,學(xué)生提出了各種各樣的方案。

方案1:初始值40,步長30 的方案,程序結(jié)果顯示枚舉次數(shù)為70 次。

方案2:初始值65,步長66 的方案,程序結(jié)果顯示枚舉次數(shù)為32 次。

方案3:初始值32,步長77 的方案,程序結(jié)果顯示枚舉次數(shù)為28 次。

還有各種其他方案,通過對這些方案的比較,學(xué)生對枚舉的認(rèn)識(shí)進(jìn)一步提高。再比如“求圖中兩點(diǎn)間的最短路徑”,就圖的存儲(chǔ),有的學(xué)生存儲(chǔ)了圖中所有的點(diǎn)和所有的邊,有的學(xué)生則知道這是一個(gè)鄰接矩陣。鄰接矩陣是一個(gè)對稱的矩陣,因?yàn)锳 點(diǎn)到B 點(diǎn)的距離為X,B 點(diǎn)到A 點(diǎn)的距離也為X,所以只保存上三角就可以了,減少了空間復(fù)雜度。而在算法上有的學(xué)生采用“Dijkstra”算法,有的學(xué)生采用動(dòng)態(tài)規(guī)劃算法,可以就不同的圖,比較兩種算法的運(yùn)行時(shí)間??傊ㄟ^設(shè)置案例讓學(xué)生編程,然后互相討論互相比較,一方面教學(xué)相長,另一方面也提高了學(xué)生的編程能力。

2.3 思維方法的滲透

國內(nèi)教材大部分都是按照基本算法策略進(jìn)行章節(jié)劃分,它們主要以分治法、貪心法、動(dòng)態(tài)規(guī)劃法、回溯法、分枝限界法等算法策略來組織內(nèi)容,這樣有利于學(xué)生著重體會(huì)各種算法的思想[5]。這種教學(xué)方式的優(yōu)點(diǎn)是學(xué)生在遇到具體問題時(shí)往往能夠較快地選擇合適的算法策略作為解題思路,然后根據(jù)現(xiàn)有算法作一定的變換后找到新問題的解決方法;缺點(diǎn)是對于那些無法明確歸類為某種算法策略的問題則可能無法迅速找到解題思路。所以在教學(xué)過程中有意識(shí)滲透一些科學(xué)思維方法,比如比較與分類方法、順向思維與逆向思維方法、分析與整合方法、發(fā)散與收斂方法、搭橋過河方法和模糊性思維方法等。如果遇到無法明確歸類為某種算法策略的問題,學(xué)生可以從更高一級(jí)的思維方法出發(fā),來找到解題的思路。在教學(xué)中有意識(shí)地講解科學(xué)的思維方法,不但有助于學(xué)生學(xué)習(xí),而且有助于學(xué)生開闊思路,對于學(xué)生以后的人生也有幫助。

比較與分類方法是貫穿始終的,比如回溯法與枚舉法的比較、遞推與遞歸的比較、遞歸與動(dòng)態(tài)規(guī)劃的比較、動(dòng)態(tài)規(guī)劃與分治策略之間的比較等[6]。枚舉法和回溯法都屬于搜索技術(shù),動(dòng)態(tài)規(guī)劃和分治策略都屬于分析與整合方法,諸如此類的分類有助于學(xué)生的總結(jié)和理解。順向思維與逆向思維方法也是經(jīng)常用到的,比如遞推有順推有逆推,采用哪種遞推須根據(jù)實(shí)際情況來定。在編程中更是經(jīng)常把乘法變成除法或者除法變成乘法、開方變成平方或者平方變成開方等。分析與整合方法,整個(gè)程序設(shè)計(jì)是結(jié)構(gòu)化的、是分模塊的,很多算法也體現(xiàn)了分析和整合方法,比如遞推、動(dòng)態(tài)規(guī)劃和分治策略。發(fā)散與收斂方法,教學(xué)中采用的討論式案例教學(xué)法就是一種發(fā)散與收斂方法,把案例布置下去,學(xué)生提出不同的解決方案,這屬于發(fā)散,再討論比較找出最佳方案,這屬于收斂。模糊性思維方法,在自然界與日常生活中,許多現(xiàn)象帶有不確定性,很難建立確切的數(shù)學(xué)模型,也不是所有問題都要求最優(yōu)解,這時(shí)就用到了模擬算法和貪心算法。表2給出了部分算法和思維方法之間的分類聯(lián)系。

表2 算法和思維方法之間的分類聯(lián)系

3 結(jié)語

算法作為一門比較難學(xué)的課程,如何才能講授好這門課是很多教師需要討論的問題。案例式教學(xué)可以發(fā)揮學(xué)生的主動(dòng)性,提高學(xué)生分析問題和解決問題的能力。本文根據(jù)COID 思想提出了一種討論式案例教學(xué)法供大家探討,強(qiáng)調(diào)在教學(xué)過程中對算法的比較和程序的優(yōu)化,并建議從更高一級(jí)的思維方法入手,進(jìn)一步開闊學(xué)生的思路。

猜你喜歡
動(dòng)態(tài)案例規(guī)劃
國內(nèi)動(dòng)態(tài)
國內(nèi)動(dòng)態(tài)
國內(nèi)動(dòng)態(tài)
案例4 奔跑吧,少年!
動(dòng)態(tài)
隨機(jī)變量分布及統(tǒng)計(jì)案例拔高卷
規(guī)劃引領(lǐng)把握未來
快遞業(yè)十三五規(guī)劃發(fā)布
商周刊(2017年5期)2017-08-22 03:35:26
發(fā)生在你我身邊的那些治超案例
中國公路(2017年7期)2017-07-24 13:56:38
多管齊下落實(shí)規(guī)劃
佳木斯市| 临海市| 镇远县| 益阳市| 宁安市| 白河县| 隆回县| 玉树县| 黄浦区| 郸城县| 邵阳市| 平昌县| 温泉县| 敦煌市| 林甸县| 巴彦县| 社旗县| 兴国县| 巩义市| 鄂伦春自治旗| 绥江县| 富平县| 璧山县| 大竹县| 邵武市| 汽车| 常德市| 汾阳市| 德庆县| 峨山| 仙居县| 子长县| 河西区| 五大连池市| 九龙坡区| 克山县| 廉江市| 河源市| 富锦市| 洮南市| 北辰区|