數據結構與算法范文
時間:2023-03-15 08:17:28
導語:如何才能寫好一篇數據結構與算法,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公文云整理的十篇范文,供你借鑒。

篇1
1 理論教學
1.1 明確教學目標
《數據結構與算法》這門課程的所有算法思想最后都會落腳到程序上,都需要用高級語言表現出來,老師把握不好目標,很容易把數據結構當成C語言的“延伸”和“升華”,課堂上帶領學生一個一個讀算法程序,而沒有做到讓學生去領會算法的思想。所以老師一定要明確這門課的教學目標是編程思想而不是程序本身,先有好的構思和想法,輔助語言加以實現,每節(jié)課都要以“思想第一,實現第二” 為教學綱領,教學生怎么從實際問題中抽象出模型,提煉出思路,然后用程序來實現這個思路,最后真正的解決問題,就像古人講的“胸有成竹”,在畫竹之前,對于竹子的高度,樹干、樹枝和葉子的結構,心里要有個規(guī)劃,做到心中有數,這樣畫出來的竹子才能形象。編程也一樣,先從實際問題重剝離出系統架構,構造出合適的模型,選擇高效率的算法,再使用高級語言把它實現,最后再進一步處理趨向完善,使之具備客戶所需要的功能。學生要從《數據結構與算法》這門課程中掌握的就是如何從實際問題中抽象出模型、建造起架構的過程,老師只有時刻帶領學生從這個角度來著手解決問題,才能真正為該課程的教學把握好方向。
1.2 合理運用教學方法
隨著現代教學水平的提高,越來越多的多媒體課件和網絡資源被運用于教學當中,人們也對啟發(fā)式、問題探究式、課堂討論式等這些新型的教學方法趨之若鶩,或多或少的把傳統的教學方法冠以“落伍”和“填鴨式”等貶義色彩。但我個人認為,傳統的黑板加粉筆的教學方法,在《數據結構與算法》這門課程當中仍然有著舉足輕重的作用,因為PPT課件和動畫都是老師預先按照自己的思路經過思考和摸索,多次嘗試和修改而整理出來的,對于經驗不豐富,未曾接觸過相關知識的學生來說,直接跳出來的課件和動畫沒有給夠他們思考和整理思路的時間,冰冷的課件和學生沒有眼神、肢體語言等情感交流,無法從算法思想的角度去引領學生一步一步的剝離表象,抽離出問題的本質。所以,片面的強調新型的教學方法是不科學的,傳統的黑板教學也不可忽視,在傳統的基礎之上,一些粉筆和語言都不太容易展示的算法執(zhí)行過程,可以結合現代化多媒體教學手段來表現,形象的動畫能讓抽象的內容變得更加直觀更易理解,學生也更容易被帶入其中,從而使教學過程變得更加生動形象。
所以,合理的教學方法應該是以板書為主,課件為輔,配合老師與學生的情感交流,這樣才能取得好的教學效果。
1.3 實例化教學設計
大學的學習和高中不一樣,不再簡單的以分數定乾坤,學生沒有了壓力也就沒了動力,而且大學生都各有鋒芒,有自己獨立的思想,如何調動學生對該課程的興趣,使被動學習變?yōu)橹鲃忧笾惋@得尤為重要,那如何激發(fā)學生的學習興趣呢?答案是要讓學生感覺到數據結構解決的問題其實都來源于我們的實際生活,是切切實實存在于我們周圍的,比如講到順序表和鏈表,可以舉例我們早期去銀行辦事需要排隊,中間插隊一個人后面的人都要后移(順序表插入),中間有一個人離開后面的人都要前移(順序表刪除),這就是順序表,而現在我們在銀行取個號就可以找個舒服的位置坐下,或者離開去辦其它的事情,等叫到號再到窗口,這就是鏈表,存儲的位置不連續(xù),但是大家的邏輯關系仍然存在;比如講到圖的最短路徑問題時可以設計一個旅游場景,需要去多個城市旅游,但又希望旅途最短花費最少,讓學生去設計路線;比如講到約瑟夫環(huán)的時候可以結合猶太歷史故事讓學生身臨其境;再比如講到漢諾塔的時候可以讓學生先試著玩一玩漢諾塔游戲,然后再考慮怎么用算法來實現。
“興趣是最好的老師”,真正把學生的興趣調動起來,使學生進入到一個積極思考和探索的活躍狀態(tài),教學就能起到事半功倍的效果。
2 實驗教學
鑒于該課程的課時壓縮,實驗課的課時也隨之減少了,學生能動手實踐的時間減少使教學效果大打折扣。而該課程的學了老師在理論課上的引導以外,學生自己動手去“練”才是真正去領悟和內化算法思想的法寶,“練”必不可少,所以在這有限的實驗課時間里,如何讓學生的“練”落到實處也需要老師投入很大的精力來設計和管控。
2.1 合理安排實驗項目
根據教學大綱,結合學生的實際掌握程度來設計實驗項目,主要分為驗證性、可選性和綜合設計性三大類,驗證性實驗的目的是重溫基礎知識,強調編程規(guī)范性和完整的算法思想, 主要針對一些常用的算法實現, 如順序表、鏈表的創(chuàng)建、要求學生在上機實驗課堂內完成??蛇x性實驗稍有難度,需要融會貫通和創(chuàng)新能力,針對基礎較好的學生,如果驗證性實驗很快完成,就可以進行可選性實驗項目的操作。綜合設計類實驗一般涉及多個知識點, 要求學生自己抽象出模型進行設計, 主要訓練學生綜合運用所學知識的能力、團隊協作能力和自主創(chuàng)新能力。題目一般是要求解決實際生活中遇到的問題,可以對學生按照基礎的強弱搭配成3-4人一個小組,完成后通過現場演示和答辯來評價效果,這類實驗完成后學生在體會到成功喜悅的同時,也能領悟到數據結構及算法的價值,激發(fā)他們的求知欲望和探索精神,使其更加積極主動的學習,而這一部分人的主動也能帶動其他的同學跟進步伐,形成一個好的學習氛圍。
2.2 正確管理實驗過程
實驗課堂上,針對不同類型的實驗項目,采用相應的教學方式。對于驗證性實驗,老師可以在實驗開始前對實驗的流程、操作要點及最終的運行效果進行講解,不至于讓學生盲目摸索,浪費時間。選擇性實驗需要針對部分基礎較好的學生進行適當的啟發(fā)式引導,對關鍵算法和思路予以提點。對綜合設計性實驗,教師可以采用項目式的教學方法,帶領學生理清需求、提取模型、設計步驟、確定計劃,并對小組成員予以分工,使得實驗能夠順利的進行下去。
實驗過程中也要設定一定的獎勵機制,不能只看最后結果,對于積極主動,喜歡鉆研的學生要及時獎勵,給予一定的加分,在綜合設計類實驗中擔任重要角色的學生也要識別出來,適當提高實驗過程分數。
基礎較差的學生光靠課堂上的練習遠遠不夠,需要整合機房資源,給學生提供課外實踐的機會,鼓勵他們利用業(yè)余時間補齊差距。
篇2
關鍵詞:數據結構預算法;國際化;互動式教學
文章編號:1672-5913(2013)18-0058-04
中圖分類號:G642
0 引言
通過觀察和對比,國際一流大學學生參與課堂發(fā)言和課后研討的積極性要遠遠高于復旦大學學生,而參與研討對于促進學生深入理解課程內容,培養(yǎng)學生在立題、思辨和協作方面的能力十分有益。為此,復旦大學軟件學院開展了數據結構與算法設計類課程國際化建設工作,主要目標是研究如何在課堂教學中采用研討型方式,在實驗環(huán)節(jié)中采用協作型項目,并針對中國學生的特點,探索如何引導學生提出問題和參與討論,以提高課程教學效果,縮小與國際一流大學差距的教學方法。課程建設教師團隊的主要人員首先通過全程旁聽美國麻省理工學院數門相同或類似的課程,認識與國際一流大學在教學手段和效果方面差距的同時,分析中美學生在提出問題、參與討論方面表現差異的原因。然后通過與學生座談方式收集整理中國學生不愿意在課堂上發(fā)言和參與研討的主要原因和相應對策。最后介紹復旦大學軟件學院根據課程國際化教學課題的研究成果進行教學方式調整和開展課堂教學實踐的情況。
1 麻省理工學院在課程教學中促進學生參與研討的先進經驗
在開展數據結構與算法設計課程國際化建設過程中,課程建設教師團隊的主要人員利用在美國麻省理工學院(MIT)參與研究工作的機會,在一年內全程旁聽了Design and Analysis ofAlgorithms、Web 3.0、Economics 0f Information、Software Construction 4門課程,并且參加了MIT的IFF(International Faculty Fellow)國際大學教師培訓項目。IFF是由MIT發(fā)起組織的、致力于提高國外高等院校教師的科研能力、培養(yǎng)研究生水平和授課技能的項目。在上述過程中,教師團隊人員對于MIT在促進學生參與課程相關內容研討方面的舉措印象深刻,并將值得借鑒的教學方式和方法進行了歸納。
(1)學生參與課程相關內容的討論需要相關知識的準備,只有將相關知識積累到一定的程度,學生才會自然而然地愿意對相關問題進行討論,而課程教材和課堂講義對知識積累是遠遠不夠的。MIT在課程開始時就由任課教師提供課程相關的文獻閱讀列表,閱讀完這些文獻所需要的時間大約為課程授課時間的3倍左右。對比復旦大學類似課程的文獻閱讀要求,發(fā)現中國學生在完成課程相關文獻閱讀量方面遠遠少于國際一流大學的學生。
(2)每一門課程除了提供網站用于下載課程相關的資料外,還有課程的BLOG便于學生和教師在線交流。利用這樣的系統,教師往往規(guī)定在課程授課期間,學生至少針對數個課題(完成相關文獻的閱讀后)在BLOG上發(fā)表自己的觀點。由此促進學生圍繞相關課題開展討論,這樣的方式也為那些不太愿意在眾人面前發(fā)言的學生提供闡述自己觀點的機會。
(3)MIT的教室一般都是階梯教室,這樣既可以讓每一位學生能夠清楚地看到任課教師各種面部和身體語言,也使授課教師能夠看到所有的學生,時刻了解學生對課堂內容的各種反饋。學生座位之間留有通道,授課時教師會在整個教室里走動,確保能夠走近每一位學生的身旁,讓每一位學生感受關注和重視,這樣也讓學生感到親切隨和。實踐表明,這樣做更能讓學生暢所欲言。
(4)教學內容融合任課教師的研究成果。任課教師對于自身的研究內容一般都有較深的認識和理解(甚至有些理論和技術是世界首創(chuàng)),講解過程中能夠廣征博引,相關難點都能夠娓娓道來,所以往往更為生動有趣,可以激發(fā)學生的提問熱情和學習興趣。教師只有在相關領域內具備一定的科研水平才能更好地講授相應的課程內容。
(5)在講解有關技術內容時,會邀請業(yè)界一些著名人物走進課堂為學生講解其擅長的話題。以MIT互聯網方面的課程為例,任課教師會請IBM、Google、Microsoft等著名科技公司副總裁或技術總監(jiān)級別的人物為學生講一堂課(有時是遠程視頻連線,教室配有大屏幕高清投影和高速網絡),之后一般設有學生提問環(huán)節(jié)。這樣的課程很受學生歡迎,學生提問也非常踴躍。
綜上所述,在課程開始前精心為學生挑選各章節(jié)相關的閱讀文獻(分為必讀和選讀部分)、建設課程BLOG促進師生間交流、將研究內容融入課程內容等教學方式和方法都值得借鑒,并且通過一段時間的準備加以實施。但是中國學生不愿意上課發(fā)言和參與研討也有其成長環(huán)境中文化背景的影響,例如,追求標準答案的應試教育、謹守中庸之道處事態(tài)度等。而美國學生從小就讓他們不斷地進行發(fā)言和表達的訓練,從幼兒園開始,每天都會讓小孩子輪流講一下昨天發(fā)生的事情。參加各種活動和社團也是如此,久而久之,養(yǎng)成了愿意并且善于表達自己觀點的習慣。所以對于我們的學生,不僅要營造讓其發(fā)言的環(huán)境和氣氛,也需要有意識地利用各種機會培養(yǎng)他們發(fā)言的習慣。
2 學生不愿意在課堂上發(fā)言和參與研討的主要原因及改進建議
課題組對兩個班52名學生針對不愿意在課堂上發(fā)言和參與研討的問題進行面談,每位學生面談時間為20~30分鐘。學生不愿意在課堂上發(fā)言和參與討論的主要原因可歸納為:害怕回答錯誤后造成對自己不利的影響(特別是教師隨后會給出答案的情況)、沒有養(yǎng)成積極發(fā)表自己觀點的習慣(與成長的文化和環(huán)境有關)、擔心積極發(fā)言后被別人說愛表現、課堂上沒有能夠很好地營造出各抒己見氛圍。調查過程中同時也聽取了學生對讓他們能夠積極主動發(fā)言的一些建議和意見,歸納為以下幾點。
(1)討論的問題應該是一些不存在對錯的開放性問題。
(2)可以先由教師開題和啟發(fā),然后找到學生感興趣的幾點展開討論。
(3)教師要營造隨和的課堂氣氛,需要有一個破冰的過程,讓學生放松不害怕。
(4)可以采取分組討論然后再由學生總結發(fā)言的方式。
(5)提出一些學生比較熟悉且有啟發(fā)的問題比較容易讓學生展開交流。
(6)發(fā)言和討論適當增加一些平時成績(但也有學生擔心別人認為他為了成績而發(fā)言,所以增加成績的比重也不宜過高)。
(7)不要僅對一個學生提問,要求其他學生可以隨時補充。
(8)對于有標準答案的問題,可以采取按座位順序點名提問回答的方式。
綜合以上學生的意見和建議,為了讓學生積極參與課堂發(fā)言和研討應當盡量營造輕松隨意的課堂氣氛,提出的問題也應是開放性的(即沒有標準的答案),任課教師要善于引導和組織課堂討論,在提出問題前給予必要的講解和啟發(fā)。
3 教學方式調整和課堂教學實踐
通過借鑒國際一流大學和國內名師的先進教學經驗,針對中國學生,特別就數據結構與算法設計課程的教學方式提出了一些方案和措施,并且進行了相應的課堂教學實踐。雖然這些方案和措施還有待進一步完善和改進,但是課堂教學效果和學生參與研討和發(fā)言的意愿明顯提高。具體的方案和措施包括以下幾個方面。
3.1 嘗試誘導式、研討式和互動式教學方式
任課教師要改進之前以灌輸式知識傳授的教學方式,嘗試采用誘導式、研討式和互動式教學方式。教學過程中一般首先給出實際的應用問題,然后要求學生嘗試提出解決問題的算法,其他學生需對提出的方法進行評價,提出不足之處和改進方法,然后通過討論這個算法的缺點,引出克服這個缺點的其他算法,最后對解決相同問題的不同算法進行比較和歸納。適當增加學生對相關重要文獻的閱讀量,并且根據閱讀和調研結果進行課堂討論。以NP完全性問題教學為例,由于學生還沒有學習計算理論方面的課程,對于理解NP問題和NP完全性問題有一定的困難。首先任課教師介紹旅行商問題,接著讓學生嘗試尋找有效地求解算法,在教師引導下討論得出結論:在現有計算機體系結構和運算能力的基礎上,一定規(guī)模的旅行商問題目前不存在找到最優(yōu)解的計算復雜性為多項式的算法;然后指出存在一類這樣的問題,并且任取這類中的一個問題,再任取這類中的另一個問題,則一定存在多項式時間復雜性的算法,即可以把前者轉變?yōu)楹笳?。如果存在解決前者的多項式算法,必定存在能夠解決后者的多項式算法;最后指出目前仍然沒有找到多項式算法來解決這類問題,同時也不能證明這樣的多項式算法不存在。為了讓學生加深對上述問題的體會并且熟知典型的NP問題,將學生分成9組,每一組給出一對問題,其中一個屬于P(多項式)問題,一個屬于NP問題。要求學生調查這一對問題在應用中出現的實例和變體,然后設計可行的解決方法。并且要求每組以課堂演講的方式向師生介紹他們的調查結果,聽取報告的教師和學生可以隨時進行提問,要求做報告的學生回答。教學實踐表明,此舉加深了學生對NP完全性問題的認識和理解。
3.2 從解決實際問題出發(fā),培養(yǎng)學生提問和思辨的能力
對于每個知識單元,首先提出若干個實際應用中的問題,在提出可行的數據結構與算法前,引導學生進行討論,并且提出自己的解決方案。通過分析學生所提出的各種方法,比較之前已學方法,歸納出新的數據結構與算法的特點和用途,最后在深入剖析和討論的基礎上進行擴展和綜合。
3.3 借鑒國際一流大學的教學內容和方式,彌補與國際先進授課水平之間的差距
數據結構與算法設計課程的教學內容和方式借鑒了美國麻省理工學院的同名課程,并嘗試進行誘導式、研討式和互動式教學。課程的教材、講義、作業(yè)、實踐和考試全部使用英文,外教采用英語授課。將世界頂尖級學者撰寫的經典著作Introduction to Algorithms作為課程的教材,并且根據中國學生的生活經歷和背景文化,對部分案例進行相應的增補和改寫。
3.4 以應用為導向,培養(yǎng)綜合型人才
目前計算機學科方面的教學,一般從計算機基礎知識和編程原理開始,經過若干中級課程,直至大學三、四年級,學生才可能涉足整個軟件系統開發(fā)的全過程,這樣往往造成“只見樹木,不見森林”的情況。學生已經學習了構成軟件系統所需的知識和技術,但是難以針對某一現實應用,將所學較好地綜合起來。在大學低年級時,以完整系統開發(fā)和應用為目標,讓學生在專業(yè)學習的早期就能夠了解和體會實際應用的復雜性,掌握并實踐綜合集成各項技術的方法和手段。學生只有較早地了解整個軟件系統的開發(fā)與應用,才能在今后創(chuàng)造性地綜合運用所學,成為既有較高專業(yè)水平,又對現實應用有敏銳洞察能力的復合型人才。
3.5 以科研帶動和促進教學,將最新技術的發(fā)展成果融入教學內容中
數據結構與算法的基本內容雖然相對穩(wěn)定,但對已有數據結構與算法的擴展和結合,特別是解決新的應用方面的發(fā)展卻日新月異,知識更新和演化速度較快。數據結構與算法設計課程組的教師在現有教材的理論體系和教學內容的基礎上,及時了解和把握技術發(fā)展的新動向,將最新的理論創(chuàng)新和技術進步充實到教學內容中,每年都增補緊跟學科發(fā)展的新內容。此外,任課教師會指導學生參與自己的科研項目,或者推薦學生進入其他教師的實驗室從事相關的科研活動。
這些方案和措施的實施,使得數據結構與算法設計課程能夠在較短的時期內形成科研和教學并線、講解和演示并重、理論和實踐并行的特色。課題組教師不斷用科學研究和國際學術交流的成果充實課程的內容,使課程能夠充分體現目前算法理論和應用方面最新的發(fā)展和動向。在教學中始終堅持理論與實踐相結合的原則,從經典案例引出科學問題,并強調對學生邏輯思維和動手能力的培養(yǎng)。
4 結語
篇3
【關鍵詞】考核方式改革 人才培養(yǎng) 動手能力
《數據結構與算法》是計算機和信息與計算科學專業(yè)一門重要的專業(yè)基礎課,在信息專業(yè)教學體系中占有舉足輕重的地位。為進一步培養(yǎng)學生的實際應用能力和獨立解決問題的意識,使同學們能夠把所學知識與實踐有機的結合,對《數據結構與算法》課程的考核方式進行改革。
一、當前考核方式存在的問題和改革的必要性
期末筆試的成績比重很大,忽略了學生的學習過程。期末的成績占到80%,期末決定了學生是否及格。有一部分學生平時不學習,臨近考試采用突擊學習的方式,考試雖然及格了,可是考試后沒多長時間基本都忘了。為了平時成績得高分,同學之間抄襲作業(yè)的情況很常見,破環(huán)了學生的學習氛圍和學習的積極性,不利于學生建立良好的學習氛圍。為了適應應用型人才培養(yǎng)模式的改革,提高學生的實踐動手能力,結合目前考核體系對于本課程存在的問題,應該對現行考核方案進行適當的調整和改革。調整的原則是結合本專業(yè)學生的特點和專業(yè)課程體系,理論聯系實際,著重培養(yǎng)理論聯系實際能解決實際問題的應用型人才。改革的目的是要正確評價學生的綜合素質,提高學生就業(yè)競爭能力。
二、考試改革的方法
重視學習過程,增加期中考試。采用過程化考核思想,避免學生突擊學習,增加期中考試。用8周左右的時間學習完數組之后進行一次期中考試。目的是考查學生的基礎知識和程序設計語言。期中成績占總成績的30%。降低期末考試成績的權重。避免期末考試成績“一錘定音”。數據結構中的樹和圖連同查找和排序內容是期末考試的重點。為了避免遺忘線性結構的內容,期末考試也要涉及期中的相應知識點。期末成績占總成績的40%。
為了培養(yǎng)學生動手能力,增加上機實踐考核。上機實踐采用階段式的考核方式。為了避免學生的抄襲,培養(yǎng)自我學習的能力,上機考核的內容不做統一規(guī)定。學生至少完成兩個題目,一個是線性結構插入h除等操作;另一個是非線性結構和排序中選出一個題目。兩個題目分別在期中和期末考試之前考核完畢,考核的重點是看學生對程序的理解、上機熟練操作的程度以及答辯情況。為了鼓勵學生的學習興趣和對后續(xù)課程的延伸,對于在實踐操作中表現出色,勇于創(chuàng)新的學生給予加分的獎勵。實踐題目完成情況占總成績的23%,獎勵加分占2%。
降低平時成績?,F行的考核體系中平時成績所占的比重偏高。平時成績的主要來源應該是學生理論課的課堂表現,包括出勤。從課堂的表現可以看出學生對問題的理解和思考,出勤可以看出學生的學習態(tài)度。平時成績占總成績的5%。
三、考核的結果分析
考核結果的分析主要從橫向和縱向兩個方面進行對比。橫向是指不同年級的同一門課程(10級和11級對比);縱向是指同年級學生的兩門課程(11級的計算機方向專業(yè)課程只開設了《面向對象程序設計》和《數據結構與算法》)。橫向對比的結果表明同一門課程不同年級學生的掌握情況,縱向對比的結果顯示出來的是學生的基礎和對后續(xù)課程的影響。
本次考核的主要對象是信息與計算科學系11級學生共78人,《數據結構與算法》課程成績分布如下:
單獨的成績很難說明問題,下面從橫、縱兩個方面結合具體的數據進行分析。《數據結構與算法》和《面向對象程序設計》課程11級和10級學生成績分析如下表:
縱向對比:從信息11級《數據結與算法》和《面向對象程序設計》兩門課程成績分析可以看出11級學生對《面向對象程序設計》掌握情況不好,從及格率、優(yōu)秀率、最高分以及最低分中都能體現出來,先行課的學習情況直接影響后續(xù)課程。
橫向對比:從數據表中可以看出11級的成績最高分和最低分要比10級好,兩個年級及格率的差距很小。11級的不及格率是10級的1倍,平均分差了9分,得出的結論是11級學生的基礎差很多。
通過兩組數據的對比,不難看出,11級學生學習先行課《面向對象程序設計》的情況不好。11級《數據結構與算法》不及格率比10級低0.74%,平均分低0.71,但優(yōu)秀率高3.43%,最低分和最高分的差距由80分縮小到62分。就11級學生《數據結構與算法》和先行課《面向對象程序設計》的成績對比來說,最低分和最高分的差距由92分縮小到62分,及格率提高23.65%,平均分提高16.49分,優(yōu)秀率提高3.95%。從成績上可以看出11級的學生整體成績有所提高。也就是說明本次的課程考核改革取得了相應的效果。
四、考核中存在的問題
篇4
關鍵詞:數據結構與算法分析;課程體系;研究型大學;創(chuàng)新性教學
為落實教育部“高等學校教學質量與教學改革工程”,湖南大學肩負著為建設創(chuàng)新型國家而培養(yǎng)創(chuàng)新型拔尖人才的重大歷史使命[1]。湖南大學計算機與通信學院為進一步貫徹以人為本、因材施教的辦學理念,加速培養(yǎng)基礎寬厚、學科知識交叉的復合型人才,充分調動學生學習積極性,以精品課程為目標,進行研究型大學創(chuàng)新性課程建設,實施設計與創(chuàng)新型人才培養(yǎng)模式的本科教學質量工程[2]。在學院制定的新本科教學計劃中,“數據結構與算法分析”是四門學科通識教育課之一。課程教學團隊結合學校和學院的教學質量工程要求,對課程進行了全面的創(chuàng)新建設。
1 “數據結構與算法分析”課程的地位
計算機專業(yè)的學生今后無論是從事硬件方向的工作,還是從事軟件方向的工作,其程序設計和算法設計與分析的能力都是非常重要的!隨著計算機應用領域的擴大和軟硬件的發(fā)展,計算機加工處理的數據越來越龐大和復雜,而且對其處理的效率也提出了更高的需求[3]。“數據結構與算法分析”就是隨著處理對象的復雜性不斷增加而發(fā)展起來的一門課程,作為計算機專業(yè)的核心課程,它在專業(yè)人才培養(yǎng)鏈條中占有舉足輕重的地位,它是一門承上啟下的樞紐課程,同時也是一門實踐性很強的專業(yè)技術基礎課程[4]。
2研究創(chuàng)新性“數據結構與算法分析”課程的目標
研究型大學既要培養(yǎng)研究型人才,也必須培養(yǎng)高質量的應用型人才,即必須多目標培養(yǎng)人才[5]。同時為貫徹教育部本科教學質量工程提出的顯著增強學生的實踐能力和創(chuàng)新精神的要求。我們制定研究創(chuàng)新性“數據結構與算法分析”課程的目標是:激發(fā)創(chuàng)新意識,培養(yǎng)研究興趣,訓練兩種能力,提高實踐技能。
研究數據結構的目的是為了學會編寫更高效的程序,基于追求更有效率程序的創(chuàng)新理念,引入并加強“權衡”的概念,培養(yǎng)學生研究數據結構相關的代價和效益的興趣和方法。通過課程教學和實驗,訓練數據結構的設計和算法分析兩種能力。這兩種能力有以下三個層次:1)學會常用的數據結構,形成一個程序員的基本數據結構工具箱,在解決實際問題時,能熟練使用數據結構來表示和存儲問題中待處理的數據元素。2)熟練地應用各種常用的數據結構。掌握對每一個數據結構和相關基本操作算法所花費的時間和空間代價的分析方法。針對實際問題所要求的資源限制,能確定工具箱中的哪一個數據結構對于該問題是最合適的,即解決方案是最有效率的。3)了解研究數據結構和算法分析的方法,培養(yǎng)研究數據結構的興趣,為在解決實際問題中,能發(fā)明新的數據結構和進行正確的算法分析打下良好的基礎。
通過該課程的學習,我們不僅要讓學生掌握數據的邏輯結構、存儲結構及其相應的算法,更重要的是激發(fā)學生的研究創(chuàng)新意識,培養(yǎng)學生研究問題和解決問題的能力,即能夠把現實世界中的客觀問題變換為在計算機內的表示形式,學會組織數據、選擇算法、養(yǎng)成良好的程序設計風格。所以,“數據結構與算法分析”的教學要以培養(yǎng)學生的實踐能力為核心,重點提高學生的分析設計能力和編程能力,進而提高學生的系統的認知、設計、開發(fā)、應用能力,為研究數據處理的科學問題和創(chuàng)新解決問題的科學方法打下堅實的基礎。
3研究創(chuàng)新性“數據結構與算法分析”課程建設
3.1教學計劃
在創(chuàng)新與設計型人才培養(yǎng)模式探索過程中,學院基于基礎厚實、學以致用、知識技能并重的理念,大膽重設課程體系,實現通識教育基礎上的寬口徑專業(yè)教育的兩階段培養(yǎng)模式,并將實驗教學組成相對獨立體系,提出了“課程實驗――實驗課程――工程設計訓練――畢業(yè)設計”四級實驗體系[2]。學院選出“數據結構與算法分析”等四門專業(yè)基礎課程作為專業(yè)學科通識教育平臺課程。要求課程相對穩(wěn)定,安排足夠學時,力求講透講深,夯實專業(yè)學科的理論基礎。安排足夠的課程實驗學時,通過課程實驗使學生鞏固加深對理論知識的理解;以及通過相應的實驗課程,訓練和增強學生綜合運用知識的能力。圖1 給出了本科教學計劃的部分運行圖。由圖可知,“數據結構與算法分析”在課程體系中的安排,凸顯了其作為培養(yǎng)學生專業(yè)基本能力的地位和作用,強調計算思維能力、算法設計與分析能力和程序設計與實現能力的訓練和培養(yǎng),為全面培養(yǎng)學生的創(chuàng)新與設計能力打下堅實基礎。
3.2教學大綱
課程教學大綱根據近年全國碩士研究生入學統一考試計算機科學與技術學科綜合考試大綱中的要求,參考全國著名高等院校近幾年使用的教材以及期末考試、研究生入學考試試題編制而成。教學內容包括54個知識點,分為:數據結構緒論,算法分析,線性表,棧、隊列和數組,樹和二叉樹,圖,查找和內部排序八個部分。每個知識點根據課程目標中三個能力層次要求分為基礎知識,重點知識,提高知識,并為其設計相應的教學內容,教學進度,作業(yè)題或實驗題以及考查評價要求。
如教學大綱中線性表部分。通過這部分的課堂和實驗教學,要求學生熟練掌握線性表的基本性質,及其順序存儲結構和鏈式存儲結構的描述方法,以及線性表的各種基本操作的實現,這是該部分的基礎知識,注重課程目標中能力層次一的培養(yǎng)。理解線性表的兩類存儲結構的特點,能夠從時間和空間復雜度的角度綜合比較兩類存儲結構和各種基本操作性能的不同特點及其適用場合,這是該部分的重點知識,注重課程目標中能力層次二的培養(yǎng)。了解從實際應用問題的需求分析中發(fā)現待處理數據具有線性關系的方法,以及如何設計合適的基本操作,這是該部分的提高知識,注重課程目標中能力層次三的培養(yǎng)。重點考查學生對線性表的基本概念和基本應用的掌握,以及對線性表兩種存儲結構實現(尤其是鏈表實現)的特點的理解情況。通過實驗和算法設計題考查學生對線性表靈活運用的程度。
3.3教材建設
由于計算機科學是一門快速發(fā)展的新興科學,數據結構與算法分析的理論、概念和方法隨著程序設計方法學和程序設計語言的發(fā)展不斷發(fā)展和更新。這些情況給課程的教材建設提出了更高的要求:必須緊跟計算機科學技術發(fā)展的步伐[6]。在選材上,我們始終堅持統一要求和因材施教的原則,確保教材內容的組織科學、合理,體系得當。選取的課堂教學教材,內容涵蓋了教學大綱中確定的所有知識點,并根據課程的培養(yǎng)目標,以及學生的學習基礎和興趣需求,選用了三本高水平教材――嚴蔚編的《數據結構(C語言版)》、Clifford A. Shaffer主編的《數據結構與算法分析(C++版)》和Sartaj Sahni主編的《數據結構、算法與應用(C++語言描述)》。經過幾年的教學實踐,學生普遍反映嚴老師的書在講解知識點時,能夠把抽象的內容表述得更明確、更具體、更便于學生理解和把握。兩位美國教授編寫的教材都使用C++語言描述數據結構和算法,使得數據結構與面向對象的思想緊密結合。Shaffer的書還結合算法分析來討論各種存儲方法和算法的利弊,如何設計出有效率的算法,如何根據應用需求選擇最佳方案,這種“授人以漁”的思想極大激發(fā)學生的思考熱情。Sartaj Sahni的書最大特色就是強調應用,通過現實生活中的許多應用實例具體演示了各種數據結構和算法設計方法,使學生能了解學習數據結構后如何應用到實際工作中去,學以致用。
只靠讀書是不能學會靈活使用數據結構的。課程的教學目的不僅是讓學生掌握各種數據結構,更重要的是培養(yǎng)學生解決實際問題的能力。因此,上機實驗是課程教學的重要環(huán)節(jié)。為了幫助學生進行有效的實驗訓練,我們積累多年實驗教學改革經驗,編寫了《數據結構與算法分析課程實踐》講義,用于指導學生的課程實驗教學。在講義中不僅精心設計題目,緊扣理論內容,由淺入深,循序漸進地培養(yǎng)學生計算思維能力、算法設計與實現能力,而且給出了實習步驟和實習報告的規(guī)范,訓練學生軟件工程的能力。教學實踐表明,學生通過上機訓練和完成實驗報告,不僅加深了對理論知識的理解,提高了復雜程序設計的技能,而且培養(yǎng)了良好程序設計的習慣和工作作風。
數據結構與算法分析是實踐性很強的課程,僅靠上課和上機中學習是絕對不夠的。為了給學生在課外自學和練習中提供指導,我們編寫了《ACM程序設計培訓教程》,并提供在線評測系統供學生隨時測試。這樣做可以充分調動學生的學習積極性和主動性,并使其鉆研更深、更新、更難的問題,提高研究創(chuàng)新能力。
3.4教學組織
多年來,本課程教學團隊已積累了一套“課堂―課程實驗―實驗課程―課外自學輔導”四個環(huán)節(jié)相互配合,提倡激發(fā)興趣,精講多練,重點突出,培養(yǎng)專業(yè)基本能力和研究創(chuàng)新的教學實施方案。
課堂環(huán)節(jié)注重計算思維能力的訓練。在講授具體課程內容時,要精講,把重點要講透徹,把難點加以分解,讓學生能理解。要串講:把前后相互關聯的多個知識點串講,總結其中的共性,突出各自的特點,分析相互的差別。要活講,除了講解基本的知識,更要授人以漁,要把“分析問題中待處理的數據建立抽象數據類型、根據物理存儲特點建立物理數據結構、設計有效率的存儲結構和基本操作算法、分析各種數據結構和基本操作算法特點和適用性”這樣一條學習主線給予詳細的介紹,引導學生有效地學習理論知識,進行計算思維能力的訓練,使學生掌握創(chuàng)新地學習的能力,以激發(fā)學生對問題的探索精神。
實驗注重算法、程序設計與分析能力的訓練。通過實驗報告文檔,訓練學生的算法設計和分析能力,通過上機實踐,訓練學生的程序設計和調試能力。實驗實踐環(huán)節(jié)由簡單到復雜,通過精心挑選的驗證型、技能型、創(chuàng)新與設計型三類實驗題目,提升學生對理論知識的理解和應用能力,促進學生的創(chuàng)新研究思維。對每次實驗的目的、原理、實驗步驟、注意事項和實驗要求都做出了詳細的說明,突出了實驗的重點,并編寫了詳細的實習指導書,包括實習報告范例、難度不同的程序范例,便于學生從模板開始,快速入門與提高。實驗報告包括需求分析,概要設計,詳細設計,調試分析,測試結果,使用說明和實驗心得七個方面。嚴格實施這些貌似繁瑣的規(guī)范,對于學生基本程序設計素養(yǎng)的培養(yǎng)和研究問題方法的訓練,將能起到顯著的促進作用。
課外自學輔導注重因材施教,滿足不同的學習需求。學生的興趣、專長,接受能力、自學能力都有差異,課堂上“均等和有限”的教學不能達到因材施教的目的。在課堂上,教師只能針對程度一般的多數學生的情況進行教學,對于程度差的學生要靠個別的輔導,幫助其積累知識和提高理解能力,跟上一般學生的進度。對于優(yōu)等生,也要進行個別的指導,指定課外讀物,加大信息量,布置思考題,調動其潛能,引導其創(chuàng)新。對于尖子生,我們還有一條措施,讓其參加程序設計競賽,組織和指導他們參加全國性的學科競賽,促使他們脫穎而出。
3.5教學研究
為實現培養(yǎng)“寬口徑、厚基礎、強能力、高素質”的研究型人才的教學理念,學院對包括數據結構與算法分析在內的四門學科通識教育課程進行重點建設,組織專業(yè)教師認真總結多年來的教學經驗,深入開展教學研究,提出一系列合理的教改方案。
1) 優(yōu)化調整專業(yè)培養(yǎng)計劃。
2009年初,為配合學校的人才培養(yǎng)模式向研究型轉變的本科教育培養(yǎng)計劃改革,學院制定了新的旨在培養(yǎng)設計與創(chuàng)新型人才的課程體系和實驗體系,把“數據結構與算法分析”課程定位在學科通識教育課程,全院所有專業(yè)的學生必修。同時把該課程從第四學期提前到第三學期,并與第一學期開設的程序設計基礎,第二學期開設的高等程序設計和軟件基礎實驗1,以及第四學期的軟件基礎實驗2,構成一組課程體系,保證本科生在通識教育培養(yǎng)的兩年中,每個學期都開設程序設計方面的課程,為培養(yǎng)設計與創(chuàng)新型人才夯實學科基礎。
2) 基于課程責任制的師資隊伍建設。
近幾年,學院在教學改革中大力實施定崗定編和課程責任制改革。根據教師的科研方向分配教學任務,同時按照課程特色組合多個教學團隊,并與教師所屬的科研團隊互相關聯,達到科研與教學相結合促進教學質量提高的目的。
3) 以申報精品課程為契機加速課程信息化建設。
以課程建設促進專業(yè)建設,打造精品課程是學院對每門專業(yè)核心課程的要求。根據精品課程建設的要求,開發(fā)了課程網站,學生可以隨時訪問網站獲取課程資源、在線播放課件、習題指導等;開發(fā)實驗與實踐在線評測系統,學生可隨時上網提交軟件在線評測,并在學習園地學習交流。開發(fā)ACM競賽培訓網站,為喜愛編程的學生提供交流和切磋的平臺。
4) 培養(yǎng)設計與創(chuàng)新人才的實踐教學體系建設。
學院提出了“課程實驗―實驗課程―工程設計訓練―畢業(yè)設計”的新型特色實踐教學體系。明確“課程實驗”和“實驗課程”的內涵與目標,要求所有核心課程必有此環(huán)節(jié)[2]?!皵祿Y構與算法分析”作為訓練學生計算思維、算法設計和分析能力和程序設計與實現能力的重要課程,對課程實驗和實驗課程的實踐教學環(huán)節(jié)不斷改革創(chuàng)新,如教學團隊積累多年實踐教學經驗,編寫了《數據結構與算法分析課程實踐》講義,用于指導學生的課程實踐教學。申請多個SIT項目,為學生提供研究創(chuàng)新平臺。編寫了《ACM程序設計培訓教程》教材,對喜歡算法和程序設計的學生進行指導,使學生在各類與程序設計相關的學科競賽中頻獲佳績。
4結語
“數據結構與算法分析”是計算機專業(yè)的一門核心課程,學習數據結構和算法設計分析不僅為學習后續(xù)課程建立基礎,也有益于創(chuàng)新與設計型人才的培養(yǎng)。
為了不使教學過程過于抽象和枯燥,我們要充分調動學生主動學習的積極性,提高教學的趣味性;大力提高學生的實踐能力和知識應用能力,注重創(chuàng)新研究能力的培養(yǎng)。借著學院新型課程體系和新型特色實踐教學體系改革的春風,我們明確了培養(yǎng)創(chuàng)新與設計人才的理念,針對數據結構與算法分析課程能力培養(yǎng)三層目標,在繼承原有教學體系中關注課堂教學的基礎上,加強實踐教學環(huán)節(jié)和課外輔導提高環(huán)節(jié),使這門課程的教學更加系統和全面。實踐證明,這種新模式對提升教學質量非常必要,近幾年,學生和校督導團的評教成績在學院名列前茅,該課程已通過省精品課程評審,用新模式培養(yǎng)出來的學生陸續(xù)在全國各種大賽上獲得較好名次,在2010年ACM亞洲區(qū)比賽中我院學生獲得兩個金獎。
按照學院提出的“創(chuàng)新與設計型人才”培養(yǎng)目標?!皵祿Y構與算法分析”課程教學工作從課堂教學和實踐教學兩個方面進行建設和完善,精品課程網站和實驗與實踐在線評測系統已經投入使用,課程教學輔助課件在逐步建設中,符合創(chuàng)新與設計型人才培養(yǎng)目標的教材正在編寫中,相信“數據結構與算法分析”這門課的教學質量在教學改革中將不斷得到提高。
參考文獻:
[1] 鐘秉林,董奇,葛岳靜,等. 創(chuàng)新型人才培養(yǎng)體系的構建與實踐[J]. 中國大學教育,2009(11):22-24.
[2] 趙歡,駱嘉偉,李仁發(fā),等. 計算機專業(yè)設計與創(chuàng)新型人才培養(yǎng)模式及課程體系研究[R]. 武漢:第八屆全國計算機系主任論壇,2005,10.
[3] Gregory Goth. Turning Data Into Knowledge [J]. Communications on the ACM,2010,53(11):13-15.
[4] 教育部高等學校計算機科學與技術教學指導委員會. 高等學校計算機科學與技術專業(yè)人才專業(yè)能力構成與培養(yǎng)[M]. 北京:機械工業(yè)出版社,2010.
[5] 張思東,張有根,高萬英,等. 重點大學既要培養(yǎng)研究型人才也必須培養(yǎng)高質量的應用型人才[R]. 深圳:全國電子高等教育學術研討會,2003,11.
[6] 張乃孝. 編寫“數據結構”教材的幾點體會[R]. 南京:第二屆大學計算機課程報告論壇,2006,7.
Constructing Innovative Curriculum of Data Structures and Algorithm Analysis
in Research-oriented University
LI Xiaohong, LUO Jiawei, YAN Hua, WU Hao
(School of Computer and Communication, Hunan University, Changsha 410082, China)
篇5
楊佩理
江蘇沙洲工學院
摘要:本文針對在采用虛擬現實技術描述地理地形時所要求的數據海量、處理復雜的特點,采用金字塔分層結構,提出了細節(jié)層次算法的解決方案。探討了適應于虛擬現實地理數據可視化的數據庫模型結構。
關鍵詞:虛擬現實;金字塔結構;細節(jié)層次算法
篇6
關鍵詞:數據結構,前導課;算法
《數據結構》不僅是程序設計的基礎,而且是設計和實現編譯程序、操作系統、數據庫系統等系統程序和其它大型應用程序的重要課程之一。為學生今后從事理論研究、應用開發(fā)、技術管理工作提供了堅實的理論基礎,是專升本、考研和等級水平考試的必考科目,也是學生學習中感到比較吃力的一門課。
《數據結構》課程教學目標要求學生學會分析數據對象特征,掌握數據組織方法和計算機的表示方法,以便為應用所涉及數據選擇適當的邏輯結構、存儲結構及相應算法,初步掌握算法時間空間分析的技巧,培養(yǎng)良好的程序設計技能。本文對如何學習、掌握《數據結構》課程內容進行了探討,提出了切實可行的有效學習方法。
一、注意前導課知識的熟練掌握
《數據結構》的前導課包括一門計算機語言(PASCAL、C或C++,本文以C++為例)和高等數學。要想輕松學習《數據結構》,必須先打好這兩門課的基礎。學生學習感到吃力主要是這兩門課掌握不牢,用起來生疏,算法思路有,但卻無從下手,不能熟練地用C++語句描述出來。所以,從c++語言入手,加強程序設計基本素質的培養(yǎng),是學好數據結構的重中之重。
C++知識點主要有:(1)包含文件語句:#include。例如,#include、#include、#include、#include是常用的系統頭文件。(2)函數和函數參數。在C++語言中,程序由一個名為main的主函數和若干個功能相對獨立的函數模塊組成。函數的調用是關鍵,要區(qū)分形參中值參和引用參數的使用?;竞瘮涤校簃ax(表達式1,…,表達式n)、min(表達式1,…,表達式n)、abs(表達式)、exit(表達式)。(3)運算符重載。在數據結構中經常要用的是在自定義的結構類型上對關系運算符進行重載,使得記錄同記錄之間、記錄同其中一個域類型的數據之間也能進行比較。(4)類。當開發(fā)者的應用程序需定義自己的數據類型時,要使用C++中的類。(5)抽象類型和模板。用于實現軟件的復用,提高利用率。(6)基本語句有:賦值語句、選擇語句、循環(huán)語句、結束語句、輸入/出語句、注釋語句等,一定要徹底理解、熟練掌握這些語句。通過C++的學習,應該建立起良好的程序設計思想。
計算機解決實際應用問題及算法分析,涉及到很多數學知識。例如:集合、階乘函數、排列、組合、對數、級數求和、遞歸,反證法、數學歸納法等數學證明方法,要對這些基本知識加以熟悉。
二、數據結構課程體系的歸納
數據結構討論的范疇:數據成員以及它們相互之間的邏輯關系,也稱為數據的邏輯結構,簡稱為數據結構;數據成員極其關系在計算機存儲器內的存儲表示,也稱為數據的物理結構,簡稱為存儲結構;施加于該數據結構上的操作,ADT抽象數據類型描述。
教材的主體可以總結為:基本概念、三類數據結構,兩種存儲結構、兩種算法。三類數據結構有:線性(線性表、棧和隊列、串、數組和廣義表)、樹(樹和二叉樹)、圖等。兩種存儲結構有:順序結構和鏈接結構。兩種算法為:查找、排序。抽象數據類型(Abstract Data Type,縮寫為ADT)是整個教材的核心。
抽象數據類型(Abstract Data Type,縮寫為ADT)包括數據結構的定義、表示、操作實現三部分。定義如下:
ADT
Data:
Operation:
end()
數據結構常見的操作有:插入、刪除、檢索、遍歷、排序等。每一種數據結構可有多種不同的存儲方法。在不同的存儲結構下,同一操作有不同的時間、空間復雜度。例如:線性表既可以用一維數組順序存儲,也可用指針結構鏈式存儲。向線性表中插入、刪除一個數據元素,順序存儲下,需平均移動表中一半元素,而鏈式存儲下,僅需修改指針而不需移動元素。所以,要根據實際應用問題的操作,選用合適的存儲結構,以提高執(zhí)行效率。
三、總結章節(jié)特點,指導數據結構的學習
針對每章不同特點,總結學習方法及重點。如對線性表、樹、圖三種數據結構均按照“邏輯結構定義、特點、ADT描述;線性存儲結構及ADT實現、算法復雜度分析;鏈式存儲結構及ADT實現、算法復雜度分析;典型應用案例分析”模式進行講解,也就是說,只要按此主線掌握了數據結構的內容,就達到了學習目的。
對查找方法從概念、算法思想、查找過程、算法實現等方面去掌握,從查找速度、占用存儲空間多少、算法本身復雜程度、平均查找長度ASL(Average Search Length)等方面去評價分析各種方法,總結各自的適用條件。
對排序方法從概念、算法思想、排序過程、算法實現等方面去掌握,從排序所花費的全部比較次數、移動記錄次數、占內存輔助空間的大小等分析時空復雜度,最后要考慮算法的穩(wěn)定性,總結各自的優(yōu)缺點及適用范圍。
四、算法的學習
算法設計技能是學好數據結構的關鍵,根據學生學習的認知特點,主要從以下幾個方面進行強化訓練:
1 吃透課本例子。每學完一次新課,讓學生對課本例子先分析任務、再自己編寫算法與課本對照,找出不足,然后改進。如此反復練習,不僅能夠培養(yǎng)學生動腦思考的習慣,而且還會養(yǎng)成遇事三思、認真、周密的作風。
2 精選上機題目,要求調試通過。每章找出一個綜合性的應用題目,如怎樣設計旅游線路,使得費用最少或路程最短;課程計劃的編排等,要求用C++語言編寫可執(zhí)行的源程序,上機調試。這樣不僅能夠鍛煉學生解決實際問題的能力,更重要的是能夠激發(fā)學生學習課程的興趣,抽象變具體,理論變實踐,對這門課有更深的認識。
3 閱讀填空法。找一些經典算法,配上必要的說明,適當去掉語句或表達式,讓學生通過閱讀填補空白,訓練學生的程序設計能力。
4 準備一個經驗本,記下自己出錯的解決方法及老師講解的其他同學出現的常見錯誤,抽空常翻看,逐步積累經驗,使以后避免。
5 強化和本課程密切相關的結構體、指針和函數等知識點的再學習及上機訓練。
6 加強算法閱讀訓練,模擬執(zhí)行過程。通過大量的閱讀分析和模仿,吸取算法精華,提高編程能力。如對教材中的類C語言算法改寫程序,上機通過,掌握基本技能,鞏固課堂教學的內容,加深了對算法的理解。
7 掌握算法設計的步驟。①明確算法要解決的問題目標。②選擇合適的數據結構,確定在所選的數據結構上必須有的操作,寫出抽象的算法,然后存儲結構。③分解每個操作的實現步驟,用c++語言對應地寫出實現程序。
有些學生經過學習之后,雖然能看懂教材上的算法,但當自己動手設計算法解決實際問題時仍感到無從下手。解決這一問題除了掌握必要的方法之外,必須通過多練習多動手,培養(yǎng)自己的程序設計經驗和素質來解決。因此,要求學生必須認真對待算法設計型的習題,通過多做這類習題來理解、消化和鞏固所學的知識,提高分析問題、解決問題的能力以及編程能力。
篇7
【關鍵詞】數據結構;算法;軟件設計
1.經典算法的選擇
選擇經典算法的重要性,PASCAL語言的創(chuàng)始人、著名的計算機科學家N.沃思說得好“程序=數據結構+算法”,足以見得算法在程序設計中的重要地位。在合理的數據結構基礎上,算法是對數據結構的操作(運算),是數據處理的核心。在《數據結構》中介紹的基本數據結構有線性表、堆棧、隊列、數組、樹、二叉樹、圖以及相應的算法。一個算法是建立在某種數據結構的基礎上,一個算法不可能脫離數據結構而孤立存在。只有通過學習算法,才能真正掌握某種數據結構??梢哉f學習《數據結構》的過程基本上是學習各種算法的過程。在眾多的算法中有簡單的、有復雜的、有容易的、有難度大的,在有限的學時情況下,不可能也沒有必要逐一講解每一個算法。大多數的算法,要靠學生自己理解消化。在這種情況下,如何選擇少量的經典算法進行分析講解,顯得尤其重要。一個經典算法往往能起到以一當十、以點帶面的關鍵作用。通過經典算法的分析,一方面讓學生加深對數據結構基本理論的理解另一方面讓學生學習程序設計方法。
選擇好經典算法后下一步就是要對其展開綜合分析,下面以具體的算法為例進行討論。
2.利用經典算法說明基本原理
2.1 經典算法應能體現某個數據結構的基本特征
我們知道線性表順序存儲時其優(yōu)點是能夠對每個數據元素隨機訪問,存儲密度高,其缺點是插入、刪除操作時需要移動大量的數據元素,操作效率低?!跋蛴行颍ㄓ尚〉酱蠡蛴纱蟮叫。┑木€性表(順序存儲)插入一個新的數據元素”,這一經典算法集中反映了線性表順序存儲的這些特點。
分析:將一個值為X的數據元素插入到有序(由小到大或由大到?。┑木€性表(順序存儲)中,可以分兩步進行,首先查找到值為X的數據元素在線性表中應有的位置,采用從頭到尾循環(huán)比較的方法確定其位置I,然后,將第I個以后的全部數據元素向后移動一個存儲單元,最后將值為X的數據元素存放到第I個位置上,線性表元素個數增1。
【算法1】
PROCEDURE INSERT(V,m,n,X)
//將值為X的數據元素插入到V數組中,(線性表順序存貯在V中)m為最多元素個數,n為當前實際元素個數
IF (m=n) THEN{“OVERFLOW”; RETURN}
FOR I=1 TO n DO
IF (X〈V(I))THEN BREAK
FOR J=n TO I BY -1 DO V(J+1)=V(J)
V(I)=X
n=n+1
RETURN
分析:【算法1】的優(yōu)點是簡單,便于理解,缺點是:
①循環(huán)體內有提前退出語句,不利于結構化程序設計;
②確定新數據元素位置和移動數據元素分兩步進行,有重復操作,可以改進之,將兩步合并一步完成,即將循環(huán)比較與移動數據元素同時進行。從線性表的尾部開始向前循環(huán)比較,比新數據元素大者后移,直到小于等于時停止。
【算法2】
PROCEDURE INSERT(V,m,n,X)
IF(m=n)THEN{“OVERFLOW”;RETURN}
I=n
WHILE (I〉=1)AND (V(I)〉X)DO {V(I+1)=V(I);I=I-1}
V(I+1)=X
n=n+1
RETURN
分析:注意【算法2】中循環(huán)條件,當循環(huán)結束后I=0或V(I)〈=X,新數據元素的位置為I+1,【算法1】的時間復雜度為0(2n),而【算法2】的時間復雜度為0(n),效率提高一倍。循環(huán)結構是結構化程序設計中最基本最核心的部分,歸納循環(huán)條件是關鍵?!舅惴?】能進一步推廣。
2.2 利用經典算法學習算法設計
經典算法能給學習者以啟示、示范作用。
分析:可以將【算法2】用于對線性表(順序存儲)排序算法中。在直接插入排序算法中,其算法思想是從第2個數據元素開始直到第n個數據元素,逐一插入到已有序的子線性表中。
【算法3】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
{ Y=V(I)
J=I-1
WHILE (J〉=1) AND (V(J)〉Y) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y }
RETURN
分析:【算示3】其結構分為雙重循環(huán),外循環(huán)完成逐一取數據元素,即取第I個數據元素,內循環(huán)完成將第I個數據元素插入到前I-1個已有序的子線性表中。內循環(huán)完成的功能可以獨立成為一個子函數(子過程),可以借用【算法2】。這正是結構化程序設計思想的體現,即主程序完成任務的劃分,說明“做什么”,子函數(子過程)完成任務的具體實現,說明“如何做”。結構化程序設計方法采取“分解”的手段來控制系統的復雜性,將大系統劃分為若干個相對獨立的、功能單一的子模塊。一方面子函數(子過程)可以實現軟件的重用性,在不同的程序段有相同的處理過程時調用子函數(子過程),減少軟件開發(fā)的工作量;另一方面子函數(子過程)對具體的實現技術細節(jié)進行隱藏,便于開發(fā)人員集中精力把握軟件開發(fā)的核心和主要問題,降低了軟件開發(fā)難度,從而保證軟件質量。在利用【算法2】時要稍加修改,見【算法4】。
【算法4】
PROCEDURE INSERT(V,I,X)
//將值為X的數據元素插入到已有序的前I-1個數據元素中
J=I-1
Y=X
WHILE (J〉=1) AND (V(J)〉X) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y
RETURN
相應的主程序也要作修改,見【算法5】
【算法5】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
INSERT(V,I,V(I))
RETURN
3.結束語
在眾多的算法中選擇好少量的經典算法對于教好、學好《數據結構》至關重要;經典算法要有助于學生理解對應的數據結構,經典算法的分析要側重于程序設計能力的提高。
參考文獻
[1]歐建圣.數據結構教學研究――經典算法的綜合分析[J].武漢工程職業(yè)技術學院學報,2004,16(1):58-60.
篇8
關鍵詞邏輯結構存儲結構操作運算橫向聯系縱向聯系
1引言
數據結構作為計算機核心學科,其主要研究內容:邏輯結構,物理存儲結構,操作(或算法)[1]。通常,算法的設計取決于數據的邏輯結構,算法的實現取決于數據的物理存儲結構。
根據數據元素之間不同特性,把數據結構劃分四種基本結構:(1)集合,(2)線型結構,(3)樹型結構,(4)圖狀結構或網狀結構。針對每種數據結構均從邏輯結構、存儲結構和操作運算等方面進行研究,是貫穿數據結構研究始終的“紅線”,也是數據結構研究的共同切入點,稱之為數據結構的“橫向聯系”。從集合、線型結構等基本數據結構入手,以實現樹形結構、圖或網狀結構等較復雜結構研究,實現數據元素間的關系從簡單到復雜探討,稱之為“縱向聯系”。
2邏輯結構、存儲結構、操作運算的思想模式——數據結構間的橫向聯系
邏輯結構的定義、存儲結構的實現、操作運算的實現是對數據結構研究的基本思想,一種數據結構的研究首先對這三方面內容有一個清晰的探討。
集合數據結構與數學中集合概念是一致的,其邏輯結構元素間只是同屬關系。存儲結構實現只是在計算機內存儲,它的操作就是一些交、差、并、補等。
線型結構是N個數據元素的有限序列,至于每一個數據元素的具體的含義在不同的情況下各不相同,其長度可根據需要增長或縮短,其邏輯結構就是它的數據元素間的線形關系,即一個對一個,一個元素最多有一個前驅,最多有一個后繼。它的存儲結構的實現一般有順序存儲和鏈式存儲兩種方法。順序表是指用一組地址連續(xù)的存儲單元依次存儲線性結構中的數據元素,這是一種隨機存取的存儲結構;鏈式存儲是數據元素之間的邏輯關系由結點中的指針來表示并且每一個結點有且只有一個指針域。線性結構的操作中,最基本的操作是在線性結構中插入、刪除數據元素。存儲結構為順序存儲有線性順序表、數組、串等。存儲結構為鏈式存儲結構時有鏈表等。根據線性表的操作的不同便產生了兩種重要的數據結構即棧和隊列,這兩種數據結構是線性結構的典型例子[2]。
樹型結構是一種重要的非線性結構,其中的樹和二叉樹最為常用。直觀看來,樹是以分支關系定義的層次結構,其邏輯結構是一對多的關系,而在二叉樹中是一個根結點對應左右兩個孩子的層次關系。存儲結構的實現當采取順序存儲時用一組地址連續(xù)的存儲單元依上而下、自左向右存儲樹中的結點元素。在鏈式存儲結構中可采用二叉鏈表表示法即鏈表中結點的兩個鏈域分別指向該結點的第一個孩子和下一個兄弟結點,樹形結構的最基本的操作是遍歷,其它復雜的操作大部分就是遍歷操作的衍生與擴展。在樹型結構中最有特色的一種數據結構就是二叉樹,其獨特的邏輯結構是每個結點至多有二棵子樹并且還有左右之分,這就決定著它獨特的鏈式存儲結構,每個數據元素有且只有兩個指針分別指向該結點的左右孩子。二叉樹的最基本的操作是遍歷二叉樹,對每個結點的訪問是對其它復雜操作的基礎,例如統計結點個數、統計葉子結點數、交換二叉樹的左右孩子等一些復雜的操作運算均是遍歷二叉樹操作的擴展和衍生。基于二叉樹的遞歸定義可得到遍歷二叉樹遞歸算法,前序遍歷、中序遍歷、后序遍歷二叉樹。
圖狀結構是一種較線型結構和樹更復雜的數據結構,圖的邏輯結構是多對多的關系即在圖形結構中結點之間的關系是任意的。因此在存儲結構中無法以數據元素在存儲區(qū)中的物理位置來表示數據元素間的關系。即圖沒有順序映象但可以借助數組的數據類型表示元素之間的關系,用兩個數組分別存儲數據元素(頂點)的信息和數據元素之間的關系信息[3]。另一方面圖的存儲結構也可由多重鏈表實現,即一個由一個數據域和多個指針域組成的結點來表示圖中的一個頂點,其中數據域存儲該頂點的信息,指針域存儲指向鄰接點的指針,但由于圖中各個結點的度各不相同,結點的指針域設定不易確定,則圖的鏈式存儲結構可用鄰接多重表表示法,對圖中每個頂點建立一個單鏈表,第一個單鏈表的結點表示依附于頂點V的邊,每個結點由三個域組成其中鄰接點域指示頂點V的鄰接點在圖中的位置,鏈域指示下一條邊或弧的結點,數據域存儲和邊或弧相關的信息,如權值等。每個鏈表附有一個表頭結點。在表頭結點中除了設有鏈域指向鏈表中第一個結點外還設有存儲頂點的名或其它有關信息的數據域,這樣實現了圖的鏈式存儲。遍歷是最基本的操作也是最重要的操作運算,它是求解圖的連通性、拓撲排序和求關鍵路徑的基礎,然而圖的遍歷比樹的遍歷復雜的多,因為圖的任一頂點都有可能和其余的頂點相鄰接。所以在訪問某個頂點之后可能沿著某條路徑搜索之后又回到該頂點上。因此要設有一個輔助數組V[0..n-1],它的初始值置為假,一旦訪問頂點Vi,便置V[i]為真,這樣避免了同一個頂點被訪問多次,對圖的遍歷有深度優(yōu)先搜索和廣度優(yōu)先搜索。圖的深度優(yōu)先搜索遍歷類似樹的先根遍歷,是樹的先根遍歷的推廣。廣度優(yōu)先搜索類似樹的按層次遍歷的過程。圖狀結構中復雜的操作大部分都是以圖的遍歷為基礎。
因此無論對于線型結構、樹性結構、網狀或圖,它們都遵循著邏輯結構的定義、存儲結構的實現、操作運算方法的實現模式來實現每種數據結構的類型。在數據結構研究中對每種數據結構的研究只有對它的這三個方面內容的研究,才能對它進行探索、掌握、改進。這是數據結構研究中的基本思想。在數據結構研究中當前面向各專門領域特殊問題的多維數據結構和從抽象數據類型的觀點來討論數據結構,都不能背離這個思想。
3由棧和隊列實現樹、圖的遍歷——縱向聯系
遍歷操作對樹、圖結構是很基礎、很重要的運算,它是實現一個數據結構的核心部分,雖然根據樹、圖的遞歸定義能設計出樹、圖的遍歷的遞歸算法,但從線型結構到樹、圖的發(fā)展也是數據結構從簡單到復雜的逐步發(fā)展過程。線型結構中棧和隊列是兩個非常重要的數據結構,對于樹、圖的遍歷可用棧和隊列來實現。對樹、圖復雜的數據結構,可通過棧和隊列的操作來實現復雜數據結構的操作,體現了數據結構間的“縱向聯系”。
用棧實現二叉樹的前序遍歷算法:
Statuspreorder(bitreet)
{P=t;
Initstack(s);
Push(s,p);
While(!stackempty(s)){
pop(s,p)
while(p){
visit(p);
push(s,prchild);
p=p-lchild;}
}}
用棧實現二叉樹的中序遍歷算法:
Statusinorder(bitreet)
{p=t;
Initstack(s);
Push(s,p);
P=Plchild;
while(!stackempty){
while(p){
push(s,p);
p=p-lchild;}
pop(s,p);
visist(p);
p=prchild;}}
用棧來實現二叉樹的后序遍歷算法:
Statuspostorder(bitreet){
P=t;
inistack(s);
While(p||!stackempty(s)){
If(p){
push(s,p);
P=plchild;}
ElseIf(!stackempty(s)){
pre=null;
Gettop(s,p);
While(prchild==pre){pop(s,p);
Visit(p);
Pre=p;
Gettop(s,p);}
P=prchild;}
}}}
用隊列實現二叉樹層次遍歷算法:
VoidLayers(bitreet){
if(t){
p=t;
Initqueue(q);
Enqueue(q,t);
while(!empty(q)){
p=Dlqueue(q);
visit(p);
if(Plchild)Enqueue(q,plchild);
if(prchild)Enqueue(q,prchild);}
}
用隊列實現圖的廣度優(yōu)先搜索算法:
VoidBfs(Graphg,intv){
Visit(v);
Visited[v]=true;
Enqueue(q,v);
While(!emptyqueue(q)){
Dlqueue(g,vex);
For(w=firstadjvex(g,vex),w,w=nextadjvex(g,vex,w)){
If(!visited[w]){visit(w);
Visited[w]=true;
Enqueue(q,w);}}
}}
VoidDfs(Graphg,intv){
Visit(v);
Visited[v]=true;
Push(s,v);
While(!emptystack(s)){V=gettop(s);
For(w=fistadjvex(g,v);w&&!visited[w];w=nextadjvex(g,v,w))
If(!w)pop(s)
Else{visit(w);
Visited[w]=true;
Push(s,w);}}
因為二叉樹、圖的其它的操作大部分是對遍歷基本操作的拓展或綜合應用,靈活運用棧和隊列可實現,并且算法描述比較直觀。線性結構是數據結構學科的基礎,樹、圖的發(fā)展在線性結構的基礎上而發(fā)展,因樹、圖發(fā)展促進著線性結構中和一些算法的完善和改進,線型結構、樹型結構、圖狀結構是緊密相聯的。
4抽象數據類型的研究
數據結構間縱橫聯系明顯且緊密。運用與把握這種“縱橫聯系”,對從抽象數據類型的角度來進行數據結構的學習與研究有著重要的借鑒意義。
抽象數據類型(ADT)的研究越來越被人所重視[4-8],它可理解為數據類型的進一步抽象。即把數據類型和數據類型上的運算捆在一起,進行封裝。引入抽象數據類型的目的是把數據類型的表示和數據類型上運算的實現與這些數據類型和運算在程序中的引用隔開,使它們相互獨立。對于抽象數據類型的描述,除了必須描述它的數據結構外,還必須描述定義在它上面的運算(過程或函數)。抽象數據類型上定義的過程和函數以該抽象數據類型的數據所應具有的數據結構為基礎。它仍遵循邏輯結構、存儲結構、操作運算的數據結構基本思想,所有的抽象數據類型都可有簡單的分類策略獲得,這個策略就是抽象數據類型對象像什么和對它們做些什么。邏輯結構定義、存儲結構表示、操作的實現在抽象類型中它們被稱為數據類型說明、抽象數據類型的表示和抽象數據類型的實現[3]。抽象數據類型具體的表示和實現依賴所采用的語言,用戶可以用某高級語言的固有數據類型和自定義類型并借助于過程和函數來表示和實現抽象數據類型。
5結論
邏輯結構、存儲結構、操作運算等核心方面是貫穿數據結構研究與發(fā)展的一條基本線,也是數據結構研究中所看到數據結構間的“橫向聯系”。應用基本數據結來實現復雜數據結構的方法與途徑,這是對數據元素之間關系從簡單到復雜的探討,即為“縱向聯系”。數據結構聯系是對數據結構的整體把握,體現在這種“橫向聯系”和“縱向聯系”之中。靈活運用與把握這種數據結構間的關系,對抽象數據結構類型的研究有重要的借鑒意義,同時對數據結構的實際教學過程有著一定的指導意義。
參考文獻
[1]陸松年.數據結構教程[M].北京:科學出版社.2002年
[2]嚴蔚敏.數據結構(C語言版)[M].北京:清華大學出版社.1997年
[3]帥訓波.數據結構間普遍整體聯系[D].曲阜:曲阜師范大學計算機科學學院.2003年
[4]藍雯飛.數據結構的面向對象描述方法研究[J].計算機工程與應用,2006;42(26):79-80
[5]劉毅.關于Treap數據結構問題的研究[J].計算機應用與軟件,2005;22(8):36-38
[6]胡澤明,岳瑞生,王志剛.嵌入式GIS線要素無縫拼接的數據結及實現算法[J].測繪科學,2006;31(5):102-103
篇9
關鍵詞:數據結構;教學效果;存在問題;改革總結
一、課程的重要性
《數據結構》課程是計算機專業(yè)中一門重要的專業(yè)基礎必修課,它為操作系統、數據庫原理、編譯原理、單片機原理等后續(xù)專業(yè)課程的學習奠定了基礎。其次,數據結構課程是計算機相關專業(yè)的考研專業(yè)課之一。該課程的重要性顯而易見。
二、教學中存在的問題
《數據結構》課程的教學目標是全面系統地介紹數據的邏輯結構、存儲結構和算法實現,并介紹常用的非數值計算方法,如數據插入、刪除、排序、查找檢索等,使學生掌握各種數據結構的特點和算法思想,并能結合具體應用,運用各種數據結構和算法解決實際問題。但大部分高校《數據結構》課程的教學效果都不盡如人意,影響課程學致有如下原因:
1.程序設計課程掌握較差,基礎薄弱。
2.實踐機會少,動手能力差。
3.缺乏課外輔導,學生自學時障礙重重。
三、解決方法
鑒于以上幾點,可以從這幾方面進行教學改革:
1.加大對先行課程的重視程度。首先加大C程序設計課程的課時。C程序設計課程是數據結構課程的直接先行課,因此,學好C語言,為后續(xù)若干課程的學習打好堅實的基礎。另外,增加數學及線性代數課程的課時。學習算法離不開數學的思想,學習數組的存儲結構也離不開線性代數的應用。最后,增加了32課時的C程序設計課程設計。
2.實際操作方面,計算機專業(yè)要求有很高的實際操作技能,而我們的學生在長期被動的學習過程中卻養(yǎng)成了勤于動腦,懶于動手的學習特點,這樣教出的學生卻是不能滿足實際工作要求的。因此,數據結構的實驗教學要緊密配合理論教學,通過相關實驗與課程設計,幫助和加深對數據結構的整體理解,所以在本課程結束前安排兩周實踐進行課程設計,不要求實現過多的項目,但每個學生都要動手去做,親身經歷從需求分析到算法分析,最后的代碼編寫與調試這樣的過程,從而更深刻的理解數據結構的邏輯結構、存儲結構以及在某種具體的存儲結構下的運算及其實現方法。
3.構建《數據結構》網絡視頻課程,加強師生互動環(huán)節(jié)。為了彌補課外輔導的缺陷,制作與《數據結構》課程內容相適應的視頻,尤其是該課程中典型的算法及其實現過程,學生在課外學習時遇到問題可隨時登錄校園網觀看視頻,進行查漏補缺,達到鞏固知識的效果。另外,在網站上可以設置在線答疑或留言功能,從而實現師生互動。
四、改革成果
根據以上改革方法,經過實施,數據結構課程教學效果頗見成效,簡單做以總結:
1.加大C語言程序設計課程的課時,教師能夠在足夠的課堂時間將課程內容系統化的進行講解,尤其是數組、指針、結構體等重要知識。從而給數據結構課程的學習打下了夯實的基礎。
2.網絡視頻的構建,給學生提供了更為豐富的學習參考資料。學生在課外復習時遇到不理解的算法,隨時登錄校園網觀看視頻,好像再一次回到了課堂,從而解決了疑難問題。另外,校園網上開通了該課程的在線答疑功能,學生可以通過在線答疑功能隨時和任課教師進行溝通。
3.加強數據結構課內實踐與課程設計的實施,學生可以將課堂上的理論知識應用于實踐中。尤其是課程設計的開設,如:簡單文本編輯器的設計與實現、科學計算器的設計與實現等,通過案例讓學生真正體會到數據結構課程的實用性,并從本質上理解該課程的內容。
五、結束語
《數據結構》不僅是計算機科學與技術專業(yè)的專業(yè)基礎課,也是大多數院校研究生入學考試的專業(yè)必考課,因此,《數據結構》課程教學的討論將會持續(xù)下去,最終能找到一條行之有效的教學方法。以上是作者結合自己多年教學經驗和體會,提出的若干改革方法,不足之處會繼續(xù)探討研究。
參考文獻:
[1]李春葆.數據結構(C語言)[M].北京:清華大學出版社,2013
[2]嚴蔚敏.數據結構(C語言)[M].北京:清華大學出版社,2011
篇10
關鍵詞: 編程能力; 教學方法; 算法; 程序設計; 實踐
中圖分類號:TP3-0 文獻標識碼:B 文章編號:1006-8228(2013)08-61-02
0 引言
數據結構是計算機專業(yè)及計算機相關專業(yè)的一門實踐性較強的軟件基礎課,它內容繁多,涉及面廣,主要研究如何把具有一定邏輯關系的數據在計算機中存儲,它是對數據進行操作的有關算法研究的一門學科[1],它以程序設計為基礎,對學生進行較復雜程序設計的訓練,課程以提高學生的編程能力培養(yǎng)為主要目標。本文對數據結構的教學方法和實踐環(huán)節(jié)進行探討。
1 注重教學方法,提高學生的認識能力
在數據結構課程教學中為了提高學生的編程能力,應注重課堂的教學方法,使學生能更好地掌握課程內容,理解前人設計的算法,為此我們研究了數據結構的教學方法。現代教學論中,人們把教學方法歸為兩大類:一類是程序式教學法,其特點是課堂以教師為中心,有計劃有步驟地教給學生教學大綱上規(guī)定的知識;另一類是發(fā)現式教學法,這種教學法的基本目的不再局限于把前人整理好的知識傳授給學生,而是引導、鼓勵學生盡可能參與探索知識的過程,其側重點在于使學生領悟和掌握形成知識的過程和獲取知識的方法。
在教學過程中,我們將這兩種方法相結合,在講解數據結構理論基礎知識時主要采用程序式教學法,始終抓住什么是“數據結構”這根主線,按照數據結構的邏輯結構、存儲結構、運算和運算的實現這四步逐層展開討論,做到教學思路清晰、邏輯性強,引導學生理解程序的運行原理和過程,并且對于不同層次的學生具體采用不同的方法。在講解數據結構算法的實現時,我們發(fā)現有些班的學生對編程普遍懷有恐懼感,針對這種情況教師與學生一起按常人的邏輯思維方式考慮解決問題的方法,歸納出解決問題的方法和步驟,按方法和步驟與學生一起一步一步地寫出程序,然后回過去重讀一遍程序,并將不夠理想的地方加以改進,使學生知道原來教師考慮問題的思路和自己的思路基本是一樣的,這樣引導學生編程的過程可使學生獲益匪淺,再經過大量地由淺入深地訓練后,學生消除了恐懼感,增強了信心,對編程逐漸也產生了興趣。
數據結構中的內容很豐富,為使學生更好地掌握,我們將教學重點放在使用廣泛的數據結構上,精講最基本的概念與方法,并在這基礎上例舉一些綜合的算法例子,通常借助于發(fā)現式教學法的思想進行教學,提供背景材料,講透算法思想,提出問題,鼓勵學生思考、分析,舉一反三,讓學生自己設計出多種算法。例如,在講解數據結構中的遞歸算法時,由于遞歸算法是數據結構中最難掌握的內容之一,學生一般不能很快接受,因此講解遞歸算法的方法很重要。我們先從學生較易接受的數學函數計算入手,進而引入非數值的遞歸算法,為了使學生了解嵌套調用、層層返回等概念,畫出遞歸運行的狀態(tài)圖和棧的變化圖,告訴學生嵌套調用和返回的含義,概括出“遞歸進入一層,則進棧,遞歸退出一層,則退棧”的方法,使學生一目了然。在掌握了基本遞歸算法及運行過程后,進一步例舉稍難的遞歸算法,使學生從多個方面加深對遞歸算法的理解,這對數據結構后續(xù)內容中的樹、圖、查找和排序算法設計的學習是很有幫助的。
2 注重常用的、經典算法的學習,以激起探索研究的愿望
在數據結構課程教學過程中我們強調基本的編程方法和常用的算法的介紹,并指導學生積累常用算法,積累經典的好算法,例如查找算法、排序算法、遍歷算法和圖操作算法等,這樣使學生在解決復雜問題之前掌握可使用的基本方法,可借鑒好算法的思想來拓展自己的思路。
數據結構中有很多經典的好算法,它們是著名的計算機科學家的成果。我們不僅要學習算法的設計思想,還要學習算法設計的思維方式,以提高學生的邏輯思維能力。以最小生成樹兩種方法為例,①普里姆(Prim)算法以圖中的點為主,通過點朝最小邊權伸張出去的方式來求解,其時間復雜度為O(n2)(n為圖的頂點個數),它與圖中的邊數無關,因此適用于求邊稠密的圖的最小生成樹,但在如何判斷加入一條邊而不形成回路的問題上就遇到了困難;②克魯斯卡爾(Kruskal)求最小生成樹算法以邊為主,容易判斷加入新頂點是否產生回路的問題,其時間復雜度為O(eloge)(e為圖中邊的個數),因此適合求邊稀疏的圖的最小生成樹。求解同一個問題時,不同的算法具備不同的特點,適應不同的范圍,這樣分析討論,可使學生思路暢通,激發(fā)起探研的愿望。再例,數據結構中的排序算法可分類討論,由個別到一般,由具體到抽象形成算法的設計,并進行算法的初步分析,其中有些算法的分析并未得到完整的答案,例如,希爾排序的分析就是一個復雜的問題,因為它的時間復雜度是所取“增量”序列的函數,只是得出一些局部的結論。雖然我們不一定要引導學生去專門鉆研這些難題,但是,提出并分析這些問題至少可以提高學生的學習興趣,形成研究問題的情景,對數據結構中的許多問題留下思考和探索的空間,從中啟發(fā)出今后需要深入研究的問題,這樣有利于對學生能力的培養(yǎng)。
3 加強實驗環(huán)節(jié),以提高學生的編程能力
數據結構是一門理論和實踐性都很強的課程,學習它的主要目的是提高學生的編程能力,而學會編程、提高編程的能力并不是輕而易舉的,要通過長時間的實踐鍛煉,要學生自己多動手去體驗,有些問題只有通過實踐后才能明白,也只有實踐才能把教師和書本上的知識變成自己的。因此我們在教學過程中針對每個環(huán)節(jié)都布置一定數量的上機實踐題目,有基礎題、有綜合題,還有結合實際的綜合應用題。例如基礎題有順序表、鏈表的創(chuàng)建、查找、插入、刪除;棧、隊列的操作;二叉樹的遍歷;圖的存儲實現;查找;排序等。綜合題有一種結構上的綜合操作題如兩個鏈表的合并操作就是查找、插入和刪除基本操作的綜合,還有多種結構上的綜合操作題,如圖的遍歷搜索演示實驗,它可綜合考查學生對字符串、鏈表、棧、隊列、圖的遍歷和遞歸算法等的理解和綜合應用能力,這種實驗題知識點覆蓋了數據結構的絕大部分內容,具有較強的綜合性。我們舉幾個結合實際應用的例題。
例1:用二叉排序樹與單鏈表相結合來實現學生成績管理。
用二叉排序樹存放成績,用鏈表存放學生信息,相同成績的學生連在一個鏈表中并由二叉排序樹相應結點指向,具體鏈表結點形式:
二叉樹結點形式:
程序具有前序、中序、后序遍歷瀏覽所有信息功能、有各信息查詢功能、有統計成績功能、有鏈表結點插入和樹結點插入功能,有鏈表結點刪除和樹結點刪除等功能,對編程基礎好的學生還要求將二叉排序樹改為平衡樹來完成。
例2:用棧解決算術表達式求值演示。根據算符優(yōu)先關系,實現算術四則混合運算表達式的求值,演示在求值中運算符棧、操作數棧、輸入字符和主要操作的變化過程。
例3:用棧隊列進行停車場管理。以棧模擬停車場,以隊列模擬車場外的通道,從輸入的數據序列進行模擬管理。
例4:用圖進行上海導游咨詢。以圖中頂點表示上海各主要景點,存放景點名稱、代號、簡介等,以邊表示路徑,存放路徑長度等相關信息,程序具有為游客提供各景點相關信息的查詢,有查詢任意兩個景點之間的最短路徑等功能。
為了達到預期實驗效果,在做每個實驗時,要求學生上機運行所編程序,教師認真檢查程序運行結果及程序的測試數據,必要時查看學生所編寫的程序,了解他們的編程思想;將編程風格好、解決方案好的程序作為例子給學生講解,鼓勵他們多觀察、分析、比較、積累,遇到問題時多想幾種解決方案;通過分析這些程序,培養(yǎng)學生良好的編程習慣,讓他們明白編程風格的好壞在很大程度上影響程序的質量。良好的編程風格可以使程序結構清晰合理,且使程序代碼便于維護。我們經過這樣大量的上機實踐,使學生的編程能力、上機調試能力得到很大的提高。
4 結束語
本文探討了提高學生編程能力的具體教學措施,這些措施需要結合教學方法靈活地加以運用。我們積累了大量的教學實驗用例,幫助學生開闊視野,增強學習的動力,進而提高學生學習的自覺性,使他們的學習過程走向良性循環(huán)的軌道。我們經過幾年的數據結構教學實踐,學生的編程能力普遍提高,證明了上述教學方法是有效的。
參考文獻:
[1] 嚴蔚敏,吳偉民.數據結構(C語言版)[M].清華大學出版社,2011.
[2] 許自龍.關于《數據結構》的教學實踐和體會[J].信息技術教學與研究,2012.4.
[3] 呂國英.算法設計與分析(第二版)[M].清華大學出版社,2011.
相關期刊
精品范文
10數據安全論文