第一篇:算法設(shè)計(jì)與實(shí)現(xiàn)個(gè)人課程總結(jié)
算法課程總結(jié)
指導(dǎo)教師 所在院(系)班 級(jí) 學(xué)生姓名 學(xué) 號(hào)
一、算法概述
1.什么是算法?
算法是解一確定類問題的任意一種特殊的方法。在計(jì)算機(jī)科學(xué)中,算法是使用計(jì)算機(jī)解一類問題的精確、有效方法的代名詞。算法是一組有窮的規(guī)則,它規(guī)定了解決某一特定類型問題的一系列運(yùn)算。
2.算法的五個(gè)重要特性:確定性、能行性、輸入、輸出、有窮性/有限性。
1)確定性:算法每種運(yùn)算必須有確切定義,不能有二義性。
2)能行性:算法中有待實(shí)現(xiàn)的運(yùn)算都是基本的運(yùn)算,原理上每種運(yùn)算都能由人用紙和筆在有限的時(shí)間內(nèi)完成。
3)輸入:每個(gè)算法有0個(gè)或多個(gè)輸入。這些輸入是在算法開始之前給出的量,取自于特定的對(duì)象集合——定義域
4)輸出:一個(gè)算法產(chǎn)生一個(gè)或多個(gè)輸出,這些輸出是同輸入有某種特定關(guān)系的量。
5)有窮性/有限性:一個(gè)算法總是在執(zhí)行了有窮步的運(yùn)算之后終止。
3.計(jì)算過程:只滿足確定性、能行性、輸入、輸出四個(gè)特性但不一定能終止的一組規(guī)則。
4.準(zhǔn)確理解算法和計(jì)算過程的區(qū)別:不能終止的計(jì)算過程:操作系統(tǒng);算法是“可以終止的計(jì)算過程”;算法的時(shí)效性:只能把在相當(dāng)有窮步內(nèi)終止的算法投入到計(jì)算機(jī)上運(yùn)行。
5.算法的語(yǔ)言主要有:自然語(yǔ)言,流程圖,盒圖,PAD圖,偽代碼,計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。6.算法分類:
1)多項(xiàng)式時(shí)間算法:可用多項(xiàng)式(函數(shù))對(duì)其計(jì)算時(shí)間限界的算法。常見的多項(xiàng)式限界函數(shù)有:Ο(1)< Ο(logn)< Ο(n)< Ο(nlogn)< Ο(n2)< Ο(n3)2)指數(shù)時(shí)間算法:計(jì)算時(shí)間用指數(shù)函數(shù)限界的算法。常見的指數(shù)時(shí)間限界函數(shù):Ο(2n)< Ο(n!)< Ο(nn)7.算法基本工具:循環(huán)與遞歸,算法與數(shù)據(jù)結(jié)構(gòu),優(yōu)化算法的數(shù)學(xué)模型。
8.主要算法:迭代算法,蠻力法,分治法,動(dòng)態(tài)規(guī)劃法,貪婪算法,圖搜索基礎(chǔ)。
二、算法的核心是思想
我們學(xué)習(xí)這門課不是僅僅掌握那幾個(gè)經(jīng)典算法例子,更重要的是為了學(xué)習(xí)蘊(yùn)含在其中的思想方法。為什么呢?舉個(gè)例子。有同學(xué)曾問我這樣一個(gè)問題:1000只瓶子裝滿水,但有一瓶有毒,且毒發(fā)期為1個(gè)星期。現(xiàn)在用10只老鼠在一個(gè)星期內(nèi)判斷那只瓶子有毒,每只老鼠可以喝多個(gè)瓶子的水,每個(gè)瓶子可以只喝一點(diǎn)。問如何解決?其實(shí)一開始我也一頭霧水,但是他提醒我跟計(jì)算機(jī)領(lǐng)域相關(guān),我就立馬有了思路,運(yùn)用二進(jìn)制。因?yàn)橛?jì)算機(jī)的最基本思想就是二進(jìn)制。所以說,我們不僅要學(xué)習(xí)算法,更得學(xué)習(xí)思想方法。
①算法最基本的設(shè)計(jì)方法包括分治法,動(dòng)態(tài)規(guī)劃法,貪婪算法,周游法,回溯法,分支定界法。我們可利用分治法做快速排序,降低找n個(gè)元素中最大元和最小元的量級(jí),降低n位二進(jìn)制x和y相乘的量級(jí),做Strassen矩陣乘法等等。它的思想就是規(guī)模很大的問題分解為規(guī)模較小的獨(dú)立的子問題,關(guān)鍵是子問題要與原問題同類,可以采取平衡法來提高性能。
動(dòng)態(tài)規(guī)劃法是把大問題分解為子問題,但是子問題是重復(fù)的,后面的問題可以利用前面解決過的問題的結(jié)果。如構(gòu)造最優(yōu)二叉查找樹,解決矩陣連乘時(shí)最小計(jì)算次數(shù)問題,尋找最長(zhǎng)公共子序列等等。
貪婪算法就是局部最優(yōu)法,先使局部最優(yōu),再依次構(gòu)造出更大的局部直至整體。如Kruscal最小生成樹算法,求哈夫曼編碼問題。
周游法就是簡(jiǎn)單理解就是采取一定的策略遍歷圖中所有的點(diǎn),典型的應(yīng)用就是圖中的深度優(yōu)先搜索(DFS)和廣度優(yōu)先搜索(BFS)。
回溯法就是就是在滿足一定的條件后就往前走,當(dāng)走到某步時(shí),發(fā)現(xiàn)不滿足條件就退回一步重新選擇新的路線。典型的應(yīng)用就是8皇后問題,平面點(diǎn)集的凸包問題和0-1背包問題。
分支定界法:它是解決整數(shù)規(guī)劃問題一種最常用的方法。典型應(yīng)用就是解決整數(shù)規(guī)劃問題。
②評(píng)價(jià)算法性能的方法如平攤分析中的聚集法,會(huì)計(jì)法和勢(shì)能法。聚集法就是把指令分為幾類,計(jì)算每一類的消耗,再全部疊加起來。會(huì)計(jì)法就是計(jì)算某個(gè)指令時(shí)提前將另一個(gè)指令的消耗也算進(jìn)去,以后計(jì)算另一個(gè)指令時(shí)就不必再算了。勢(shì)能法計(jì)算每一步的勢(shì)的變化以及執(zhí)行這步指令的消耗,再將每一步消耗全部累計(jì)。
這幾種方法都是平攤分析法,平攤分析的實(shí)質(zhì)就是總體考慮指令的消耗時(shí)間,盡管某些指令的消耗時(shí)間很大也可以忽略不計(jì)。上述三種方法難易程度差不多,每種方法都有屬于它的難點(diǎn)。如聚集法中如何將指令有效分類,會(huì)計(jì)法中用什么指令提前計(jì)算什么指令的消耗,勢(shì)能法中如何選取勢(shì)能。因此掌握這些方法原理還不夠,還要學(xué)會(huì)去應(yīng)用,在具體的問題中去判斷分析。
三、重點(diǎn)學(xué)習(xí)
1.貪婪算法
貪婪+其他算法:由于貪婪往往能大幅化簡(jiǎn)狀態(tài),利用問題的某些“單調(diào)性”,加上貪婪的思想,往往能是問題大幅簡(jiǎn)化,從而結(jié)合其他算法解決問題經(jīng)典例題:田忌賽馬,利用貪婪來確定狀態(tài)。2.分治法
分而治之的思想在信息學(xué)競(jìng)賽中是非常重要的,下面主要介紹一下分治的經(jīng)典應(yīng)用
1)二分查找
思想很簡(jiǎn)單,功能很強(qiáng)大,邊界要注意,負(fù)數(shù)要特判(NOI2010 PIANO)在非負(fù)數(shù)范圍內(nèi)的二分一般寫法
如果是l := mid1 或 +1則 mid :=(l + r + 1)div 2 2)快速冪
a^b =(a^(b div 2))^2 + ord(odd(b))*a取模也適用 3)快速排序,歸并排序
任何一本算法書上都會(huì)講的,這里就略過了,值得一提的是快排記得加上隨機(jī)化
k := a[random(rg(x)*ans = 0 重構(gòu)權(quán),將f(i)-g(i)*ans作為新權(quán)值,用相應(yīng)算法求出一個(gè)“最小值”,判斷是否>=0,接著二分即可
5)樹的分治
一般用來解決樹上的路徑或統(tǒng)計(jì)類問題,每次只考慮跟樹根有關(guān)的信息,然后遞歸分治處理
樹的分治通常有基于點(diǎn)或基于邊的分治,基于點(diǎn)的難合,基于邊的復(fù)雜度太高,這里只介紹基于點(diǎn)的分治
步驟:處理跟當(dāng)前樹根有關(guān)的信息,重新計(jì)算子樹大小,在子樹中選擇重心為根,遞歸到相應(yīng)子樹處理。
因?yàn)槊看芜x了重心,所以遞歸總共logn層,每層O(n)的復(fù)雜度,總復(fù)雜度就是O(nlogn)6)二分搜索
直接搜的復(fù)雜度是指數(shù)級(jí)的的話,一般是40左右的數(shù)據(jù)量,hash一半,搜一半,搜后面的時(shí)候利用之前的hash信息合并出原問題的解。
而直接搜的復(fù)雜度達(dá)到階乘級(jí)的話n一般就不超過20了,做法一般差不多 經(jīng)典例題:POI02szy,NOI2001方程的解數(shù)。3.搜索
作為信息學(xué)競(jìng)賽中的所謂“萬(wàn)能算法”,搜索可以說是計(jì)算機(jī)學(xué)科所具有的最大特點(diǎn)了,自然地,搜索算法的應(yīng)用自然也是非常之廣泛,除了專門的搜索題,搜索一般可以用來部分預(yù)處理,打表找規(guī)律,當(dāng)然還有騙分。
搜索的一般步驟:確定狀態(tài)——選擇搜索方式(dfs、bfs)——確定產(chǎn)生式規(guī)則——開始搜索。搜索的常見優(yōu)化方式:
1)改變狀態(tài)表示
這個(gè)需要根據(jù)題目而定,確定一個(gè)漂亮的狀態(tài)表示,可能就有希望轉(zhuǎn)向記憶化了,即使不行,搞出一個(gè)漂亮的狀態(tài)表示是解決一道麻煩題的最重要的一步,再者,調(diào)試起來也會(huì)容易許多。
2)優(yōu)化搜索順序
這個(gè)優(yōu)化在多數(shù)搜索中能起到摧枯拉朽的提速效果,通常我們選擇枝葉較少的兒子先擴(kuò)展,例如大名鼎鼎的dancing Links,除了利用雙向十字鏈表去除冗余狀態(tài),每次選擇可擴(kuò)展數(shù)最少的兒子擴(kuò)展同樣給它的神速創(chuàng)造了條件。
3)可行性剪枝以及最優(yōu)性剪枝
這是非常常用的剪枝思路之一,因題目而異,在迭代加深搜索中尤為重要 一般思路:考慮每次解最多變優(yōu)多少,從當(dāng)前的層數(shù)來看還有多少改進(jìn)空間,如果已經(jīng)不可能成為解或更新答案則可以剪枝了
——A*及IDA*算法:本質(zhì)就是給搜索加上一個(gè)滿足相容性的估價(jià)函數(shù),然后用估價(jià)函數(shù)剪枝,理論上很牛B,實(shí)際上不常用,因?yàn)榭紙?chǎng)上很難想出滿足那么多條件的估價(jià)函數(shù),但記得一些常見模型的估價(jià)函數(shù)還是有價(jià)值的。例如15數(shù)碼的估價(jià)函數(shù)就可以選擇除了0之外每個(gè)元素到自己該到的位置的曼哈頓距離之和,因?yàn)槊看巫疃嗍挂粋€(gè)數(shù)距離減少1,所以這個(gè)估價(jià)函數(shù)是相容的,再例如求k短路的A*算法就是用個(gè)堆維護(hù) min{ f(s)+ g(s)}估價(jià)函數(shù)就是從匯點(diǎn)反搜的“反向最短路”的長(zhǎng)度。
四、總結(jié)
在計(jì)算機(jī)軟件專業(yè)中,算法分析與設(shè)計(jì)是一門非常重要的課程,很多人為它如癡如醉。很多問題的解決,程序的編寫都要依賴它,在軟件還是面向過程的階段,就有程序=算法+數(shù)據(jù)結(jié)構(gòu)這個(gè)公式。算法的學(xué)習(xí)對(duì)于培養(yǎng)一個(gè)人的邏輯思維能力是有極大幫助的,它可以培養(yǎng)我們養(yǎng)成思考分析問題,解決問題的能力。作為IT行業(yè)學(xué)生,學(xué)習(xí)算法無疑會(huì)增強(qiáng)自己的競(jìng)爭(zhēng)力,修煉自己的“內(nèi)功”。
經(jīng)過這門課的學(xué)習(xí),我深刻的領(lǐng)悟到數(shù)學(xué)是一切算法分析與設(shè)計(jì)的基礎(chǔ)。這門課的很多時(shí)間多花在了數(shù)學(xué)公式定理的引入和證明上。雖然很枯燥,但是有必不可少。我們可以清晰的看到好多算法思路是從這些公式定理中得出來的,尤其是算法性能的分析更是與數(shù)學(xué)息息相關(guān)。其中有幾個(gè)定理令我印象深刻。
①主定理
本門課中它主要應(yīng)用在分治法性能分析上。例如:T(n)=a*T(n/b)+f(n),它可以看作一個(gè)大問題分解為a個(gè)子問題,其中子問題的規(guī)模為b。而f(n)可看作這些子問題的組合時(shí)的消耗。這些可以利用主定理的相關(guān)結(jié)論進(jìn)行分析處理。當(dāng)f(n)量級(jí)高于時(shí),我們可以設(shè)法降低子問題組合時(shí)的消耗來提高性能。反之我們可以降低的消耗,即可以擴(kuò)大問題的規(guī)模或者減小子問題的個(gè)數(shù)。因此主定理可以幫助我們清晰的分析出算法的性能以及如何進(jìn)行有效的改進(jìn)。
②隨機(jī)算法中的許多定理的運(yùn)用
在這門課中,我學(xué)到了以前從未遇見過的隨機(jī)算法,它給予我很大的啟示。隨機(jī)算法不隨機(jī),它可通過多次的嘗試來降低它的錯(cuò)誤率以至于可以忽略不計(jì)。這些都不是空穴來風(fēng),它是建立在嚴(yán)格的定理的證明上。如素?cái)?shù)判定定理是個(gè)很明顯的例子。它運(yùn)用了包括費(fèi)馬小定理在內(nèi)的各種定理。將這些定理進(jìn)行有效的組合利用,才得出行之有效的素?cái)?shù)判定的定理。尤其是對(duì)尋找證據(jù)數(shù)算法的改進(jìn)的依據(jù),也是建立在3個(gè)定理上。還有檢查字符串是否匹配也是運(yùn)用了許多定理:指紋的運(yùn)用,理論出錯(cuò)率的計(jì)算,算法性能的評(píng)價(jià)也都是建立在數(shù)學(xué)定理的運(yùn)用上。
第二篇:數(shù)據(jù)結(jié)構(gòu)與算法課程總結(jié)[模版]
數(shù)據(jù)結(jié)構(gòu)與算法課程學(xué)習(xí)總結(jié)報(bào)告
11計(jì)本一班 許雪松 1104013018
數(shù)據(jù)結(jié)構(gòu)與算法是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),它不僅是計(jì)算機(jī)科學(xué)的核心課程,而且也已經(jīng)成為其他理工專業(yè)的熱門選修課。總的來說感觸還是比較深的,剛開始上的時(shí)候還蠻簡(jiǎn)單的,越到后面感覺越難,算法也更復(fù)雜了,有時(shí)候甚至聽不懂,老師上課時(shí)講的也蠻快的,所以只能靠課下下功夫了。下面是我對(duì)本學(xué)期學(xué)習(xí)這門課的總結(jié)。
一、數(shù)據(jù)結(jié)構(gòu)與算法知識(shí)點(diǎn)
第一章的數(shù)據(jù)結(jié)構(gòu)和算法的引入,介紹了數(shù)據(jù)和數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)、算法描述工具、算法和算法評(píng)價(jià)四個(gè)方面的知識(shí)。
第二章具體地介紹了順序表的概念、基本運(yùn)算及其應(yīng)用。基本運(yùn)算有:初始化表、求表長(zhǎng)、排序、元素的查找、插入及刪除等。元素查找方法有:簡(jiǎn)單順序查找、二分查找和分塊查找。排序方法有:直接插入排序、希爾排序、冒泡排序、快速排序、直接選擇排序及歸并排序等。最后介紹了順序串的概念,重點(diǎn)在于串的模式匹配。
第三章主要介紹的是線性邏輯結(jié)構(gòu)的數(shù)據(jù)在鏈接存儲(chǔ)方法下數(shù)據(jù)結(jié)構(gòu)鏈表的相關(guān)知識(shí)。主要是單鏈表、循環(huán)鏈表的數(shù)據(jù)類型結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、基本運(yùn)算及其實(shí)現(xiàn)以及鏈表的相關(guān)應(yīng)用問題,在此基礎(chǔ)上介紹了鏈串的相關(guān)知識(shí)。在應(yīng)用方面有多項(xiàng)式的相加問題、歸并問題、箱子排序問題和鏈表在字符處理方面的應(yīng)用問題等。本章未完全掌握的是循環(huán)鏈表的算法問題和C的描述。
第四章介紹在兩種不同的存儲(chǔ)結(jié)構(gòu)下設(shè)計(jì)的堆棧,即順序棧和鏈棧的相關(guān)知識(shí),了解堆棧的相關(guān)應(yīng)用,掌握應(yīng)用堆棧來解決實(shí)際問題的思想及方法。本章主要內(nèi)容是順序棧和鏈棧的概念、數(shù)據(jù)類型、數(shù)據(jù)結(jié)構(gòu)定義和基本運(yùn)算算法及其性能分析。本章堆棧算法思想較為簡(jiǎn)單,所以能較好掌握。
第五章主要介紹順序存儲(chǔ)和鏈接存儲(chǔ)方法下的兩種隊(duì)列、順序(循環(huán))隊(duì)列和鏈隊(duì)列的數(shù)據(jù)結(jié)構(gòu)、基本運(yùn)算及其性能分析以及應(yīng)用。順序隊(duì)列(重點(diǎn)是循環(huán)隊(duì)列)和鏈隊(duì)列的概念、數(shù)據(jù)類型描述、數(shù)據(jù)結(jié)構(gòu)和基本運(yùn)算算法及其性能分析等。本章同堆棧有點(diǎn)類似,算法思想較為簡(jiǎn)單,所以能較好掌握;但難點(diǎn)重在循環(huán)隊(duì)列隊(duì)空、隊(duì)滿的判斷條件問題。
第六章“特殊矩陣、廣義表及其應(yīng)用”將學(xué)習(xí)數(shù)組、稀疏矩陣和廣義表的基本概念,幾種特殊矩陣的存儲(chǔ)結(jié)構(gòu)及其基本運(yùn)算,在此基礎(chǔ)上學(xué)習(xí)特殊矩陣的計(jì)算算法與廣義表應(yīng)用等相關(guān)問題。本章的重點(diǎn)是相關(guān)數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu)及其基本運(yùn)算算法。掌握了特殊矩陣的壓縮存儲(chǔ)結(jié)構(gòu),在該存儲(chǔ)結(jié)構(gòu)下元素的定位方法,理解了稀疏矩陣的計(jì)算和廣義表的存儲(chǔ)結(jié)構(gòu)。
第七章二叉樹及其應(yīng)用。分為二叉樹的基本概念、二叉樹存儲(chǔ)結(jié)構(gòu)、二叉樹的遍歷算法、線索二叉樹、二叉樹的應(yīng)用(哈夫曼樹、二叉排序樹、堆和堆排序、基本算法)。基本算法包括二叉樹的建立、遍歷、線索化等算法。在此基礎(chǔ)上,介紹二叉樹的一些應(yīng)用問題,包括哈夫曼編碼問題、(平衡)二叉排序樹問題和堆排序問題等。
第八章說的是樹和森林,首先我們要知道樹與二叉樹是不同的概念。課本介紹了樹和森林的概念、遍歷和存儲(chǔ)結(jié)構(gòu),還有樹、森林和二叉樹的相互關(guān)系,樹或森林怎樣轉(zhuǎn)化成二叉樹,二叉樹又如何轉(zhuǎn)換為樹和森林等算法。
第九章“散列結(jié)構(gòu)及其應(yīng)用”是邏輯結(jié)構(gòu)“集合型”的數(shù)據(jù)元素在散列存儲(chǔ)方法下的數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用知識(shí)內(nèi)容。主要介紹散列函數(shù)的概念、散列結(jié)構(gòu)的概念、散列存儲(chǔ)結(jié)構(gòu)的概念---散列表、散列函數(shù)和散列表中解決沖突的處理方法---開放定址法、鏈地址法以及散列表的基本算法及其性能分析。本章概念較為多,所以掌握不太好。
第十章圖及其應(yīng)用。分為圖的概念、圖的存儲(chǔ)結(jié)構(gòu)及其基本算法、圖的遍歷及算法、有向圖的連通性和最小生成樹、圖的最小生成樹、非連通圖的生成森林算法、最短路徑、有向無環(huán)圖及其應(yīng)用。
二、對(duì)各知識(shí)點(diǎn)的掌握情況
我對(duì)各知識(shí)點(diǎn)的掌握情況總結(jié)如下:
對(duì)于第一章對(duì)數(shù)據(jù)結(jié)構(gòu)的概念理解頗深,大概是每次都要談?wù)摰桨伞?duì)算法的時(shí)間性能,空間性能基本了解。這些在后面的章節(jié)都會(huì)有運(yùn)用。第二章本章重點(diǎn)和難點(diǎn)在查找和排序問題的算法思想上,6種排序方法的性能比較。本章未掌握的為希爾排序、快速排序、歸并排序的時(shí)間復(fù)雜度分析。第三章,對(duì)鏈表掌握還好,對(duì)其數(shù)據(jù)結(jié)構(gòu)進(jìn)行了分析,有循環(huán)鏈表,掌握的不是很好,對(duì)其中一些用法不熟練。第四章堆棧,本章堆棧算法思想較為簡(jiǎn)單,所以能較好掌握,但表達(dá)式計(jì)算問題未掌握好的。第五章的循環(huán)隊(duì)列隊(duì)空、隊(duì)滿的判斷條件問題掌握的不是很好。第六章的重點(diǎn)是相關(guān)數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu)及其基本運(yùn)算算法。掌握了特殊矩陣的壓縮存儲(chǔ)結(jié)構(gòu),在該存儲(chǔ)結(jié)構(gòu)下元素的定位方法,理解了稀疏矩陣的計(jì)算和廣義表的存儲(chǔ)結(jié)構(gòu)。第七章對(duì)二叉樹掌握較好,其概念,存儲(chǔ),遍歷有很好的掌握。就是對(duì)二叉排序樹有點(diǎn)生疏,它的生成算法不是很會(huì)。第八章樹樹與二叉樹之間的轉(zhuǎn)換,森林與二叉樹的轉(zhuǎn)換算法思想基本掌握。第九章散列的一些知識(shí),沒有深入學(xué)習(xí),大概了解了散列存儲(chǔ)結(jié)構(gòu)散列表,散列函數(shù),沖突的處理方法。第十章了解了圖的逆鄰接表的存儲(chǔ)結(jié)構(gòu),關(guān)鍵路徑求解算法未能掌握好,不能靈活運(yùn)用圖的不同數(shù)據(jù)結(jié)構(gòu)和遍歷算法解決復(fù)雜的應(yīng)用問題。
三、學(xué)習(xí)體會(huì)
剛剛接觸這門課時(shí),看到課本中全是算法,當(dāng)時(shí)就暈了,因?yàn)槲业腃語(yǔ)言學(xué)的不好,我擔(dān)心會(huì)影響這門課的學(xué)習(xí),后來上課時(shí)老師說學(xué)習(xí)這門課的基礎(chǔ)是C語(yǔ)言,所以我當(dāng)時(shí)就決定一定要好好補(bǔ)補(bǔ),爭(zhēng)取不被拖后腿,在學(xué)習(xí)這門課的期間,也遇到了不少問。但是通過學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法,讓我對(duì)程序有了新的認(rèn)識(shí),也有了更深的理解。同時(shí),也讓我認(rèn)識(shí)到,不管學(xué)習(xí)什么,概念是基礎(chǔ),所有的知識(shí)框架都是建立在基礎(chǔ)概念之上的,所以,第一遍看課本要將概念熟記于心,然后構(gòu)建知識(shí)框架。并且,對(duì)算法的學(xué)習(xí)是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵。在第二遍看課本的過程中,要注重對(duì)算法的掌握。對(duì)于一個(gè)算法,讀一遍可能能讀懂,但不可能完全領(lǐng)會(huì)其中的思想。掌握一個(gè)算法,并不是說將算法背過,而是掌握算法的思想。我們需要的是耐心。每看一遍就會(huì)有這一遍的收獲。讀懂算法之后,自己再默寫算法,寫到不會(huì)的地方,看看課本想想自己為什么沒有想到。對(duì)算法的應(yīng)用上,學(xué)習(xí)算法的目的是利用算法解決實(shí)際問題。會(huì)寫課本上已有的算法之后,可以借其思想進(jìn)行擴(kuò)展,逐步提高編程能力。
四、對(duì)課程教學(xué)的建議
1、課程課時(shí)較緊,課堂上的練習(xí)時(shí)間較少,講解的東西越多,頭腦有時(shí)就很混亂。
2、感覺上課時(shí)的氣氛不是很好,雖然大部分人都在聽,可是效果不是很好。所以希望老師能在授課中間能穿插一些活躍課堂氛圍的話題,可以是大家都非常關(guān)心的一些內(nèi)容,這樣既讓大家能在思考之余有一個(gè)放松,也能夠提高學(xué)生的學(xué)習(xí)積極性和學(xué)習(xí)效率。
3、學(xué)習(xí)的積極性很重要,有時(shí)候我們花了很長(zhǎng)時(shí)間去寫實(shí)驗(yàn)報(bào)告,也很認(rèn)真的去理解去掌握,可是最后實(shí)驗(yàn)報(bào)告可能就只得了一個(gè)C,抄的人反而得A,這樣的話很容易打擊學(xué)生的積極性,在后面的實(shí)驗(yàn)報(bào)告中沒動(dòng)力再去認(rèn)真寫。所以希望老師能在這方面有所調(diào)整。
4、雖然講課的時(shí)間很緊,但是還是希望老師能在講述知識(shí)點(diǎn)的時(shí)候能運(yùn)用實(shí)際的調(diào)試程序來給我們講解,這樣的話能讓我們對(duì)這些內(nèi)容有更深刻的印象和理解。
第三篇:數(shù)據(jù)結(jié)構(gòu)與算法個(gè)人總結(jié)
數(shù)據(jù)結(jié)構(gòu)與算法
重點(diǎn)內(nèi)容:排序運(yùn)算的算法、檢索運(yùn)算的算法,本部分所占分值較高,在11分左右; 考試點(diǎn):數(shù)據(jù)順序存儲(chǔ)與鏈?zhǔn)酱鎯?chǔ)、棧與隊(duì)列的操作、二叉樹的存儲(chǔ)及遍歷(或周游)、霍夫曼算法及其應(yīng)用、各類排序算法;
知識(shí)部分: 1.數(shù)據(jù)結(jié)構(gòu)的內(nèi)容:
數(shù)據(jù)的邏輯結(jié)構(gòu):分為線性結(jié)構(gòu)和非線性結(jié)構(gòu)
數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu): 是數(shù)據(jù)的邏輯結(jié)構(gòu)在存儲(chǔ)器里的實(shí)現(xiàn);
數(shù)據(jù)的運(yùn)算:插入、刪除、排序、查找等; 2.數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)分為:順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。3.單鏈表與雙鏈表的插入與刪除這里不再贅述,百度一下吧!
4.棧與隊(duì)列的基本運(yùn)算有:插入、刪除、讀取頭元素到變量中,原棧或隊(duì)列保持不變、判斷是否為空、將棧或隊(duì)列置為空
5.串的基本運(yùn)算有:鏈接、賦值、求長(zhǎng)度、全等比較、求子串、求子串的位置及替換等。6.廣義表:廣義表是線性表的推廣,也稱列表。
廣義表的特點(diǎn):
廣義表的元素可以使字表,且字表的元素還可以是字表;
廣義表可以被其他廣義表所共享;
廣義表可以是遞歸的表,機(jī)本身的一個(gè)字表;
7.多維數(shù)組與稀疏矩陣的存儲(chǔ)比較復(fù)雜,請(qǐng)用百度查找相關(guān)內(nèi)容,不再贅述;
8.樹:樹并不重要,重要的知識(shí)點(diǎn)是二叉樹,對(duì)樹理解不透徹的同學(xué),請(qǐng)用百度搜索。9.二叉樹:
二叉樹的重點(diǎn)內(nèi)容包括:
二叉樹的遍歷:中序遍歷、前序遍歷、后續(xù)遍歷;(重點(diǎn)考察)完全二叉樹(定義):在一棵二叉樹中,若最多只有最下面兩層的節(jié)點(diǎn)數(shù)可小于2,且最下面一層的節(jié)點(diǎn)集中于最左邊的位置,則稱此二叉樹為完全二叉樹; 樹的先根次序周游對(duì)應(yīng)于二叉樹的前序周游(遍歷),樹的后根次序周游對(duì)應(yīng)于二叉樹的中序周游(遍歷)
10.二叉樹的存儲(chǔ)結(jié)構(gòu):鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)與順序存儲(chǔ)結(jié)構(gòu)。
二叉樹的鏈?zhǔn)酱鎯?chǔ):
是指二叉樹的各節(jié)點(diǎn)隨機(jī)存儲(chǔ)在內(nèi)存空間中,節(jié)點(diǎn)之間的關(guān)系用指針標(biāo)示;
二叉樹鏈表的節(jié)點(diǎn)包括三個(gè):左指針,數(shù)據(jù)域,右指針;其中左指針指向左子節(jié)點(diǎn),有指針指向右子節(jié)點(diǎn);也可以是指一個(gè)父指針(parent)用于指向父節(jié)點(diǎn); 二叉樹鏈表的重要知識(shí)點(diǎn):一個(gè)n節(jié)點(diǎn)的二叉樹鏈表,有n+1個(gè)空指針域;
二叉樹的順序存儲(chǔ):
二叉樹的順序存儲(chǔ)就是按一定的次序,用一組地址連續(xù)的存儲(chǔ)單元存儲(chǔ)二叉樹的節(jié)點(diǎn)元素;
完全二叉樹的順序存儲(chǔ)的性質(zhì):
用數(shù)組A[1….n]順序存儲(chǔ)完全二叉樹的各節(jié)點(diǎn),則當(dāng)i>0,且i<=[(n-1)/2]時(shí),節(jié)點(diǎn)A[I]的右子女是節(jié)點(diǎn)A[2i+1],否則節(jié)點(diǎn)A[I]沒有右子女;同理當(dāng)i>0且I<=[n/2],節(jié)點(diǎn)i的左子女節(jié)點(diǎn)是2i,否則沒有!11.哈夫曼樹: 基本定義術(shù)語(yǔ):
節(jié)點(diǎn)的路徑長(zhǎng)度:從根節(jié)點(diǎn)到該節(jié)點(diǎn)的路徑上分支的數(shù)目;
樹的路徑長(zhǎng)度:樹中所有的節(jié)點(diǎn)的路徑長(zhǎng)度之和;
哈夫曼樹:在有n個(gè)葉子節(jié)點(diǎn),并帶有相同權(quán)值的二叉樹中,必定存在一個(gè)二叉樹,使其帶權(quán)路徑長(zhǎng)度最短,這樣的二叉樹被稱為“最優(yōu)二叉樹”或“哈夫曼樹”
如下圖:
12.排序算法:
常考的排序算法有:插入排序、冒泡排序、選擇排序、快速排序、堆排序
插入排序: 首先先建立一個(gè)空列表,然后放入一些已排序的有序數(shù)列(自定),然后然后從原列表中取出一個(gè)數(shù),并放入新列表,仍使新列表保持有序;重復(fù)這個(gè)動(dòng)作直到原列表為空;
冒泡排序:顧名思義,就像冒泡一樣(可以從小到大,也可以從大到小),大的升上去,小的降下來。首先將所有元素放入工作列表中,從列表的第一位數(shù)字到倒數(shù)第二位數(shù)字,逐個(gè)比較一個(gè)數(shù)和它的下一位,如果這個(gè)數(shù)大于它的下一位,則將它和它的下一位交換,重復(fù)該 步驟,直到不能交換
選擇排序:設(shè)數(shù)組中存儲(chǔ)了n個(gè)待排序數(shù)字,從數(shù)組中找到最小值和最大值分別放在數(shù)組的最左邊和最右端,然后選出次小值和次大值放到左數(shù)第二位和右數(shù)第二位,……,最后建立完整的順序;
快速排序:這是一種高效排序方法:
實(shí)踐證明,快速排序是所有排序算法中最高效的一種。它采用了分治的思想:先保證列表的前半部分都小于后半部分,然后分別對(duì)前半部分和后半部分排序,這樣整個(gè)列表就有序了。這是一種先進(jìn)的思想,也是它高效的原因。因?yàn)樵谂判蛩惴ㄖ校惴ǖ母咝c否與列表中數(shù)字間的比較次數(shù)有直接的關(guān)系,而“保證列表的前半部分都小于后半部分”就使得前半部分的任何一個(gè)數(shù)從此以后都不再跟后半部分的數(shù)進(jìn)行比較了,大大減少了數(shù)字間不必要的比較。但查找數(shù)據(jù)得另當(dāng)別論了。
堆排序:與前面的算法都不同,它是這樣的:
首先新建一個(gè)空列表,作用與插入排序中的“有序列表”相同。
找到數(shù)列中最大的數(shù)字,將其加在“有序列表”的末尾,并將其從原數(shù)列中刪除。
重復(fù)2號(hào)步驟,直至原數(shù)列為空。
堆排序的平均時(shí)間復(fù)雜度為nlogn,效率高(因?yàn)橛卸堰@種數(shù)據(jù)結(jié)構(gòu)以及它奇妙的特征,使得“找到數(shù)列中最大的數(shù)字”這樣的操作只需要O(1)的時(shí)間復(fù)雜度,維護(hù)需要logn的時(shí)間復(fù)雜度),但是實(shí)現(xiàn)相對(duì)復(fù)雜(可以說是這里7種算法中比較難實(shí)現(xiàn)的)。
看起來似乎堆排序與插入排序有些相像,但他們其實(shí)是本質(zhì)不同的算法。至少,他們的時(shí)間復(fù)雜度差了一個(gè)數(shù)量級(jí),一個(gè)是平方級(jí)的,一個(gè)是對(duì)數(shù)級(jí)的。
算法的時(shí)間復(fù)雜度:
平均時(shí)間復(fù)雜度
插入排序 O(n2)
冒泡排序 O(n2)
選擇排序 O(n2)
快速排序 O(n log n)
堆排序 O(n log n)
歸并排序 O(n log n)
基數(shù)排序 O(n)
希爾排序 O(n1.25)
第四篇:算法設(shè)計(jì)與分析課程論文
“卓越工程師教育培養(yǎng)計(jì)劃”(簡(jiǎn)稱卓越計(jì)劃)旨在培養(yǎng)一批創(chuàng)新能力強(qiáng)、適應(yīng)經(jīng)濟(jì)社會(huì)發(fā)展需要的高質(zhì)量工程技術(shù)人才。在南通大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院制定的軟件工程專業(yè)卓越工程師的培養(yǎng)計(jì)劃中,算法設(shè)計(jì)與分析被設(shè)置為一門核心必修課程。通過該門課程的系統(tǒng)授課,重點(diǎn)培養(yǎng)學(xué)生的計(jì)算機(jī)問題求解能力,該能力是軟件工程專業(yè)學(xué)生成長(zhǎng)為卓越工程師必備的一項(xiàng)核心競(jìng)爭(zhēng)力。一個(gè)典型的計(jì)算機(jī)問題的求解一般需要經(jīng)歷5個(gè)階段:①問題的分析和建模;②算法設(shè)計(jì)方法和相應(yīng)數(shù)據(jù)結(jié)構(gòu)的選擇;③算法的實(shí)現(xiàn);④算法的正確性證明和復(fù)雜度分析;⑤算法實(shí)現(xiàn)的優(yōu)化等。
經(jīng)過多輪的教學(xué)實(shí)踐發(fā)現(xiàn),學(xué)生之間水平參差不齊是教學(xué)過程中面臨的最大問題。隨著高校招生規(guī)模的不斷增大,不同學(xué)生之間在基礎(chǔ)知識(shí)、智力水平、興趣愛好、學(xué)習(xí)動(dòng)機(jī)和學(xué)習(xí)方法上存在較大的差異性。相同的教學(xué)內(nèi)容,對(duì)于一些基礎(chǔ)較好的學(xué)生來說理解難度不大,但對(duì)于一些基礎(chǔ)較弱的學(xué)生來說,則難以理解。因此,如何尊重學(xué)生個(gè)性差異、發(fā)展學(xué)生個(gè)性特長(zhǎng),在考慮學(xué)生整體發(fā)展的同時(shí)兼顧學(xué)生的個(gè)性特長(zhǎng)發(fā)展,從而最終提高各個(gè)層次學(xué)生的綜合素質(zhì)是算法設(shè)計(jì)與分析課程的教學(xué)改革實(shí)踐中需要重點(diǎn)關(guān)注的問題。
通過多次與學(xué)生的深入交流發(fā)現(xiàn),學(xué)生在這門課程的學(xué)習(xí)過程中面臨如下問題:
1)課程教學(xué)內(nèi)容難度高。課程需要學(xué)生掌握常見的算法設(shè)計(jì)策略,如分治法、動(dòng)態(tài)規(guī)劃法和貪婪法等,對(duì)設(shè)計(jì)出的算法能進(jìn)行正確性證明和復(fù)雜度分析。很多知識(shí)點(diǎn)抽象層次高,需要學(xué)生具備一定的數(shù)學(xué)分析能力,同時(shí),通常算法內(nèi)部邏輯比較復(fù)雜,因此需要學(xué)生具備較強(qiáng)的編程功底。筆者在講授這些知識(shí)點(diǎn)時(shí),均假設(shè)學(xué)生具備一定的數(shù)學(xué)分析能力和編程基礎(chǔ),但實(shí)際情況卻不容樂觀,很多學(xué)生在大一和大二的時(shí)候并未重視相關(guān)課程的學(xué)習(xí),很多知識(shí)點(diǎn)都已經(jīng)還給授課老師,在課堂上需要花費(fèi)一定時(shí)間幫助學(xué)生回憶這些知識(shí)點(diǎn)。同時(shí),部分學(xué)生因編程經(jīng)驗(yàn)較為匾乏,難以順利地將偽代碼轉(zhuǎn)化成可運(yùn)行的程序代碼。
2)學(xué)生問題求解能力弱。為輔助學(xué)生對(duì)知識(shí)點(diǎn)的理解,授課老師一般在實(shí)例選擇時(shí)均采用一些經(jīng)典實(shí)例,例如歸并排序、最小生成樹等。這些問題在一些預(yù)修課程(例如高級(jí)程序設(shè)計(jì)語(yǔ)言或數(shù)據(jù)結(jié)構(gòu))中均進(jìn)行過講解,因此理解起來難度不大。但是,學(xué)生在上機(jī)實(shí)踐時(shí),面對(duì)老師布置的新問題,卻很難將學(xué)到的知識(shí)進(jìn)行靈活運(yùn)用,難以選擇合理的算法設(shè)計(jì)策略,并借助熟悉的高級(jí)編程語(yǔ)言去解決。
3)學(xué)生自主學(xué)習(xí)意識(shí)薄弱。該門課程本身課時(shí)較少(僅有犯學(xué)時(shí)),其中8學(xué)時(shí)為上機(jī)實(shí)踐,在剩余的24學(xué)時(shí)內(nèi),僅能講授基本的算法設(shè)計(jì)與分析策略。學(xué)生即使了解常見的算法設(shè)計(jì)與分析方法,但現(xiàn)實(shí)生活中問題千變?nèi)f化,更需要學(xué)生靈活使用學(xué)到的知識(shí)。因此,要提高學(xué)習(xí)效果和實(shí)踐能力,需要學(xué)生在課外花費(fèi)更多時(shí)間,閱讀相關(guān)資料和進(jìn)行大量編碼。但是,授課過程中發(fā)現(xiàn),真正能夠完成自主學(xué)習(xí)的學(xué)生并不多。一方面,很多學(xué)生長(zhǎng)期受應(yīng)試教育的影響,習(xí)慣于填鴨式的教學(xué)模式,同時(shí),學(xué)習(xí)時(shí)具有較強(qiáng)的功利性,很多學(xué)生普遍有應(yīng)付考試和及格萬(wàn)歲的思想,有的學(xué)生甚至為了應(yīng)付老師的作業(yè)檢查,大量抄襲作業(yè),僅做一些表面上的修改來敷衍了事。另一方面,即使有少量同學(xué)對(duì)新知識(shí)比較好奇,愿意自己去積極探索,但在選擇相關(guān)經(jīng)典資料時(shí)經(jīng)驗(yàn)不足、效率較低,因此,需要有經(jīng)驗(yàn)的老師進(jìn)行有效引導(dǎo)。
目前高校很多教室都配有多媒體設(shè)備,造成大部分專業(yè)課程均采用多媒體課件方式進(jìn)行授課。多媒體課件雖然具有豐富的表現(xiàn)力、良好的交互性和較高的共享性,但與其他核心專業(yè)課程相比,算法設(shè)計(jì)與分析課程的理論程度更高,數(shù)學(xué)推導(dǎo)較多,因此筆者認(rèn)為,采用板書為主的教學(xué)方式可能會(huì)效果更好。為驗(yàn)證該推測(cè),對(duì)Leiserson教授和Demaine教授開設(shè)的麻省理工學(xué)院公開課的在線視頻進(jìn)行分析,發(fā)現(xiàn)他們?cè)谑谡n時(shí),絕大部分教學(xué)內(nèi)容均采用板書方式進(jìn)行講解,通過在黑板上一步一步地推導(dǎo),在一些關(guān)鍵節(jié)點(diǎn)上與學(xué)生充分交互,使得學(xué)生可以更好地掌握算法設(shè)計(jì)與分析過程中的一些重要技巧。筆者在實(shí)際教學(xué)中通過精心設(shè)計(jì)板書,取得了較好的課堂效果。
綜上所述,在學(xué)生水平參差不齊的情況下,針對(duì)算法課程教學(xué)中存在的問題,提出了一系列教學(xué)改革措施以提高不同層次學(xué)生的計(jì)算機(jī)問題求解能力。其中將教學(xué)問題與教學(xué)改革措施的對(duì)應(yīng)關(guān)系,以及教學(xué)改革措施與不同層次學(xué)生的對(duì)應(yīng)關(guān)系進(jìn)行總結(jié)。而且具備良好的交叉學(xué)科基礎(chǔ)和文化底蘊(yùn),能培養(yǎng)出滿足市場(chǎng)需要的復(fù)合型人才。
如何使相關(guān)專業(yè)的教育教學(xué)滿足將來ICT產(chǎn)業(yè)的發(fā)展是個(gè)相當(dāng)復(fù)雜的問題,希望筆者提出的一些改進(jìn)措施能對(duì)信息科學(xué)相關(guān)專業(yè)的工程教育具有參考意義,并對(duì)其他領(lǐng)域也有借鑒之處。
第五篇:“算法設(shè)計(jì)與分析”課程教學(xué)方法探究(精選)
“算法設(shè)計(jì)與分析”課程教學(xué)方法探究
摘要:該文分析了算法設(shè)計(jì)與分析課程教學(xué)和學(xué)生學(xué)習(xí)時(shí)存在的問題,根據(jù)近幾年積累的教學(xué)經(jīng)驗(yàn),提出了一些教學(xué)方法的建議,如互動(dòng)式教學(xué),板書和多媒體相結(jié)合,重視上機(jī)練習(xí)以及考核方式的改革。
關(guān)鍵詞:計(jì)算機(jī);算法設(shè)計(jì)與分析;教學(xué)方法
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)08-0102-02
21世紀(jì)以來,計(jì)算機(jī)的普及極大地改變了人們的生活。目前,各行業(yè)、各領(lǐng)域都廣泛采用了計(jì)算機(jī)信息技術(shù),并由此產(chǎn)生出設(shè)計(jì)并開發(fā)各種應(yīng)用軟件的需求。為了以最小的成本、最快的速度、最好的質(zhì)量開發(fā)出應(yīng)用軟件,就必須掌握并能設(shè)計(jì)出高效的算法。算法分析與設(shè)計(jì)是一門理論性與實(shí)踐性兼顧的課程,是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的一門很重要的專業(yè)課,該課程在整個(gè)教學(xué)體系中占有非常重要的地位。通過對(duì)計(jì)算機(jī)算法系統(tǒng)的學(xué)習(xí)與研究,理解和掌握算法設(shè)計(jì)的主要方法,培養(yǎng)對(duì)算法的計(jì)算復(fù)雜性進(jìn)行正確分析的能力,為獨(dú)立地設(shè)計(jì)算法和對(duì)給定算法進(jìn)行復(fù)雜性分析奠定堅(jiān)實(shí)的理論基礎(chǔ)[1]。
該課程不像其他記憶性的課程,它重在理解并能應(yīng)用到實(shí)際中,是一門集應(yīng)用性、實(shí)踐性及創(chuàng)新性為一體的綜合性課程。再加上這門課程相對(duì)枯燥、難度大,因此,對(duì)于很多教師來說,要想上好這門課程,成了一個(gè)很大的挑戰(zhàn)。該課程要求教師要有扎實(shí)的數(shù)學(xué)和數(shù)據(jù)結(jié)構(gòu)理論基礎(chǔ),還要有編程和科研經(jīng)歷,還要結(jié)合本課程的特點(diǎn),采用適當(dāng)?shù)慕虒W(xué)方法,才能使得學(xué)生把枯燥,難學(xué)的算法真正學(xué)會(huì),并應(yīng)用到以后的開發(fā)實(shí)踐中。
本文根據(jù)筆者的教學(xué)經(jīng)驗(yàn),總結(jié)了一些教學(xué)方法,包括互動(dòng)式教學(xué),板書和多媒體相結(jié)合以及考核方式的改革等。算法課程教學(xué)及學(xué)生學(xué)習(xí)存在的問題
現(xiàn)在,算法設(shè)計(jì)與分析課程在教學(xué)和學(xué)生學(xué)習(xí)方面都存在著問題,經(jīng)過分析總結(jié)如下:
1)該課程難度較大:算法設(shè)計(jì)與分析課程中介紹的都是數(shù)學(xué)或計(jì)算機(jī)專業(yè)領(lǐng)域的經(jīng)典算法,例如動(dòng)態(tài)規(guī)劃和分支限界法。單純的算法思想比較抽象,課程本身難度較大,容易使學(xué)生對(duì)該門課程產(chǎn)生恐懼心理。
2)學(xué)生不感興趣:現(xiàn)在大多數(shù)學(xué)生功利性比較強(qiáng),學(xué)習(xí)一門課程時(shí),希望它馬上就能應(yīng)用到實(shí)際中。比如學(xué)習(xí)了靜態(tài)網(wǎng)頁(yè)設(shè)計(jì)就可以做網(wǎng)站,學(xué)習(xí)了asp、jsp等動(dòng)態(tài)網(wǎng)頁(yè)設(shè)計(jì)就可以開發(fā)系統(tǒng)。學(xué)會(huì)了開發(fā)網(wǎng)站和系統(tǒng),就可以找到工作。所以學(xué)生對(duì)這些課程很感興趣。剛才提到的課程都是立竿見影,學(xué)完后都知道最終的目的,而算法設(shè)計(jì)與分析課程則不同。算法設(shè)計(jì)與分析課程屬于高層次的課程,各種編程語(yǔ)言是它的先修課程。沒有編程基礎(chǔ),沒有開發(fā)經(jīng)驗(yàn),談?wù)撍惴ň拖喈?dāng)于紙上談兵。因此,學(xué)生學(xué)習(xí)算法設(shè)計(jì)與分析課程時(shí),他們感覺不能立即用上,甚至覺得與以后找工作沒有太大關(guān)系。這種心理導(dǎo)致學(xué)生對(duì)該課程不感興趣,緊緊抱著混學(xué)分的思想去學(xué)習(xí),給教師授課帶來了很大的困難。
3)考核方式不太合理:目前,在大多數(shù)高校中針對(duì)算法設(shè)計(jì)與分析課程采用的考核方式和其他課程一樣,總成績(jī)=試卷成績(jī)*70%+平時(shí)成績(jī)*30%。這里的平時(shí)成績(jī)包括作業(yè),考勤和課堂表現(xiàn)。這種考核方式只能反映出學(xué)生對(duì)理論知識(shí)的掌握程度,但無法考核出學(xué)生對(duì)知識(shí)的真正應(yīng)用能力。采用這種傳統(tǒng)的考核方式檢驗(yàn)學(xué)生是否能把算法思想應(yīng)用到編程中,無法學(xué)以致用。
2教學(xué)方法探討
近年來,本人一直教授該門課程,現(xiàn)將自己教學(xué)過程中摸索的教學(xué)經(jīng)驗(yàn)以及教學(xué)改革建議進(jìn)行總結(jié),希望能對(duì)廣大教師有所幫助。
2.1互動(dòng)式教學(xué)
講授算法課程過程中,由于該門課程具有很強(qiáng)的邏輯性和抽象性,并且要求有較好的數(shù)學(xué)基礎(chǔ),很容易形成教師向?qū)W生的單向傳輸教學(xué)。這種情況下,課堂教學(xué)枯燥無味,學(xué)生沒有興趣去思考和回答教師的問題,以至于形成課堂氣氛死氣沉沉,教師自問自答的局面。
在講課過程中,教師應(yīng)時(shí)刻注意和學(xué)生的互動(dòng)。互動(dòng)式教學(xué)可以變傳統(tǒng)教學(xué)中的單向傳輸式教學(xué)為雙向互動(dòng)式,這樣可以提高學(xué)生學(xué)習(xí)該門課程的興趣。興趣是最好的老師,只有學(xué)生產(chǎn)生了興趣,才能更好的掌握算法知識(shí)并應(yīng)用到實(shí)際中。
教師實(shí)現(xiàn)互動(dòng)式教學(xué)的方法有很多種,比如可以通過提問的方式。這就要求教師在備課時(shí)下功夫,而不是簡(jiǎn)單的備課本上的知識(shí)點(diǎn),而是吃透每一個(gè)知識(shí)點(diǎn),然后在相應(yīng)的知識(shí)點(diǎn)上為學(xué)生設(shè)置相應(yīng)的思考方向,提出問題,充分調(diào)動(dòng)學(xué)生的積極性,讓學(xué)生參與到課堂中來。同時(shí),學(xué)生也會(huì)在枯燥的理論知識(shí)中尋找到樂趣。
2.2傳統(tǒng)的板書教學(xué)和多媒體教學(xué)相結(jié)合,齊頭并進(jìn)
目前大多數(shù)高校計(jì)算機(jī)類的課程基本都使用多媒體進(jìn)行教學(xué)。傳統(tǒng)的黑板教學(xué)和多媒體教學(xué)各有利弊,我們應(yīng)根據(jù)教學(xué)內(nèi)容的需要,揚(yáng)長(zhǎng)避短,選擇適當(dāng)?shù)慕虒W(xué)手段,而不是因多媒體的方便性,將單純的將黑板教學(xué)摒棄。在講解算法課程過程中,更是需要兩者的結(jié)合,才能收到良好的課堂教學(xué)效果。
采用多媒體教學(xué)的好處是可以加大課堂信息量,使得講課更加形象生動(dòng)。在講解算法課程第2章中的插入排序,選擇排序,歸并排序時(shí),就可以采用多媒體教學(xué)中視頻教學(xué)。三種排序算法很抽象,單純的靠講述加上板書教學(xué),學(xué)生很難掌握三種排序的算法思想,并且容易混淆。本人在講解該部分內(nèi)容時(shí),從網(wǎng)上找到了真人以民族舞蹈形式來表現(xiàn)各種計(jì)算機(jī)排序算法的工作原理的視頻。首先口頭介紹某種排序的算法思想,然后在學(xué)生對(duì)此排序有初步了解的基礎(chǔ)上,讓其觀看相應(yīng)的視頻,使得學(xué)生在輕松快樂的氛圍中掌握了排序算法,收到了很好的教學(xué)效果。
有些情況下,掌握某些經(jīng)典算法的核心思想需要教師采用傳統(tǒng)的黑板教學(xué),一步一步帶著學(xué)生去推導(dǎo),最終得到答案。如果此時(shí)采用ppt課件進(jìn)行教學(xué),就會(huì)加快講課的進(jìn)度,向下翻一頁(yè)可能答案就會(huì)直接出來,沒有給學(xué)生充分多的思考時(shí)間,沒有在學(xué)生腦中留下深刻的印象。比如講解棋盤覆蓋問題時(shí)(如圖1,圖2),如果采用板書教學(xué),一步一步去演示覆蓋的過程,學(xué)生的思路經(jīng)歷了從有到無的過程,在循序漸進(jìn)中掌握了知識(shí)。整個(gè)推導(dǎo)過程學(xué)生如同細(xì)細(xì)咀嚼了一個(gè)蘋果,不僅嘗到了味道,也吸收了營(yíng)養(yǎng)。
2.3 重視上機(jī)練習(xí)
教室課堂上,教師向?qū)W生講授的是算法的基本思想。算法僅僅靠掌握理論知識(shí)是不夠的,必須把它應(yīng)用到編程中,才能真正去領(lǐng)會(huì)算法的思想和靈魂。脫離計(jì)算機(jī)和編程去談?wù)撍惴ň腿缤埳险劚遣磺袑?shí)際的。
在教學(xué)過程中,教師至少應(yīng)把1/3的課程分給上機(jī)實(shí)驗(yàn)課,只有給學(xué)生充足的上機(jī)時(shí)間,才可以將算法的思想應(yīng)到實(shí)際中。當(dāng)然,作為教師必須努力找一些難度合適的題目,讓學(xué)生在實(shí)驗(yàn)課上完成,將教室課堂上學(xué)的理論知識(shí)有所應(yīng)用。通過上機(jī)實(shí)際操練,促進(jìn)學(xué)生真正掌握算法的精髓。
2.4考核方式改革
本文前面已經(jīng)分析過現(xiàn)在算法課程大多數(shù)學(xué)校采用的是以紙質(zhì)試卷為主的考核方式算作期末成績(jī),其實(shí)這種考核方式和課程的性質(zhì)是互相矛盾的。算法課程是理論和實(shí)踐都很重要的一門課程,傳統(tǒng)的考核方式只能考查學(xué)生對(duì)理論知識(shí)的掌握程度。
本人對(duì)算法課程采用如下考核方式:
除常規(guī)期末試卷成績(jī)外,實(shí)驗(yàn)成績(jī)占的比例為40%,加大了實(shí)驗(yàn)成績(jī)所占的比例。這樣可以增強(qiáng)學(xué)生對(duì)實(shí)驗(yàn)上機(jī)課的重視程度,上機(jī)實(shí)驗(yàn)時(shí),學(xué)生會(huì)比較認(rèn)真,有助于他們能將算法的思想應(yīng)用編程中,培養(yǎng)學(xué)生的動(dòng)手和實(shí)踐能力。
3總結(jié)
筆者結(jié)合近幾年的課堂教學(xué)情況,分析了算法課程教學(xué)存在的問題,并針對(duì)這些問題提出了一些教學(xué)方法。當(dāng)然這些方法還需要進(jìn)一步的完善,進(jìn)而使算法課程的教學(xué)質(zhì)量能得到很大的提高。
參考文獻(xiàn):
[1] 李涵.“算法分析與設(shè)計(jì)”課程改革和實(shí)踐[J].中國(guó)電力教育,2010(16):74-75.[2] 王曉東.計(jì)算機(jī)算法設(shè)計(jì)與分析[M].北京:電子工業(yè)出版社,2008.[3] 劉波“.算法設(shè)計(jì)與分析”教學(xué)探討[J].高等理科教育,2007(4):78-80.[4] 余祥宣,崔國(guó)華,鄒海明.計(jì)算機(jī)算法基礎(chǔ)[M].武漢:華中科技大學(xué)出版社,2006.[5]馬健.啟發(fā)式教學(xué)法在課堂教學(xué)中的應(yīng)用[J].中國(guó)電子教育,2008(3):68-71.