陳仕軍,陶茂虎,王 前
(湖北文理學(xué)院 數(shù)學(xué)與統(tǒng)計(jì)學(xué)院,湖北 襄陽(yáng) 441053)
“數(shù)據(jù)結(jié)構(gòu)與算法”是信息與計(jì)算科學(xué)專(zhuān)業(yè)的重要基礎(chǔ)課,具有理論抽象、實(shí)踐性強(qiáng)、內(nèi)容多的特點(diǎn),課程的教與學(xué)難度大。對(duì)于如何提高該課程的教學(xué)質(zhì)量和提升學(xué)生的學(xué)習(xí)效果,已有一些教學(xué)改革的研究和探索。趙蕓和徐興[1]提出基于翻轉(zhuǎn)課堂和成果教學(xué)的新模式,提高學(xué)生的學(xué)習(xí)主動(dòng)性。萬(wàn)曉輝[2]提出了基于雨課堂的混合式教學(xué)方式,提升教學(xué)效果。王青松等[3]提出以真實(shí)問(wèn)題為導(dǎo)向的教學(xué)模式。王曙燕等[4]提出基于“賦能教育”的混合教學(xué)模式設(shè)計(jì)方法,采用線(xiàn)上與線(xiàn)下相結(jié)合的教學(xué)過(guò)程。熊回香和葉佳鑫[5]將信息管理類(lèi)專(zhuān)業(yè)知識(shí)與課程教學(xué)相結(jié)合,對(duì)課程教學(xué)體系做了改革實(shí)踐。李禾和柳成行[6]以“少教多學(xué)”為理念,強(qiáng)調(diào)學(xué)生在學(xué)習(xí)中的主體性作用,進(jìn)行了全面的教學(xué)改革。劉俊杰和胡忠望[7]也提出了線(xiàn)上線(xiàn)下相結(jié)合的教學(xué)模式,來(lái)改善教學(xué)效果。任永強(qiáng)等[8]介紹了基于超星學(xué)習(xí)通移動(dòng)教學(xué)的課程教學(xué)體系構(gòu)建。陳黎黎和國(guó)紅軍[9]提出了基于OBE理念的教學(xué)改革實(shí)踐,取得了較好效果。牛犇等[10]挖掘思政教育資源,融入到課程教學(xué),實(shí)現(xiàn)課程的價(jià)值引領(lǐng)。廖國(guó)富[11]從“教”與“學(xué)”兩個(gè)角度分析了當(dāng)前數(shù)據(jù)結(jié)構(gòu)教學(xué)中的問(wèn)題,還提出了問(wèn)題導(dǎo)入法、演示法等一些有效教學(xué)方法。舒清錄和廖明梅[12]強(qiáng)調(diào)了以培養(yǎng)“計(jì)算思維”為核心的課程教學(xué)改革。這些教學(xué)研究從不同層面進(jìn)行了探索研究,相關(guān)經(jīng)驗(yàn)和成果值得借鑒,但由于針對(duì)的學(xué)生群體不同,學(xué)生群體的基礎(chǔ)和目標(biāo)不盡相同,而且不同學(xué)校采用的程序設(shè)計(jì)語(yǔ)言也有差別,因此難以有通用的最有效方法。目前,采用最多的程序設(shè)計(jì)基礎(chǔ)語(yǔ)言有C、C++、Java?;趐ython語(yǔ)言版“數(shù)據(jù)結(jié)構(gòu)與算法”的課程教學(xué)改革與研究,相對(duì)比較少。
近年來(lái),省屬地方高校辦學(xué)思路逐漸轉(zhuǎn)變?yōu)榕囵B(yǎng)應(yīng)用型人才,隨之而來(lái)的課程改革也傾向于開(kāi)設(shè)更多與就業(yè)市場(chǎng)關(guān)系更緊密的應(yīng)用性課程。然而,課時(shí)總數(shù)限制使得“數(shù)據(jù)結(jié)構(gòu)與算法”等理論基礎(chǔ)課的教學(xué)課時(shí)不斷被壓縮[11],教師對(duì)于教學(xué)成效的壓力越來(lái)越大。以筆者所在學(xué)校信息與計(jì)算科學(xué)專(zhuān)業(yè)為例,以前的“數(shù)據(jù)結(jié)構(gòu)與算法”課程分為2門(mén)課開(kāi)設(shè),其中“數(shù)據(jù)結(jié)構(gòu)”為72學(xué)時(shí),“算法設(shè)計(jì)與分析”為54課時(shí),總共126課時(shí)。專(zhuān)業(yè)課程改革后,2門(mén)課合并為“數(shù)據(jù)結(jié)構(gòu)與算法”,縮短到90個(gè)課時(shí)。2019年人才培養(yǎng)方案新修訂后,進(jìn)一步壓縮課時(shí),調(diào)整為80個(gè)課時(shí)。同時(shí),隨著本專(zhuān)業(yè)辦學(xué)越來(lái)越側(cè)重于數(shù)據(jù)分析、人工智能等方向,信息與計(jì)算科學(xué)專(zhuān)業(yè)將python作為本專(zhuān)業(yè)的基礎(chǔ)程序語(yǔ)言,“數(shù)據(jù)結(jié)構(gòu)與算法”也轉(zhuǎn)變?yōu)椴捎胮ython版的教材。很多學(xué)生對(duì)python語(yǔ)言編程掌握不熟練的條件下,就進(jìn)入“數(shù)據(jù)結(jié)構(gòu)與算法”的課程學(xué)習(xí),如何使絕大多數(shù)學(xué)生理解并掌握好這門(mén)課,教師面臨很大的教學(xué)壓力。為了在總學(xué)時(shí)有限的條件下,引導(dǎo)學(xué)生熟練掌握“數(shù)據(jù)結(jié)構(gòu)與算法”課程的核心內(nèi)容,筆者經(jīng)過(guò)近四年的教學(xué)實(shí)踐,探索出一些可行而有效的教學(xué)方法。主要有以下幾個(gè)方面:第一,將“數(shù)據(jù)存儲(chǔ)、操作以及時(shí)間復(fù)雜度”的核心思想和內(nèi)容放在中心位置,并將其貫穿于各章節(jié)的教學(xué)始終;第二,采取“從易到難”的漸進(jìn)式教學(xué)方式,基于重要性和學(xué)生的易接受度來(lái)選取適合的教學(xué)內(nèi)容和材料;第三,教學(xué)過(guò)程中,采用“圖形化教學(xué)、黑板繪圖展示”的教學(xué)方式,要求學(xué)生“動(dòng)手畫(huà)圖”進(jìn)行學(xué)習(xí),深化對(duì)存儲(chǔ)和操作的理解;第四,增加實(shí)踐性教學(xué)課時(shí),采用“易于理解和實(shí)現(xiàn)的示例”作為實(shí)驗(yàn)內(nèi)容,讓學(xué)生能真正熟練掌握后,再逐步推廣到更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu)與算法示例。
首先,重點(diǎn)補(bǔ)充python程序設(shè)計(jì)的基礎(chǔ)知識(shí)。引導(dǎo)學(xué)生扎實(shí)掌握python內(nèi)置的常用數(shù)據(jù)結(jié)構(gòu),如列表list、字符串str、元組tuple的應(yīng)用。同時(shí),強(qiáng)化學(xué)生熟練應(yīng)用python內(nèi)置class編程的能力。class適合于描述抽象的數(shù)據(jù)結(jié)構(gòu),其中屬性對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)及其存儲(chǔ)定義,方法對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的增加、刪除、查找數(shù)據(jù)等操作。
學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)與算法”的目標(biāo)是更高效地存儲(chǔ)和組織數(shù)據(jù),特別是處理數(shù)據(jù)的增、刪、查、排序等各種操作功能,從而能高效的解決實(shí)際問(wèn)題。如圖1所示,數(shù)據(jù)及數(shù)據(jù)關(guān)系的存儲(chǔ)方式(兩種存儲(chǔ)方式)、數(shù)據(jù)操作的算法時(shí)間復(fù)雜度,是該課程的核心思想和內(nèi)容,將其貫穿于教學(xué)始終。
圖1 貫穿課程的核心思想和內(nèi)容
為了讓學(xué)生深刻掌握該思想和內(nèi)容,教學(xué)中需要強(qiáng)化如下兩點(diǎn)。
1)強(qiáng)化對(duì)python內(nèi)置list數(shù)據(jù)結(jié)構(gòu)的理解,是延伸到其他順序存儲(chǔ)數(shù)據(jù)類(lèi)型的基礎(chǔ)。python內(nèi)置多種抽象的數(shù)據(jù)類(lèi)型,尤其是屬于一種順序線(xiàn)性表的list,為構(gòu)造其他復(fù)雜數(shù)據(jù)類(lèi)型提供了便利。因此,讓學(xué)生掌握對(duì)list的各種操作函數(shù)是后續(xù)數(shù)據(jù)結(jié)構(gòu)中應(yīng)用順序數(shù)據(jù)存儲(chǔ)的基礎(chǔ)。同時(shí),為了讓學(xué)生理解算法時(shí)間復(fù)雜度的概念,以list的各種操作為例說(shuō)明算法復(fù)雜度的計(jì)算方法,進(jìn)而掌握f(shuō)or、while等循環(huán)程序結(jié)構(gòu)(包括嵌套結(jié)構(gòu))的算法復(fù)雜度。
2)強(qiáng)化對(duì)節(jié)點(diǎn)和鏈表概念的理解,它們是后續(xù)延伸到其他鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)的基礎(chǔ)。除了順序存放數(shù)據(jù)采用list實(shí)現(xiàn)外,鏈?zhǔn)酱鎯?chǔ)是另一種關(guān)鍵的數(shù)據(jù)存儲(chǔ)方式。鏈?zhǔn)酱鎯?chǔ)中,單個(gè)數(shù)據(jù)均存儲(chǔ)于節(jié)點(diǎn)中,各數(shù)據(jù)之間的前后或父子等關(guān)系,通過(guò)節(jié)點(diǎn)中的“鏈接”屬性來(lái)表達(dá)。因此,以單鏈表為例,引導(dǎo)學(xué)生掌握節(jié)點(diǎn)和鏈?zhǔn)酱鎯?chǔ)的概念,然后拓展到雙鏈表、循環(huán)鏈表。對(duì)于單鏈表的數(shù)據(jù)結(jié)構(gòu),特別強(qiáng)調(diào)頭節(jié)點(diǎn)的設(shè)置與作用。要求學(xué)生在學(xué)習(xí)和實(shí)踐中,多思考從各種操作的算法時(shí)間復(fù)雜度,不斷理解和掌握順序線(xiàn)性表和鏈表的本質(zhì)、優(yōu)缺點(diǎn)和適用場(chǎng)景。
從以往的教學(xué)實(shí)踐經(jīng)驗(yàn)中發(fā)現(xiàn),學(xué)生不必學(xué)習(xí)太多內(nèi)容,但務(wù)必要能扎實(shí)掌握,以便增強(qiáng)自信心,提高學(xué)習(xí)興趣。學(xué)生如果能真正掌握幾種相對(duì)簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)與算法,則不難推廣和學(xué)習(xí)更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)與算法。同時(shí),教學(xué)選材要兼顧知識(shí)點(diǎn)的漸進(jìn)深入和上機(jī)實(shí)踐的難度。筆者通過(guò)近四年的教學(xué)與實(shí)踐,考慮從易到難,探索出按照如下的教學(xué)內(nèi)容模塊順序進(jìn)行,基本能達(dá)到較好的教學(xué)效果。
在圖2中,單向?qū)嵭募^表示講授知識(shí)模塊的順序,而帶虛線(xiàn)的反向箭頭表示與前面所學(xué)知識(shí)點(diǎn)相關(guān)聯(lián),這樣使學(xué)生逐漸形成更加系統(tǒng)化的數(shù)據(jù)結(jié)構(gòu)知識(shí)體系。例如,對(duì)二叉樹(shù)進(jìn)行深度搜索和廣度搜索時(shí),適合于應(yīng)用前面的棧和隊(duì)列解決問(wèn)題,從而進(jìn)一步深化對(duì)棧和隊(duì)列的理解與應(yīng)用。在講授平衡二叉搜索樹(shù)時(shí),加深對(duì)前面搜索和排序算法的理解,通過(guò)算法分析與比較,能進(jìn)一步加深對(duì)算法復(fù)雜度的認(rèn)識(shí)。同時(shí)也體會(huì)到平衡二叉樹(shù)與前面的list和鏈表的本質(zhì)差別。
圖2 漸進(jìn)式教學(xué)內(nèi)容分步圖
1)棧和隊(duì)列的概念與實(shí)踐。棧和隊(duì)列的概念相對(duì)比較簡(jiǎn)單,但仍有部分學(xué)生在學(xué)習(xí)棧和隊(duì)列時(shí),不能理解棧和隊(duì)列的增加、刪除數(shù)據(jù)等操作過(guò)程。為此,需要強(qiáng)調(diào)棧屬于“后進(jìn)先出”的功能性數(shù)據(jù)結(jié)構(gòu),并采用一些簡(jiǎn)單的示例說(shuō)明其適用場(chǎng)景。例如,將十進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制數(shù),采用除以2取余數(shù)法,將所得余數(shù)進(jìn)行倒置,則得到二進(jìn)制數(shù)。利用棧的“后進(jìn)先出”原理,這一過(guò)程容易理解和實(shí)現(xiàn),也體現(xiàn)了棧的特點(diǎn);再以約瑟夫環(huán)問(wèn)題為例,說(shuō)明利用隊(duì)列的“先進(jìn)先出”性質(zhì)解決此類(lèi)問(wèn)題的便捷性。后期在學(xué)習(xí)二叉樹(shù)和圖的節(jié)點(diǎn)遍歷搜索時(shí),強(qiáng)化學(xué)生對(duì)于棧和隊(duì)列應(yīng)用場(chǎng)景的理解。
2)遞歸與二叉樹(shù)。二叉樹(shù)屬于非線(xiàn)性結(jié)構(gòu),其數(shù)據(jù)關(guān)系和相關(guān)操作比線(xiàn)性結(jié)構(gòu)更復(fù)雜,所需的基礎(chǔ)知識(shí)和擴(kuò)展內(nèi)容也更多,包括遞歸、深度遍歷、廣度遍歷、棧和隊(duì)列的應(yīng)用、各種特定的二叉樹(shù)結(jié)構(gòu)及應(yīng)用等。同時(shí),這些知識(shí)內(nèi)容的編程實(shí)現(xiàn)過(guò)程也要復(fù)雜很多。考慮到課時(shí)限制和大部分學(xué)生的知識(shí)接受能力有限,講授時(shí)必須有所取舍。因此,在前期學(xué)習(xí)時(shí),重點(diǎn)引導(dǎo)學(xué)習(xí)遞歸、二叉樹(shù)的遍歷、完全二叉樹(shù)、堆的概念及操作,后期學(xué)有余力時(shí)再延伸到平衡二叉樹(shù)。
首先,以簡(jiǎn)易小問(wèn)題為例,例如階乘、單鏈表求長(zhǎng)度、漢諾塔盤(pán)片移動(dòng)問(wèn)題等,引導(dǎo)學(xué)生掌握遞歸的基本思想和程序?qū)崿F(xiàn)方法。然后在此基礎(chǔ)上,講解二叉樹(shù)的數(shù)據(jù)結(jié)構(gòu)和常用深度遍歷方法,強(qiáng)化遞歸應(yīng)用的思維訓(xùn)練。對(duì)于完全二叉樹(shù),通過(guò)分析節(jié)點(diǎn)數(shù)和層數(shù)的關(guān)系,說(shuō)明其線(xiàn)性存儲(chǔ)的優(yōu)點(diǎn)。再由完全二叉樹(shù)推廣到堆的概念,引導(dǎo)學(xué)生掌握堆實(shí)現(xiàn)優(yōu)先隊(duì)列、操作與實(shí)現(xiàn)方法,加深對(duì)二叉樹(shù)應(yīng)用的理解。對(duì)于平衡二叉樹(shù),不僅操作更加復(fù)雜,而且會(huì)用到搜索和排序的知識(shí),因此先只講授基本概念,后期學(xué)有余力時(shí)再加深理解。
3)簡(jiǎn)單搜索和排序算法。搜索(或查找、遍歷)是解決很多問(wèn)題的基礎(chǔ)操作。對(duì)于線(xiàn)性的數(shù)據(jù)結(jié)構(gòu)進(jìn)行順序搜索,直觀易理解,學(xué)生都能輕松掌握。對(duì)于有序線(xiàn)性結(jié)構(gòu)的二分搜索,采用以方程求根的二分搜索算法舉例,說(shuō)明其相似性。同時(shí),要讓學(xué)生理解查找和搜索的區(qū)別與聯(lián)系,并了解其方法具有多樣性。
排序算法比較多,由于學(xué)時(shí)有限,有必要做精簡(jiǎn),要求學(xué)生學(xué)會(huì)2種排序算法:冒泡排序與快速排序。冒泡排序的原理簡(jiǎn)單直觀,是學(xué)習(xí)排序算法的基礎(chǔ),也是和其他排序進(jìn)行復(fù)雜度對(duì)比時(shí)常用的算法。由于前期的“python語(yǔ)言程序設(shè)計(jì)”課程中會(huì)介紹冒泡排序,因此難度相對(duì)較低,只要再簡(jiǎn)單復(fù)習(xí),學(xué)生能夠熟練掌握。再?gòu)乃惴◤?fù)雜度角度分析,說(shuō)明冒泡排序是一種效率不高的排序算法(O(n*n))。而快速排序具有高效率的特點(diǎn),時(shí)間復(fù)雜度低(O(n*logn)),但其算法實(shí)現(xiàn)過(guò)程稍顯復(fù)雜。講解時(shí)多分配學(xué)時(shí),讓學(xué)生真正理解,并能編程實(shí)現(xiàn)。在此基礎(chǔ)上,其他排序算法(插入排序、希爾排序、歸并排序),均可以通過(guò)自學(xué)理解。
4)以二叉樹(shù)為例,掌握深度遍歷和廣度(或?qū)挾?遍歷的思想與方法,加深對(duì)遞歸、棧以及隊(duì)列的理解與應(yīng)用。引導(dǎo)學(xué)生從線(xiàn)性結(jié)構(gòu)的遍歷,延伸到非線(xiàn)性結(jié)構(gòu)的遍歷。二叉樹(shù)和圖作為兩種典型的非線(xiàn)性結(jié)構(gòu),遍歷其節(jié)點(diǎn)時(shí),采用深度遍歷或者廣度遍歷算法。利用畫(huà)圖方式,逐步展示兩種算法的區(qū)別。在程序?qū)崿F(xiàn)時(shí),考慮兩種編程方法,即遞歸和非遞歸。采用遞歸方式,更加直觀,但需要對(duì)遞歸有較深的認(rèn)識(shí)。采用非遞歸方式,則需要對(duì)棧和隊(duì)列有熟練理解。對(duì)二叉樹(shù)的深度遍歷和廣度遍歷的練習(xí),能讓學(xué)生加深對(duì)遞歸、棧和隊(duì)列等內(nèi)容的理解。
5)學(xué)會(huì)圖的基本存儲(chǔ)與操作、圖節(jié)點(diǎn)的遍歷與搜索、最小生成樹(shù)和最短路問(wèn)題。圖數(shù)據(jù)結(jié)構(gòu)是相對(duì)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),但又是解決很多與網(wǎng)絡(luò)相關(guān)復(fù)雜問(wèn)題的基礎(chǔ)。首先,要掌握?qǐng)D的存儲(chǔ)和操作,然后從二叉樹(shù)的遍歷方法推廣到圖的遍歷方法,使得學(xué)生理解圖的深度搜索和廣度搜索算法的思想和方法,這是對(duì)圖操作的基礎(chǔ)。圖的應(yīng)用內(nèi)容非常多,根據(jù)實(shí)際情況,讓學(xué)生掌握最小生成樹(shù)和最短路問(wèn)題的算法及其代碼實(shí)現(xiàn)。
6)平衡二叉樹(shù)和哈希表。這部分?jǐn)?shù)據(jù)結(jié)構(gòu)相對(duì)更加抽象、操作更復(fù)雜,不管理論還是實(shí)踐都是難度最大的部分。因此,在學(xué)生前期基礎(chǔ)掌握比較扎實(shí)的情況下,再進(jìn)行講解,學(xué)生更容易接受。在學(xué)習(xí)平衡二叉樹(shù)(重點(diǎn)是二叉查找樹(shù))時(shí),對(duì)比前面已學(xué)的查找算法,從時(shí)間復(fù)雜度體會(huì)二叉查找樹(shù)的高效率。學(xué)習(xí)哈希表時(shí),進(jìn)一步體會(huì)其查找效率的優(yōu)勢(shì),并掌握其適用場(chǎng)景。其他內(nèi)容,如哈夫曼樹(shù)、字符串匹配算法等,根據(jù)學(xué)生掌握情況和課時(shí)剩余情況,進(jìn)行引導(dǎo)學(xué)習(xí)即可。
傳統(tǒng)采用PPT教學(xué)的方法,課程內(nèi)容進(jìn)度較快,不能詳細(xì)演示,學(xué)生對(duì)內(nèi)容掌握不牢固。教師采用黑板上“邊講解、邊繪圖”的教學(xué)方法,會(huì)具有更好的效果。“好記性趕不上爛筆頭”,要求學(xué)生帶草稿紙,繪圖體會(huì)數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)存儲(chǔ)方式和操作過(guò)程。在對(duì)數(shù)據(jù)結(jié)構(gòu)的理論掌握的基礎(chǔ)上,再進(jìn)行實(shí)驗(yàn)實(shí)踐。事實(shí)證明,這種“腦子想、紙上畫(huà)”的教學(xué)學(xué)習(xí)方法,能讓學(xué)生更容易理解和掌握。
1)以問(wèn)題為導(dǎo)向,以易理解和操作的示例為主線(xiàn),增加實(shí)驗(yàn)課時(shí),強(qiáng)調(diào)學(xué)生的實(shí)踐能力。傳統(tǒng)的實(shí)驗(yàn)課程示例,一般規(guī)模較大,操作復(fù)雜,程序代碼長(zhǎng),一次實(shí)驗(yàn)難以完成,使得學(xué)生體會(huì)不到數(shù)據(jù)結(jié)構(gòu)編程的樂(lè)趣和成就感。為此,基于近些年的實(shí)踐教學(xué)經(jīng)驗(yàn),構(gòu)建出一些學(xué)生易理解、易操作的教學(xué)實(shí)踐示例。例如,以學(xué)生信息中的單科成績(jī)排序?yàn)槔?,說(shuō)明python的list和sort函數(shù)的使用方法;為掌握遞歸的思路和方法,以n階乘、漢諾塔以及二叉樹(shù)的遍歷的算法為例,體會(huì)遞歸的不同適用場(chǎng)景;以十進(jìn)制轉(zhuǎn)二進(jìn)制為例,讓學(xué)生體會(huì)棧的操作與應(yīng)用;進(jìn)一步拓展到將棧應(yīng)用于迷宮問(wèn)題。
2)應(yīng)用多種數(shù)據(jù)結(jié)構(gòu)進(jìn)行對(duì)比,讓學(xué)生深刻體會(huì)到操作時(shí)間復(fù)雜度的差異。為此,也構(gòu)造出一些易于理解和實(shí)現(xiàn)的示例。例如,利用自然數(shù)1、2、…、n求和,體會(huì)程序循環(huán)累加和數(shù)學(xué)公式計(jì)算之間的計(jì)算效率差別,進(jìn)而說(shuō)明計(jì)算時(shí)間復(fù)雜度的重要性;以約瑟夫問(wèn)題為例,采用list、循環(huán)鏈表、隊(duì)列,來(lái)從時(shí)間復(fù)雜度角度體會(huì)不同數(shù)據(jù)結(jié)構(gòu)的優(yōu)缺點(diǎn);以?xún)?yōu)先隊(duì)列為例,采用list實(shí)現(xiàn)和采用堆實(shí)現(xiàn)進(jìn)行對(duì)比,體會(huì)堆具有時(shí)間復(fù)雜度低的優(yōu)點(diǎn);利用冒泡排序和快速排序進(jìn)行對(duì)比,體會(huì)不同排序算法之間的效率差異;以數(shù)據(jù)的插入、刪除和查找為例,分別比較list和二叉查找樹(shù)之間的效率差異。
通過(guò)近四年的教學(xué)改革與實(shí)踐,學(xué)生學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法課程的積極性有明顯提升,對(duì)基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)與算法的理解和掌握程度,也越來(lái)越深。在試卷難度不變的條件下,最近四年的期末考試成績(jī)?nèi)绫?所示。
表1 近四年的“數(shù)據(jù)結(jié)構(gòu)與算法”期末考試成績(jī)
從近四年的期末考試成績(jī)看,考試卷面平均分、總成績(jī)平均分、優(yōu)秀占比,總體上均有一定幅度的穩(wěn)步提升。教學(xué)效果,有了明顯的改善。同時(shí),總成績(jī)的不及格比例也呈下降趨勢(shì)。在后期,在教學(xué)實(shí)踐改革中,要進(jìn)一步精選知識(shí)點(diǎn)和示例,引入更多圖形化展示方法,更加生動(dòng)展示課程特點(diǎn),提升教學(xué)效果。
通過(guò)近四年的“數(shù)據(jù)結(jié)構(gòu)與算法”教學(xué)實(shí)踐經(jīng)驗(yàn),提出了一些課程內(nèi)容與方法的改進(jìn)措施。主要是精簡(jiǎn)教學(xué)內(nèi)容,采用由易到難漸進(jìn)式教學(xué)、圖形化教學(xué)展示,以容易理解和實(shí)現(xiàn)的示例作為實(shí)驗(yàn)重點(diǎn),不斷提高學(xué)生的學(xué)習(xí)興趣。從近幾屆學(xué)生的反饋和期末成績(jī)來(lái)看,教學(xué)改革與實(shí)踐具有較好的成效。近些年,互聯(lián)網(wǎng)發(fā)展迅猛,網(wǎng)絡(luò)課堂也是線(xiàn)下教學(xué)的重要補(bǔ)充。對(duì)于如何合理利用好網(wǎng)絡(luò)資源和網(wǎng)絡(luò)教學(xué),做好“數(shù)據(jù)結(jié)構(gòu)與算法”課程的線(xiàn)上和線(xiàn)下相結(jié)合,還需要不斷探索和實(shí)踐,以進(jìn)一步提高教學(xué)質(zhì)量。
湖北工程學(xué)院學(xué)報(bào)2022年3期