范文為教學中作為模范的文章,也常常用來指寫作的模板。常常用于文秘寫作的參考,也可以作為演講材料編寫前的參考。那么我們該如何寫一篇較為完美的范文呢?這里我整理了一些優(yōu)秀的范文,希望對大家有所幫助,下面我們就來了解一下吧。
數(shù)據(jù)結(jié)構(gòu)算法設計與分析論文篇一
070401301507計本(3)班張浩
本學期開設的《數(shù)據(jù)結(jié)構(gòu)與算法》課程已經(jīng)告一段落,現(xiàn)就其知識點及其掌握情況、學習體會以及對該門課程的教學建議等方面進行學習總結(jié)。
一、《數(shù)據(jù)結(jié)構(gòu)與算法》知識點
在課本的第一章便交代了該學科的相關概念,如數(shù)據(jù)、數(shù)據(jù)元素、數(shù)據(jù)類型以及數(shù)據(jù)結(jié)構(gòu)的定義。其中,數(shù)據(jù)結(jié)構(gòu)包括邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和運算集合。邏輯結(jié)構(gòu)分為四類:集合型、線性、樹形和圖形結(jié)構(gòu),數(shù)據(jù)元素的存儲結(jié)構(gòu)分為:順序存儲、鏈接存儲、索引存儲和散列存儲四類。緊接著介紹了一些常用的數(shù)據(jù)運算。最后著重介紹算法性能分析,包括算法的時間性能分析以及算法的空間性能分析。
第二章具體地介紹了順序表的概念、基本運算及其應用?;具\算有:初始化表、求表長、排序、元素的查找、插入及刪除等。元素查找方法有:簡單順序查找、二分查找和分塊查找。排序方法有:直接插入排序、希爾排序、冒泡排序、快速排序、直接選擇排序及歸并排序等。最后介紹了順序串的概念,重點在于串的模式匹配。
鏈表中數(shù)據(jù)元素的存儲不一定是連續(xù)的,還可以占用任意的、不連續(xù)的物理存儲區(qū)域。與順序表相比,鏈表的插入、刪除不需要移動元素,給算法的效率帶來較大的提高。鏈表這一章中介紹了鏈表的節(jié)點結(jié)構(gòu)、靜態(tài)與動態(tài)鏈表的概念、鏈表的基本運算(如求表長、插入、查找、刪除等)、單鏈表的建立(頭插法和尾插法)以及雙向循環(huán)鏈表的定義、結(jié)構(gòu)、功能和基本算法。
堆棧與隊列是兩種運算受限制的線性結(jié)構(gòu)。其基本運算方法與順序表和鏈表運算方法基本相同,不同的是堆棧須遵循“先進后出”的規(guī)則,對堆棧的操作只能在棧頂進行;而隊列要遵循“先進先出”的規(guī)則,教材中列出了兩種結(jié)構(gòu)的相應算法,如入棧、出棧、入隊、出隊等。在介紹隊列時,提出了循環(huán)隊列的概念,以避免“假溢出”的現(xiàn)象。
第六章介紹了特殊矩陣和廣義表的概念與應用。其中,特殊矩陣包括對稱矩陣、三角矩陣、對角矩陣和稀疏矩陣,書中分別詳細介紹了它們的存儲結(jié)構(gòu)。稀疏矩陣的應用包括轉(zhuǎn)置和加法運算等。最后介紹了廣義表的相關概念及存儲結(jié)構(gòu),關于它的應用,課本中舉了m元多項式的表示問題。
第七章二叉樹的知識是重點內(nèi)容。在介紹有關概念時,提到了二叉樹的性質(zhì)以及兩種特殊的二叉樹:完全二叉樹和滿二叉樹。接著介紹二叉樹的順序存儲和鏈接存儲以及生成算法。重點介紹二叉樹的遍歷算法(遞歸算法、先序、中序和后序遍歷非遞歸算法)和線索二叉樹。二叉樹的應用:基本算法、哈弗曼樹、二叉排序樹和堆排序。
樹與二叉樹是不同的概念。教材介紹了樹和森林的概念、遍歷和存儲結(jié)構(gòu),還有樹、森林和二叉樹的相互關系,樹或森林怎樣轉(zhuǎn)化成二叉樹,二叉樹又如何轉(zhuǎn)換為樹和森林等算法。散列結(jié)構(gòu)是一種查找效率很高的一種數(shù)據(jù)結(jié)構(gòu)。本章的主要知識點有:散列結(jié)構(gòu)的概念及其存儲結(jié)構(gòu)、散列函數(shù)、兩種沖突處理方法、線性探測散列和鏈地址散列的基本算法以及散列結(jié)構(gòu)的查找性能分析。
最后一章介紹了圖的概念及其應用,是本書的難點。圖的存儲結(jié)構(gòu)的知識點有:鄰接矩陣、鄰接表、逆鄰接表、十字鏈表和鄰接多重表。圖的遍歷包括圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷。其余知識點有:有向圖、連通圖、生成樹和森林、最短路徑問題和有向無環(huán)圖及其應用。有向無環(huán)圖重點理解aov網(wǎng)和拓撲排序及其算法。
二、對各知識點的掌握情況
總體來看,對教材中的知識點理解較為完善,但各個章節(jié)均出現(xiàn)有個別知識點較為陌生的現(xiàn)象?,F(xiàn)將各個章節(jié)出現(xiàn)的知識點理解情況列舉如下。
第一章中我對數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)的概念理解較為透徹,熟悉數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)。而對算法的時間、空間性能分析較為模糊,尤其是空間性能分析需要加強。
第二章,順序表的概念、生成算法理解較為清晰,并且熟悉簡單順序查找和二分查找,對分塊查找較為含糊;排序問題中,由于冒泡排序在大一c語言課上已經(jīng)學習過,再來學習感覺很輕松。對插入排序和選擇排序理解良好,但是,在實際運用中仍然出現(xiàn)明顯不熟練的現(xiàn)象。由于在歸并排序?qū)W習中感覺較吃力,現(xiàn)在對這種排序方法仍然非常模糊,所以需要花較多的時間來補習。此外串的模式匹配也是較難理解的一個地方。
鏈表這一章中,除對雙向循環(huán)鏈表這一知識點理解困難之外,其他的知識點像單鏈表的建立和基本算法等都較為熟悉。
接下來的有關堆棧以及隊列的知識點比較少,除有關算法較為特殊以外,其余算法都是先前學過的順序表和鏈表的知識,加上思想上較為重視,因此這部分內(nèi)容是我對全書掌握最好的一部分。不足之處仍然表現(xiàn)在算法的性能分析上。
在學習第六章時感覺較為吃力的部分在于矩陣的應用上,尤其對矩陣轉(zhuǎn)置算法的c語言描述不太理解。稀疏矩陣相加算法中,用三元組表實現(xiàn)比較容易理解,對十字鏈表進行矩陣相加的方法較為陌生。
第七章是全書的重點,卻也有一些內(nèi)容沒有完全理解。在第一節(jié)基本概念中,二叉樹的性質(zhì)容易懂卻很難記憶。對二叉樹的存儲結(jié)構(gòu)和遍歷算法這部分內(nèi)容掌握較好,能夠熟練運用,而對于二叉樹應用中的哈弗曼樹卻比較陌生。
第八章內(nèi)容較少,牽涉到所學的隊列的有關內(nèi)容,總體來說理解上沒有什么困難,問題依舊出現(xiàn)在算法的性能分析上。
散列結(jié)構(gòu)這一章理解比較完善的知識點有:基本概念和存儲結(jié)構(gòu)。散列函數(shù)中直接定址法和除留余數(shù)法學得比較扎實,對數(shù)字分析法等方法則感覺較為陌生。對兩種沖突處理的算法思想的理解良好,問題在于用c語言描述上。
最后一章,圖及其應用中,圖的定義、基本運算如圖的生成等起初理解有困難,但隨著學習深入,對它的概念也逐步明朗起來。鄰接矩陣、鄰接表和逆鄰接表掌握較好,而對十字鏈表和鄰接多重表則較為陌生。感覺理解較為吃力的內(nèi)容還有圖的遍歷(包括深度和廣度優(yōu)先遍歷),最小生成樹問題也是比較陌生的知識點。最短路徑和aov網(wǎng)學習起來感覺比較輕松,而對于c語言描述卻又不大明白。
三、學習體會
在學習伊始,老師就明確提出它不是一種計算機語言,不會介紹新的關鍵詞,而是通過學習可以設計出良好的算法,高效地組織數(shù)據(jù)。一個程序無論采用何種語言,其基本算法思想不會改變。聯(lián)系到在大一和大二上學期學習的c和c++語言,我深刻認識到了這一點?!败浖_發(fā)好比寫作文,計算機語言提供了許多華麗的辭藻,而數(shù)據(jù)結(jié)構(gòu)則考慮如何將這些辭藻組織成一篇優(yōu)秀的文章來?!痹趯W習這門課中,要熟悉對算法思想的一些描述手段,包括文字描述、圖形描述和計算機語言描述等。因此,計算機語言基礎是必須的,因為它提供了一種重要的算法思想描述手段——機器可識別的描述。
自己的程序中再加以必要的連接以完成程序的編寫。針對這一情況,我會嚴格要求自己,熟練掌握算法思想,盡量獨立完成程序的編寫與修改工作,只有這樣,才能夠提高運用知識,解決問題的能力。
1、建議在上課過程中加大隨堂練習的分量,以便學生能當堂消化課堂上學習的知識,也便于及時了解學生對知識點的掌握情況,同時有助于學生保持良好的精神狀態(tài)。
2、建議在課時允許的情況下,增加習題課的分量,通過課堂的習題講解,加深對知識點的掌握,同時對各知識點的運用有一個更為直觀和具體的認識。
以上便是我對《數(shù)據(jù)結(jié)構(gòu)與算法》這門課的學習總結(jié),我會抓緊時間將沒有吃透的知識點補齊。今后我仍然會繼續(xù)學習,克服學習中遇到的難關,在打牢基礎的前提下向更深入的層面邁進!
數(shù)據(jù)結(jié)構(gòu)算法設計與分析論文篇二
數(shù)據(jù)結(jié)構(gòu)與算法(data structures)
計算機技術已成為現(xiàn)代化發(fā)展的重要支柱和標志,并逐步滲透到人類生活的各個領域。隨著計算機硬件的發(fā)展,對計算機軟件的發(fā)展也提出了越來越高的要求。由于軟件的核心是算法,而算法實際上是對加工數(shù)據(jù)過程的描述,所以研究數(shù)據(jù)結(jié)構(gòu)對提高編程能力和設計高性能的算法是至關重要的。
非數(shù)值計算問題的數(shù)學模型不再是傳統(tǒng)的數(shù)學方程問題,而是諸如表、樹、圖之類的數(shù)據(jù)結(jié)構(gòu)。因此,簡單地說,數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計算的程序設計問題的學科,主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和算法。
一、教學目的與要求---了解數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu);
教學要求在每章教學內(nèi)容給出,大體上為三個層次:了解、掌握和熟練掌握。他們的含義大致為:了解是正確理解概念,掌握是學會所學知識,熟練掌握就是運用所學知識解決實際問題。
教學目的為:了解算法對于程序設計的重要性 ; 學習掌握基本數(shù)據(jù)結(jié)構(gòu)的描述與實現(xiàn)方法,熟練掌握典型數(shù)據(jù)結(jié)構(gòu)及其應用算法的設計。了解算法分析方法。
二、教學重點與難點--數(shù)據(jù)結(jié)構(gòu)中基本概念和術語,算法描述和分析方法。
1、鏈表插入、刪除運算的算法。算法時間復雜度
2、后綴表達式的算法,數(shù)制的換算
利用本章的基本知識設計相關的應用問題
3、循環(huán)隊列的特點及判斷溢出的條件
利用隊列的特點設計相關的應用問題
4、串的模式匹配運算算法
5、二叉樹遍歷算法的設計
利用二叉樹遍歷算法,解決簡單應用問題 哈夫曼樹的算法
6、圖的遍歷
最小生成樹
最短路徑
7、二叉排序樹查找
平衡樹二叉樹
8、堆排序
快速排序 歸并排序
四、教學內(nèi)容、目標與學時分配
教學內(nèi)容 教學目標 課時分配
1、緒論
數(shù)據(jù)結(jié)構(gòu)的內(nèi)容
邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)
算法和算法分析
2、線性表
線性表的定義與運算
線性表的順序存儲
線性表的鏈式存儲
3、棧
棧的定義與運算
棧存儲和實現(xiàn)
棧的應用舉例
4、隊列
隊列的定義與基本運算
隊列的存儲與實現(xiàn)
隊列的應用舉例
5、串
串的定義與基本運算
串的表示與實現(xiàn)
串的基本運算
6、樹和二叉樹
樹的定義和術語
二叉樹樹的基本概念和術語 遍歷二叉數(shù)和線索二叉樹
二叉樹的轉(zhuǎn)換
二叉樹的應用
哈夫曼樹及其應用
7、圖
圖的定義和術語
圖的存儲結(jié)構(gòu)
圖的遍歷算法
圖的連通性
8、查找
查找的基本概念與靜態(tài)查找 動態(tài)查找
哈希表
了解
了解
掌握
熟練掌握順序表存儲地址的計算
掌握棧的定義與運算
掌握棧的存儲與實現(xiàn)
熟練掌握棧的各種實際應用
掌握隊列的定義與基本運算
熟練掌握隊列的存儲與實現(xiàn)
掌握循環(huán)隊列的特征和基本運算
了解串的邏輯結(jié)構(gòu)
掌握串的存儲結(jié)構(gòu)
熟練掌握串的基本運算
了解
了解二叉樹
熟練掌握二叉樹定義和存儲結(jié)構(gòu)
了解二叉樹的遍歷算法
掌握
掌握哈夫曼的建立及編碼
了解
了解
熟練掌握
熟練掌握
了解
熟練掌握
了解哈希表與哈希方法
4學時
1學時
1學時
2學時
8學時
2學時
2學時
4學時
8學時
2學時
2學時
4學時
6學時
2學時
2學時
2學時
6學時
2學時
2學時
2學時
12學時
2學時
2學時
2學時
2學時
2學時
2學時
8學時
2學時
2學時
2學時
2學時
8學時
4學時
2學時
2學時
9、排序
12學時 插入排序
熟練掌握基本思想
3學時 快速排序
了解各種內(nèi)部排序方法和特點
3學時 選擇排序
掌握
2學時 各種排序方法比較
掌握
2學時
實驗內(nèi)容 實驗目標 課時分配 算法編程實驗:
1、用指針方式編寫程序 復習c(c++)語言指針、結(jié)構(gòu)體等的用法
2、對單鏈表進行遍歷
鏈表的描述與操作實現(xiàn)
3、棧及其操作
描述方法及操作
4、編寫串子系統(tǒng)1 串的特點及順序定長存儲、操作、查找
5、編寫串子系統(tǒng) 2 串的特點及順序定長存儲、操作、查找
6、編寫樹子系統(tǒng)1 二叉樹的特點及存儲方式、創(chuàng)建、顯示、遍歷等
7、編寫樹子系統(tǒng)2 二叉樹的特點及存儲方式、創(chuàng)建、顯示、遍歷等
8、圖子系統(tǒng)
圖的鄰接矩陣的存儲、遍歷、廣度/深度優(yōu)先搜索
9、查找子系統(tǒng)
理解查找基本算法、平均查找長度、靜態(tài)、動態(tài)查找等
五、考試范圍與題型
1、考試范圍與分數(shù)比例
1)緒論
12% 2)線性表
17% 3)棧
7% 4)隊列
6% 5)串
4% 6)樹和二叉樹
14% 7)圖
15% 8)查找
4% 9)排序
21%
2、考試題型與分數(shù)比例
1)名詞解釋
18% 2)判斷對錯
16% 3)填空
16% 4)單項選擇
18% 5)應用
32%
六、教材與參考資料
1、教材: 實用數(shù)據(jù)結(jié)構(gòu)基礎(譚浩強)中國鐵道出版社
2、參考資料: 數(shù)據(jù)結(jié)構(gòu)(嚴蔚敏)清華大學出版社
數(shù)據(jù)結(jié)構(gòu)實用教程(徐孝凱)清華大學出版社
(撰寫人:
,審核人: 2學時 2學時 2學時 2學時 2學時 2學時 2學時 2學時 2學時)
數(shù)據(jù)結(jié)構(gòu)算法設計與分析論文篇三
陳康蔭080401200708級計科系計本(2)班
1、程序的編寫中的語法錯誤及修改
因為我在解決二元多項式問題中,使用了鏈表的方式建立的二元多項式,所以程序的空間是動態(tài)的生成的,而且鏈表可以靈活地添加或刪除結(jié)點,所以使得程序得到簡化。但是出現(xiàn)的語法問題主要在于子函數(shù)和變量的定義,降序排序,關鍵字和函數(shù)名稱的書寫,以及一些庫函數(shù)的規(guī)范使用,這些問題均可以根據(jù)編譯器的警告提示,對應的將其解決。
2、程序的設計中的邏輯問題及其調(diào)整
我在設計程序的過程中遇到許多問題,首先在選擇數(shù)據(jù)結(jié)構(gòu)的時候選擇了鏈表,但是鏈表的排序比較困難,特別是在多關鍵字的情況下,在一種關鍵字確定了順序以后,在第一關鍵字相同的時候,按某種順序?qū)Φ诙P鍵字進行排序。在此程序中共涉及到3個量數(shù),即:系數(shù),x的指數(shù)和y的指數(shù),而關鍵字排是按x的指數(shù)和y的指數(shù)來看,由于要求是降冪排序且含有2個關鍵字,所以我先選擇x的指數(shù)作為第一關鍵字,先按x的降序來排序,當x的指數(shù)相同時,再以y為關鍵字,按照y的指數(shù)大小來進行降序排列。
另外,我在加法函數(shù)的編寫過程中也遇到了大量的問題,由于要同時比較多個關鍵字,而且設計中涉及了數(shù)組和鏈表的綜合運用,導致反復修改了很長的時間才完成了一個加法的設計。但是,現(xiàn)在仍然有一個問題存在:若以0為系數(shù)的項是首項則顯示含有此項,但是運算后則自動消除此項,這樣是正確的。但是當其不是首項的時候,加法函數(shù)在顯示的時候有0為系數(shù)的項時,0前邊不顯示符號,當然,這樣也可以理解成當系數(shù)為0時,忽略這一項。這也是本程序中一個不完美的地方。
我在設計減法函數(shù)的時候由于考慮不夠充分就直接編寫程序,走了很多彎路,不得不停下來仔細研究算法,后來發(fā)現(xiàn)由于前邊的加法函數(shù)完全適用于減法,只不過是將二元多項式b的所有項取負再用加法函數(shù)即可,可見算法的重要性不低于程序本身。
3、程序的調(diào)試中的經(jīng)驗及體會
我在調(diào)試過程中,發(fā)生了許多小細節(jié)上的問題,它們提醒了自己在以后編程的時候要注意細節(jié),即使是一個括號的遺漏或者一個字符的誤寫都會造成大量的錯誤,浪費許多時間去尋找并修改,總結(jié)的教訓就是寫程序的時候,一定要仔細、認真、專注。
我還有一個很深的體會就是格式和注釋,由于平時不注意格式和注釋這方面的要求,導致有的時候在檢查和調(diào)試的時候很不方便。有的時候甚至剛剛完成一部分的編輯,結(jié)果一不注意,就忘記了這一部分程序的功能。修改的時候也有不小心誤刪的情況出現(xiàn)。如果注意格式風格,并且養(yǎng)成隨手加注釋的習慣,就能減少這些不必要的反復和波折。還有一點,就是在修改的時候,要注意修改前后的不同點在哪里,改后調(diào)試結(jié)果要在原有的基礎上更加精確。
數(shù)據(jù)結(jié)構(gòu)算法設計與分析論文篇四
《數(shù)據(jù)結(jié)構(gòu)與算法》課程設計教學大綱(data structures & algorithms)
一、基本信息
二、教學目的
數(shù)據(jù)結(jié)構(gòu)與算法課程設計不僅是數(shù)據(jù)結(jié)構(gòu)與算法課程的實踐教學環(huán)節(jié),而且是一門綜合性實驗項目。通過這個實驗,培養(yǎng)學生綜合運用數(shù)據(jù)結(jié)構(gòu)基本知識和程序設計基本知識,解決實際問題,提高程序設計的能力和團隊協(xié)作精神。
本課程設計的目的就是要達到理論與實際應用相結(jié)合,使同學們能夠根據(jù)數(shù)據(jù)對象的特性,學會數(shù)據(jù)組織的方法,能把現(xiàn)實世界中的實際問題在計算機內(nèi)部表示出來,并培養(yǎng)基本的、良好的程序設計技能。
1.學生通過實踐掌握線性表、樹、圖等數(shù)據(jù)結(jié)構(gòu)的存儲結(jié)構(gòu)及算法實現(xiàn); 2.培養(yǎng)學生利用數(shù)據(jù)結(jié)構(gòu)知識解決實際問題的能力;3.使學生初步具備查閱資料、分析設計、上機實現(xiàn)和書寫科技 報告的能力。
三、基本要求
1.指導教師要在選題、設計、上機實現(xiàn)等諸環(huán)節(jié)上投入精力,加強指導、討論和答疑的力度。尤其在選題上,要充分考慮學生目前所具有的知識水平、掌握的開發(fā)工具、以及綜合設計能力的現(xiàn)狀,使題目取材合理、大小適中、難易適度,使學生在完成設計工作后,能有所收獲。2.參加課程設計的學生要珍惜機會、勤奮工作、勇于創(chuàng)新、勇于探索、勇于實踐,虛心向指導教師請教,向同學學習,獨立完成設計任務。
3.學生需保質(zhì)、保量、保時間進度地提交規(guī)范的課程設計報告,審查由指導教師負責。
四、教學內(nèi)容
1.主要內(nèi)容:應用所掌握的線性表、樹、圖等數(shù)據(jù)結(jié)構(gòu)知識解決實際問題。2.軟件開發(fā)工具:c/c++、java。
3.課程設計題目:指導教師擬定(參考題目見附錄1)
4.具體步驟:指導教師擬定設計題目,學生研究具體問題、進行需求分析、選擇合適的數(shù)據(jù)結(jié)構(gòu)、設計算法、編寫并調(diào)試代碼、書寫文檔材料、提交設計報告,最后,由指導教師驗收并評定成績。
5.設計內(nèi)容及時間安排:第1-3天,選定題目,明確題目要求、確定數(shù)據(jù)結(jié)構(gòu)、設計算法,并分析算法復雜度;第4-8天,編寫程序、調(diào)試程序、測試程序;第9-10天,撰寫設計報告,準備答辯(上機演示,回答教師提問)。6.設計報告書寫要求:按照軟件開發(fā)規(guī)范的要求書寫設計報告(參見附錄三報告書寫格式);要求報告層次結(jié)構(gòu)清晰、圖表完整、語言通順、字跡工整。7.驗收要求:1)運行所設計的程序;2)回答有關問題;3)提交課程設計報告(打印或手寫在實習報告冊上);4)提交軟盤(源程序)。(鼓勵學生創(chuàng)新。對內(nèi)容有創(chuàng)新者,成績評定將適當提高)。
五、考核方法
學習成績的評定方式:考查。
課程設計成績評定 =平時出勤(20%)+設計報告(40%)+答辯(40%)通過設計答辯方式,并結(jié)合學生的動手能力,獨立分析解決問題的能力和創(chuàng)新精神,總結(jié)報告和答辯水平以及學習態(tài)度綜合考評。成績分為優(yōu)、良、中、及格和不及格五等。
六、教材與參考資料 1.建議教材:
2.建議參考書目:
附錄一
參考題目(可分若干組,每個學生選擇其中一個題目)
1.商廈家電庫存管理 2.排序算法的時間比較
19.計算機輔助考核系統(tǒng) 20.學籍管理系統(tǒng)
注:學生可以自選題目或選擇指導老師擬定的題目。
附錄二
開發(fā)步驟
1.分析題目的要求、目的; 2.選擇適當?shù)臄?shù)據(jù)結(jié)構(gòu);
3.抽象數(shù)據(jù)類型的設計; 4.抽象數(shù)據(jù)類型的實現(xiàn); 5.編寫代碼、上機調(diào)試; 6.總結(jié)驗收、評價。
附錄三 報告書寫格式
1.問題描述
題目內(nèi)容、基本要求 2.需求分析
軟件的基本功能、輸入/輸出形式、測試數(shù)據(jù)要求 3.概要設計
所需的adt及作用、主程序流程及模塊調(diào)用關系 4.詳細設計
簡要說明程序運行操作步驟 7.測試結(jié)果
8.課程設計心得體會
數(shù)據(jù)結(jié)構(gòu)算法設計與分析論文篇五
談到計算機方面的專業(yè)課程,我覺得數(shù)據(jù)結(jié)構(gòu)算是一門必不可少的課了,它是計算機從業(yè)和研究人員了解、開發(fā)及最大程度的利用計算機硬件的一種工具。數(shù)據(jù)結(jié)構(gòu)與算法分析是兩門緊密聯(lián)系的課程,算法要靠好的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),二者的關系是密不可分的,談到算法不得不講數(shù)據(jù)結(jié)構(gòu),談數(shù)據(jù)結(jié)構(gòu)也不可避免的要了解算法,好的算法一定有一個好的數(shù)據(jù)結(jié)構(gòu),很多算法實際上是對某種數(shù)據(jù)結(jié)構(gòu)實行的一種變換,研究算法也就是研究在實行變換過程中數(shù)據(jù)的動態(tài)性質(zhì)。這兩門課程分別是我在大二和研一的時候?qū)W的,因為它們密切的聯(lián)系,這里將其放在一起總結(jié)如下。
什么是數(shù)據(jù)結(jié)構(gòu)呢?研究數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)(物理結(jié)構(gòu))以及它們之間的關系,且為該結(jié)構(gòu)定義相應的運算設計相應的算法。這里的數(shù)據(jù)是指可輸入到計算機能被程序處理的符號的集合。其中,數(shù)據(jù)的邏輯結(jié)構(gòu)是指數(shù)據(jù)之間邏輯關系的描述,邏輯結(jié)構(gòu)的分類有線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖結(jié)構(gòu)。數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)在計算機中存儲結(jié)構(gòu),也稱為物理結(jié)構(gòu),它有4類基本的存儲映射方法:1.順序的方法;2.鏈接的方法;3.索引的方法;4.散列的方法。在程序設計語言中,數(shù)據(jù)結(jié)構(gòu)直接反映在數(shù)據(jù)類型上,比如一個整型變量就是一個節(jié)點,根據(jù)類型給他分配內(nèi)存單元。抽象數(shù)據(jù)類型:一組值以及在這些值上定義的操作集合,它是描述數(shù)據(jù)結(jié)構(gòu)的一種理論工具,其特點是把數(shù)據(jù)結(jié)構(gòu)作為獨立于應用程序的一種抽象代數(shù)結(jié)構(gòu)。
線性表結(jié)構(gòu):由一系列元素組成的有序的序列,除了第一個元素和最后一個元素外,每個元素都只有一個直接前趨和直接后繼,元素的個數(shù)稱為線性表的長度。它的存儲方式有順序存儲和鏈式存儲。順序存儲方式它的優(yōu)點是存儲單元是連續(xù)的,適合快速訪問元素內(nèi)容,鏈表的特點是動態(tài)申請內(nèi)存空間,并通過指針來鏈接結(jié)點,按照線性表的前驅(qū)關系把一個個結(jié)點鏈接起來,這樣可以動態(tài)地根據(jù)需要分配內(nèi)存空間,經(jīng)常用于插入新結(jié)點或刪除節(jié)點的需要,鏈表還可以根據(jù)結(jié)點中指針個數(shù)分為單鏈表、雙鏈表、循環(huán)鏈表等。在線性表結(jié)構(gòu)中有兩類特別的線性表:棧和隊列。棧是一種限制訪問端口的線性表,常稱為后進先出表。正是這種特殊的性質(zhì)使得棧的用途非常廣泛,比如在計算表達式的值時處理運算符的先后次序,另外一個大的用處就是遞歸了,hanoi 塔就是最典型的用了遞歸的思想,在算法中,也有很多運用遞歸思想的例子。隊列也屬于限制訪問點的線性表,它的特點就是加入和刪除元素都只能在隊列的一端進行,即隊列首出,隊列尾進,最大的特點是先來先服務,先進先出。因為這個特點,隊列常被用作消息緩沖器。
在算法設計中,順序表主要用于檢索,而利用棧中的遞歸思想在算法中則應用非常廣泛,如遞歸排序,分治算法等。
樹結(jié)構(gòu):是一種非常重要的非線性數(shù)據(jù)結(jié)構(gòu),它是由一個根結(jié)點和若干葉結(jié)點組成的樹狀結(jié)構(gòu),除了根結(jié)點每個結(jié)點只能有一個父節(jié)點,可以有若干子結(jié)點,若干個樹結(jié)構(gòu)還可以構(gòu)成森林,樹的存儲結(jié)構(gòu)也分為順序存儲和鏈式存儲,最典型的是左孩子右兄弟法。在樹結(jié)構(gòu)中比較重要的算法就是周游(遍歷)樹,有先根次序、后根次序以及中根次序。樹結(jié)構(gòu)中有幾類非常重要的特殊樹結(jié)構(gòu),如二叉樹,b樹,b+樹等,其中,二叉樹應用最為廣泛。
二叉樹:是指每個結(jié)點最多有兩個子結(jié)點的樹結(jié)構(gòu),具體細分,根據(jù)葉子結(jié)點的特性可分為滿二叉樹、完全二叉樹等。二叉樹的遍歷也分為深度優(yōu)先和廣度優(yōu)先。另外,二叉樹有幾條非常重要的性質(zhì),這也使得它的應用非常廣泛。
在算法設計中,典型的利用樹的深度優(yōu)先遍歷的算法是回溯法,而典型的廣度優(yōu)先搜索算法是分枝定界法。
圖結(jié)構(gòu):不限制前驅(qū)的個數(shù),亦不限制后繼的個數(shù),反映一種網(wǎng)狀關系。
通常用g=(v,e)代表一個圖,其中v是頂點集,e是邊集。圖分為有向圖和無向圖,圖的存儲方式有鄰接表和鄰接矩陣法。和樹類似的,圖中也需要周游,同樣有深度優(yōu)先搜索和廣度優(yōu)先搜索,而比樹的周游要更復雜,也更重要。在這一塊中,有兩種比較典型的求最短路徑和最小支撐樹的算法需要注意,它們分別是dijkstra算法和prim算法。另外需要注意的是圖的連通性。
在算法設計中,典型的用到圖論的算法有貪心算法和動態(tài)規(guī)劃算法。
(1)輸入:有零個或多個由外部提供的量作為算法的輸入。(2)輸出:算法產(chǎn)生至少一個量作為輸出。
(3)確定性:組成算法的每條指令是清晰的,無歧義的。(4)有限性:算法中每條指令的執(zhí)行次數(shù)是有限的,執(zhí)行每條指令的時間也是有限的。
我們研究一個算法或者評價一個算法主要是通過估計該算法的復雜性,包括時間復雜性和空間復雜性??臻g復雜性是指使用該算法的程序在運行時需要占用多少內(nèi)存空間,具體包括指令空間、數(shù)據(jù)空間和環(huán)境棧空間。時間復雜性是指執(zhí)行該程序所需要的時間量級,通常是估算的時間,包括編譯時間和運行時間。同時評價一個算法的好壞還要看其時間復雜性和空間復雜性隨著輸入規(guī)模的增長趨勢,一般能接受的最好是線性增長。在算法設計這本書中,每介紹一個算法都會分析其算法復雜度,由此可看出它的重要性。
首先,從遞歸的分治算法開始。分治算法的基本思想是將一個規(guī)模為n的問題分解為k個規(guī)模較小的子問題,這些子問題互相獨立且與原問題相同。遞歸的解這些子問題,然后將各個子問題的解合并得到原問題的解。該算法的主要應用有大整數(shù)乘法,矩陣乘法、合并排序等??梢源蟠蠼档退惴ǖ臅r間復雜度,但使用遞歸??赡茉黾映绦虻目臻g規(guī)模。
(1)找出最優(yōu)解的性質(zhì),并刻畫其結(jié)構(gòu)特征。(2)遞歸的定義最優(yōu)值。
(3)以自底向上的方式計算出最優(yōu)值。
(4)根據(jù)計算最優(yōu)值時得到的信息,構(gòu)造最優(yōu)解。
動態(tài)規(guī)劃算法的基本要素是最優(yōu)子結(jié)構(gòu)性質(zhì)和子問題重疊性質(zhì)。
最優(yōu)子結(jié)構(gòu)性質(zhì)。如果問題的最優(yōu)解所包含的子問題的解也是最優(yōu)的,我們就稱該問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)(即滿足最優(yōu)化原理)。最優(yōu)子結(jié)構(gòu)性質(zhì)為動態(tài)規(guī)劃算法解決問題提供了重要線索。
子問題重疊性質(zhì)。子問題重疊性質(zhì)是指在用遞歸演算法自頂向下對問題進行求解時,每次產(chǎn)生的子問題并不總是新問題,有些子問題會被重復計算多次。動態(tài)規(guī)劃算法正是利用了這種子問題的重疊性質(zhì),對每一個子問題只計算一次,然后將其計算結(jié)果保存在一個表格中,當再次需要計算已經(jīng)計算過的子問題時,只是在表格中簡單地查看一下結(jié)果,從而獲得較高的效率。
另外一點要素是備忘錄方法,它作為動態(tài)規(guī)劃算法的變形,用表格保存已解決問題的答案,在下次需要解此子問題時,只要簡單查看子問題的解答,而不必重新計算。與動態(tài)規(guī)劃不同的是備忘錄方法的遞歸是自頂向下的,而動態(tài)規(guī)劃則是自底向上的。
動態(tài)規(guī)劃算法設計策略典型的應用案例有:矩陣連乘、最大字段和、流水作業(yè)調(diào)度等。有時滿足動態(tài)規(guī)劃條件的問題可以有更好的算法,比如貪心算法。貪心算法即總是做出在當前看來是最好的選擇。也就是說貪心算法并不從整體最優(yōu)上加以考慮,它所做的總是做出的選擇只是在某種意義上的局部最優(yōu)。這種啟發(fā)式的策略并不能總是奏效,然而對某些特定的問題確能達到預期目的。比如活動安排的例子。
貪心算法的基本要素主要有貪心選擇性質(zhì)和最優(yōu)子結(jié)構(gòu)性質(zhì)。所謂貪心選擇性質(zhì)是指所求問題的整體最優(yōu)解可以通過一系列局部最優(yōu)的選擇,即貪心選擇來達到。這是貪心算法與動態(tài)規(guī)劃的主要區(qū)別,它們的共同點是都要求問題具有最優(yōu)子結(jié)構(gòu)性質(zhì)。
貪心算法的典型案列是:活動安排、最優(yōu)裝載問題、最短路徑和最優(yōu)生成樹問題?;厮莘ê头种Χń绶ǎ夯厮莘ㄓ小巴ㄓ玫慕忸}法”之稱。用它可以系統(tǒng)的搜索一個問題的所有解或任一解。它在問題的解空間樹中,按深度優(yōu)先策略,從根節(jié)點出發(fā)搜索解空間樹。其算法框架包含遞歸回溯和迭代回溯,兩個特別的解空間樹為子集樹和排列樹。典型的回溯法的案例有:批處理作業(yè)調(diào)度、圖的m著色、旅行售貨員問題、0-1背包問題等。
分枝定界法類似于回溯法,也是在問題的解空間上搜索問題解的算法。一般情況下,分治定界法與回溯法的求解目標不同?;厮莘ǖ那蠼饽繕耸钦页鼋饪臻g中滿足約束條件的所有 的解,而分枝定界法的求解目標則是找出滿足約束條件的一個解,或是滿足約束條件的解中找出使某一目標函數(shù)值達到極大或極小的解,即在某種意義下的最優(yōu)解。由于求解目標不同,導致分支定界法與回溯法對解空間的搜索方式也不相同?;厮莘ㄒ陨疃葍?yōu)先的方式搜索解空間,而分枝定界法則以廣度優(yōu)先或以最小耗費優(yōu)先的方式搜索解空間。
另外,在算法分析中一定要提的是np問題。首先需要介紹p(polynomial,多項式)問題.p問題是可以在多項式時間內(nèi)被確定機(通常意義的計算機)解決的問題。np(non-deterministic polynomial, 非確定多項式)問題,是指可以在多項式時間內(nèi)被非確定機(他可以猜,他總是能猜到最能滿足你需要的那種選擇,如果你讓他解決n皇后問題,他只要猜n次就能完成----每次都是那么幸運)解決的問題.這里有一個著名的問題----千禧難題之首,是說p問題是否等于np問題,也即是否所有在非確定機上多項式可解的問題都能在確定機上用多項式時間求解。
np完全(np complete,npc)問題是指這樣一類np問題,所有的np問題都可以用多項式時間劃歸到他們中的一個。所以顯然np完全的問題具有如下性質(zhì):它可以在多項式時間內(nèi)求解,當且僅當所有的其他的np-完全問題也可以在多項式時間內(nèi)求解。這樣一來,只要我們找到一個npc問題的多項式解,所有的np問題都可以多項式時間內(nèi)劃歸成這個npc問題,再用多項式時間解決,這樣np就等于p了。
小結(jié)一下,在算法設計這么課中學了這么幾大類典型的算法,里面也涉及到具體的應用案例,但我覺得學算法的目的遠不是學會這幾種固定的特殊問題的解法而已,事實上領會這些巧妙算法背后的思想然后學會遷移到其他新的問題中去才是領會了算法設計的精髓。
【本文地址:http://mlvmservice.com/zuowen/3455921.html】