版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、算法與數(shù)據(jù)結(jié)構(gòu)綜合訓(xùn)練報(bào) 告第一部分:基本算法訓(xùn)練 組號: 02 組長: 溫佳美 成員: 安秀芳、施璇、 丁子葉、黃城 2015年 7 月 9 日一、任務(wù)說明 1。分工及時(shí)間安排。溫佳美(組長):3、Prim算法 11、希爾排序 14、歸并排序 15、四則表達(dá)式計(jì)算組員:安秀芳: 6、Dijkstra算法 9、二叉排序樹生成算法(含平衡化) 12、快速排序 PPT主講人施璇:10、哈希表生成及哈希查找算法 13、堆排序 16、矩陣運(yùn)算 以及PPT制作丁子葉:1、哈夫曼編碼算法 2、由遍歷序列恢復(fù)二叉樹 4、Kruskal算法 8、關(guān)鍵路徑算法黃城:5、Floyd 算法 7、拓?fù)渑判?17、有向
2、圖的強(qiáng)連通分量求解 2。任務(wù)描述2、 設(shè)計(jì)1。抽象數(shù)據(jù)類型安秀芳: 6、Dijkstra算法 :圖 9、二叉排序樹生成算法(含平衡化) :樹,鏈表 12、快速排序 :順序表施璇:10、哈希表生成及哈希查找算法:哈希表 13、堆排序:順序表 16、矩陣運(yùn)算 :無丁子葉:1.哈夫曼編碼:樹 2.遍歷序列恢復(fù)二叉樹:二叉樹 4.Kruskal算法:圖 8.關(guān)鍵路徑算法:圖,鄰接表2。主程序流程及各程序模塊的層次關(guān)系 本次實(shí)驗(yàn)綜合為一個(gè)main.cpp文件,將所有的程序整合在一個(gè)main.cpp文件中。增加菜單函數(shù),顯示所有的算法題目及作者名字,選擇想要的功能,并用switch()語句選擇功能并調(diào)用相
3、應(yīng)的函數(shù)實(shí)現(xiàn)功能。最后在主函數(shù)里調(diào)用menu()函數(shù),通過whlie循環(huán)選擇返回主菜單還是直接退出。小組不同程序之間的相同的數(shù)據(jù)結(jié)構(gòu)及算法共享。3、 調(diào)試分析3、Prim算法: a.構(gòu)造數(shù)據(jù)結(jié)構(gòu)-圖。 b.采用鄰接矩陣法創(chuàng)建無向圖。 c.Prim算法“加點(diǎn)法”,求最小生成樹。算法實(shí)現(xiàn)需要一個(gè)輔助數(shù)組closedge,以記錄最小邊在U中的那個(gè)頂點(diǎn),以及最小邊上的權(quán)值。在連通圖中,選取一個(gè)節(jié)點(diǎn)為頂點(diǎn),加入U(xiǎn)中,對其余的每個(gè)頂點(diǎn),將closedgei初始化為到U的邊的信息。選出closedge中最小邊closedgek,將k加入U(xiǎn)中,更新剩余每組最小邊的信息。循環(huán)直到所有節(jié)點(diǎn)加入。11、希爾排序:a
4、.構(gòu)造數(shù)據(jù)結(jié)構(gòu)-順序表。b.初始化順序表,輸入排序個(gè)數(shù)與排序序列。c.希爾排序采用分組插入,第一個(gè)去增量d1,所有間隔為d1的記錄分在同一趟,每組中進(jìn)行直接插入。第二趟取增量d2,重復(fù),直到取到增量1,每組直接插入排序?yàn)橹埂?14、歸并排序:順序表 a.構(gòu)造數(shù)據(jù)結(jié)構(gòu)-順序表。b.初始化順序表,輸入排序個(gè)數(shù)與排序序列。c.歸并排序,將順序表n個(gè)記錄遞歸一分為二,直到每個(gè)子序列的長度為1。然后進(jìn)行2-路歸并排序,得到n/2個(gè)長度為2或1的有序子序列;再兩兩歸并。重復(fù)。 15、四則表達(dá)式計(jì)算:棧 a. 構(gòu)造數(shù)據(jù)類型棧,數(shù)棧和字符棧。 b. 定義數(shù)棧和字符棧的初始化、壓棧、彈棧、取棧頂元素的函數(shù)。 c
5、. 先在字符棧中壓入#。輸入字符串,當(dāng)輸入字符不是#,或字符棧頂元素不是#,循環(huán)操作,從第一個(gè)字符串開始判斷,若是數(shù)字字符,輸出(后序表達(dá)式),再向后判斷,直到遇到符號字符,將之前的字符串轉(zhuǎn)化為大整數(shù),p=0;p=s*10+si,將其 -0變?yōu)檎?,壓入?shù)棧;若為符號字符,比較字符棧棧頂元素與所輸入的字符運(yùn)算符高低,:將輸入字符壓入字符棧; :彈字符棧,輸出(后序表達(dá)式),兩次彈數(shù)棧,進(jìn)行相應(yīng)操作,將結(jié)果壓入數(shù)棧;=:字符棧彈棧。1.哈夫曼編碼 首先建立赫夫曼樹,由于每個(gè)赫夫曼編碼是變長編碼,因此使用一個(gè)指針數(shù)組來存放每個(gè)字符編碼串的首地址。個(gè)字符的赫夫曼編碼存儲(chǔ)在由HuffmanCode定義
6、的動(dòng)態(tài)分配的數(shù)組HC中,構(gòu)成赫夫曼樹之后,為求編碼需從葉子結(jié)點(diǎn)出發(fā)走一條從葉子到跟的路徑,這樣生成的編碼與要求的編碼反序,出將生成的的代碼先從后往前一次存放在一個(gè)臨時(shí)的一維數(shù)組cd中,并設(shè)一個(gè)變量start記錄編碼在cd中起始位置,當(dāng)某字符編碼完成時(shí),從cd的start處將編碼到該字符相應(yīng)的編碼串中。此程序較簡單,沒什么問題。 2. 遍歷恢復(fù)二叉樹由先序和中序或后序和中序可唯一確定一棵二叉樹,主要問題是恢復(fù)二叉樹出現(xiàn)問題,后經(jīng)反復(fù)調(diào)試發(fā)現(xiàn)只要不輸入相同的結(jié)點(diǎn)就可以。4. Kruskal算法對于教材中的Locate()函數(shù)來獲取結(jié)點(diǎn)下標(biāo)沒有思路,但我覺得直接使用序號作為結(jié)點(diǎn)更簡單,所以采用了后者
7、。8. 關(guān)鍵路徑算法代碼課本上基本都有,沒什么大問題,但從中也了解到知識(shí)學(xué)過了也得多回頭溫習(xí),溫故而知新。6、Dijkstra算法 采用鄰接矩陣創(chuàng)建有向網(wǎng),每次求得v0到某個(gè)頂點(diǎn)v的最短路徑,將v加到s集,更新最短路徑的長度同時(shí)更改Vi的前驅(qū)。通過終點(diǎn)依次找到其前驅(qū),利用for語句倒序輸出即為最短路徑。在找前驅(qū)時(shí)數(shù)組起始位置沒有寫對,經(jīng)過反復(fù)查看得出正確答案。 9、二叉排序樹生成算法(含平衡化) 使用二叉排序樹的二叉鏈表作為存儲(chǔ)結(jié)構(gòu),創(chuàng)建二叉樹,插入一個(gè)結(jié)點(diǎn),若樹中已存在相同關(guān)鍵字結(jié)點(diǎn),不再插入,調(diào)試過程中平衡二叉樹的輸出形態(tài)位置不對,通過比對結(jié)果,反復(fù)修改結(jié)點(diǎn)的位置,最終得出正確的平衡二叉樹
8、形態(tài)。10、 哈希表生成及哈希查找算法:利用除留余數(shù)法構(gòu)造散列函數(shù)。解決沖突的方法為:利用開放地址法中的線性探測法。當(dāng)發(fā)生沖突時(shí),從沖突地址的下一個(gè)單元順序?qū)ふ铱諉卧?,如果到最后一個(gè)位置也沒找到空單元,則回到表頭開始繼續(xù)查找,直到找到一個(gè)空位,就把此元素放到此空位中。如果找不到空位,則說明散列表已滿,需要進(jìn)行溢出處理。12、快速排序 在從大到小排序的過程中出現(xiàn)錯(cuò)誤,樞軸的選擇出現(xiàn)錯(cuò)誤,通過參考從小到大排序的過程,修改數(shù)據(jù)交換的條件,從而得出正確結(jié)果。13、 堆排序:首先用篩選法調(diào)整堆,然后反復(fù)調(diào)用調(diào)整堆的函數(shù)建初堆,把無序序列建成大根堆或者小根堆,最后對順序表進(jìn)行堆排序并輸出每一次排序之后的序
9、列。16、矩陣運(yùn)算 :首先用一個(gè)輸入函數(shù),進(jìn)行矩陣的輸入,然后建立加減法和乘法的函數(shù)。在做加減法的時(shí)候要注意兩個(gè)矩陣的行數(shù)和列數(shù)相同,在進(jìn)行矩陣乘法時(shí)兩個(gè)矩陣只要保證一個(gè)矩陣的列數(shù)和另一個(gè)矩陣的行數(shù)相等即可。4、 系統(tǒng)測試及結(jié)果 (結(jié)果附截圖)3、Prim算法: 測試:課本圖P140頁11、希爾排序: 測試:課本例題P21349 38 65 97 76 13 27 49 55 04步長:5 13 27 49 55 4 49 38 65 97 76步長:3 13 4 49 38 27 49 55 65 97 76步長:1 4 13 27 38 49 49 55 65 76 97 14、歸并排序:
10、 測試:數(shù)據(jù)課本P22615、四則表達(dá)式計(jì)算: 測試:數(shù)據(jù)12*(10-5)/(20-12)=7.5后序表達(dá)式為:12 10 5 - * 20 12 (去括號)1.赫夫曼編碼.2. 遍歷恢復(fù)二叉樹4. Kruskal6、Dijkstra算法8. 關(guān)鍵路徑算法9、二叉排序樹生成算法(含平衡化) 10、哈希表生成及哈希查找算法 12、 快速排序 13、 堆排序 16、矩陣運(yùn)算5、 總結(jié)與體會(huì) 通過幾天的小學(xué)期訓(xùn)練,讓我們重新回顧并鞏固了數(shù)據(jù)結(jié)構(gòu)與算法的相關(guān)知識(shí)。在編程的時(shí)候,我們都能很明顯地感覺到以前學(xué)過的知識(shí)有很多都已經(jīng)遺忘,所以編程的時(shí)候不免有些吃力。一開始,老師就說過數(shù)據(jù)結(jié)構(gòu)是基礎(chǔ),基礎(chǔ)不牢固,越往后越難走。因此,我們應(yīng)該在不斷學(xué)習(xí)的過程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 校友會(huì)與校企合作
- 2024葡萄酒年份酒經(jīng)銷商銷售數(shù)據(jù)分析與合同3篇
- 2025年度智能倉儲(chǔ)與車位買賣合同模板4篇
- 二零二五版酒店客房衛(wèi)生間防水處理與瓷磚粘貼合同2篇
- 2025年綠色生態(tài)住宅區(qū)物業(yè)管理招投標(biāo)及執(zhí)行合同3篇
- 學(xué)校的發(fā)展戰(zhàn)略和規(guī)劃
- 2025年度物流車輛安全責(zé)任合同協(xié)議書4篇
- 2025年度長途客運(yùn)大巴租賃合同范本4篇
- 2024年08月中國光大銀行蘇州分行互聯(lián)網(wǎng)業(yè)務(wù)產(chǎn)品經(jīng)理崗招聘1人筆試歷年參考題庫附帶答案詳解
- 2024石斛花卉種植基地環(huán)保改造與采購合同3篇
- 搖臂鉆床日常點(diǎn)檢表
- 經(jīng)濟(jì)開發(fā)區(qū)擴(kuò)區(qū)可行性研究報(bào)告
- 會(huì)計(jì)職業(yè)道德課件(完整版)
- 金屬探測器檢查記錄表
- 2022年五年級數(shù)學(xué)興趣小組活動(dòng)記錄
- Q∕GDW 12127-2021 低壓開關(guān)柜技術(shù)規(guī)范
- 商品房預(yù)售合同登記備案表
- 版式設(shè)計(jì)發(fā)展歷程-ppt課件
- 通信機(jī)房蓄電池放電試驗(yàn)報(bào)告
- 病原細(xì)菌的分離培養(yǎng)
- EDA課程設(shè)計(jì)報(bào)告書--八音電子琴
評論
0/150
提交評論