版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
PAGEPAGE8《算法分析與設計》實驗指導書(適用于計算機科學與技術、軟件工程專業(yè))計算機科學與技術學院軟件教研室2011-8目錄TOC\o"2-2"\u實驗一算法分析 3實驗二分治策略 4實驗三堆排序 5實驗四動態(tài)規(guī)劃 6實驗五貪心算法 8實驗六圖算法1-基本圖算法 10實驗七 圖算法2-最小生成樹和單源頂點最短路徑 12實驗八圖算法3-所有點對最短路徑 14附錄一實驗規(guī)范 15實驗一算法分析一、實驗目的及任務1、使學生通過插入排序和合并排序的算法實現(xiàn),理解算法的概念并且通過運行時間比較其時間復雜度。2、體會合并排序的分治方法的三個步驟:分解、遞歸求解和合并。3、了解漸近記號的意義和初步分析算法復雜性。二、實驗環(huán)境c++或java或Turboc三、問題描述Input:Asequenceofnnumbers<a1,a2,...,an>.Output:Apermutation(reordering)<a1’,a2’,...,an’>oftheinputsequencesuchthata1’a2’四、編程任務給定長度為n的一個序列,對其進行插入排序和合并排序五、數(shù)據(jù)輸入隨機產(chǎn)生10000以上的數(shù)據(jù),放入輸入文件input.txt,用來進行排序六、結(jié)果輸出排序后的結(jié)果和兩種排序算法的運行時間輸出到文件output.txt七、實驗報告內(nèi)容見《算法分析與設計》實驗規(guī)范。實驗二分治策略一、實驗目的及任務1、掌握遞歸和分治策略的概念和基本思想,分析并掌握“快速排序”問題的分治算法;2、分治算法思想解決median問題。二、實驗環(huán)境c++或java或Turboc三、問題描述(1)Input:Asequenceofnnumbers<a1,a2,...,an>.Output:Apermutation(reordering)<a1’,a2’,...,an’>oftheinputsequencesuchthata1’a2’(2)Input:AsetAofn(distinct)numbersandanumberi,with1≤i≤n.Output:Theelementx∈Athatislargerthanexactlyi-1otherelementsofA.四、編程任務給定長度為n的一個序列,對其進行快速排序和求第i小數(shù)五、數(shù)據(jù)輸入A=<13,19,9,5,12,8,7,4,11,2,6,21>六、結(jié)果輸出將排序結(jié)果輸出到文件output.txt。如果不存在所要求的第i小數(shù),則輸出-1。七、實驗報告內(nèi)容見《算法分析與設計》實驗規(guī)范。實驗三堆排序一、實驗目的及任務1、了解堆的性質(zhì);2利用堆構成一個優(yōu)先隊列,并實現(xiàn)相關的函數(shù)功能;3為圖算法做好準備。二、實驗環(huán)境c++或java或Turboc三、問題描述ApriorityqueueisadatastructureformaintainingasetSofelements,eachwithanassociatedvaluecalledakey.Amax-priorityqueuesupportsthefollowingoperations..INSERT(S,x)insertstheelementxintothesetS.ThisoperationcouldbewrittenasS←S∪{x}..MAXIMUM(S)returnstheelementofSwiththelargestkey..EXTRACT-MAX(S)removesandreturnstheelementofSwiththelargestkey..INCREASE-KEY(S,x,k)increasesthevalueofelementx'skeytothenewvaluek,whichisassumedtobeatleastaslargeasx'scurrentkeyvalue.四、編程任務編程建立最大堆,構造優(yōu)先隊列并實現(xiàn)以上的相關操作。五、數(shù)據(jù)輸入A=<15,13,9,5,12,8,7,4,0,6,2,1>六、結(jié)果輸出執(zhí)行INSERT(A,10),EXTRACT-MAX(A),將結(jié)果輸出到文件output.txt。七、實驗報告內(nèi)容見《算法分析與設計》實驗規(guī)范。實驗四動態(tài)規(guī)劃一、實驗目的及任務掌握動態(tài)規(guī)劃算法的基本步驟:找出最優(yōu)解的性質(zhì),并刻畫其結(jié)構特征;遞歸地定義最優(yōu)值;以自底向上的方式計算出最優(yōu)值;根據(jù)計算最優(yōu)值時得到的信息,構造最優(yōu)解。熟悉最長公共子序列問題的算法,設計一個算法解決編輯距離問題。二、實驗環(huán)境c++或java或Turboc三、問題描述
1若給定序列X={x1,x2,…,xm},則另一序列Z={z1,z2,…,zk},是X的子序列是指存在一個嚴格遞增下標序列{i1,i2,…,ik}使得對于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相應的遞增下標序列為{2,3,5,7}。給定2個序列X和Y,當另一序列Z既是X的子序列又是Y的子序列時,稱Z是序列X和Y的公共子序列。給定2個序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最長公共子序列。2設A和B是2個字符串。要用最少的字符操作將字符串A轉(zhuǎn)換為字符串B。這里所說的字符操作包括:山出一個字符、插入一個字符、將一個字符改為另一個字符。將字符串A變換為字符串B所用的最少字符操作稱為字符串A到字符串B的編輯距離,記為d(A,B)。試設計一個有效算法,對任意給定的兩個字符串,計算出它們的編輯距離d(A,B)。四、編程任務1求X和Y的最長公共子序列長度以及最長公共子序列2對于給定的字符串A和字符串B,編程計算其編輯距離d(A,B)。五、數(shù)據(jù)輸入由文件input.txt提供輸入數(shù)據(jù),X={A,B,C,B,D,A,B}和Y={B,D,C,A,B,A}。由文件input.txt提供輸入數(shù)據(jù)。文件的第1行是字符串A,文件的第2行是字符串B。A:fxpimuB:xwrs六、結(jié)果輸出1程序運行結(jié)束時,將編程計算出的最長公共子序列長度以及最長公共子序列輸出到文件output.txt中。2程序運行結(jié)束時,將編輯距離d(A,B)輸出到文件output.txt的第1行中。七、實驗報告內(nèi)容見《算法分析與設計》實驗規(guī)范。實驗五貪心算法一、實驗目的及任務1、掌握貪心算法的基本性質(zhì)。2貪心算法與動態(tài)規(guī)劃的區(qū)別。3貪心算法解決活動安排問題和背包問題。二、實驗環(huán)境c++或java或Turboc三、問題描述
1有n個活動的集合E={1,2,…,n},其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內(nèi)只有一個活動能使用這一資源。每個活動i都有一個要求使用該資源的起始時間si和一個結(jié)束時間fi,且si<fi。如果選擇了活動i,則它在半開時間區(qū)間[si,fi]內(nèi)占用資源。若區(qū)間[si,fi]與區(qū)間[sj,fj]不相交,則稱活動i與活動j是相容的。也就是說,當si≥fj或sj≥fi時,活動i與活動j相容。活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心算法提供了一個簡單、漂亮的方法使得盡可能多的活動能兼容地使用公共資源。20-1背包問題:給定n種物品和一個背包。物品i的重量是Wi,其價值為Vi,背包的容量為C。應如何選擇裝入背包的物品,使得裝入背包中物品的總價值最大?背包問題:與0-1背包問題類似,所不同的是在選擇物品i裝入背包時,可以選擇物品i的一部分,而不一定要全部裝入背包,1≤i≤n。四、編程任務1在所給的活動集合中選出最大的相容活動子集合。2計算背包問題/0-1背包問題背包的價值五、數(shù)據(jù)輸入1i1234567891011si130535688212fi45678910111213142W={10,100,120}V={10,20,30}C=50六、結(jié)果輸出1、將編程計算出的最長最大活動安排結(jié)果輸出到文件output1.txt。2、將編程計算出的背包價值輸出到文件output2.txt。七、實驗報告內(nèi)容見《算法分析與設計》實驗規(guī)范。實驗六圖算法1-基本圖算法一、實驗目的及任務1、掌握圖鄰接表的存儲方法;2、掌握深度優(yōu)先遍歷算法(DFS);3、利用深度優(yōu)先遍歷的timestamps進行拓撲排序或計算有向圖的強連通分支;二、實驗環(huán)境c++或java或Turboc三、問題描述GivenG=(V,E)InDFS,edgesareexploredoutthemostrecentlydiscoveredvertexvthatstillhasunexplorededgesleavingit.Whenv'sedgeshavebeenexplored,thesearch"backtracks"toexploreedgesleavingthevertexfromwhichvwasdiscovered.Besidescreatingadepth-firstforest,DFSalsotimestampseachvertex.Eachvertexvhastwotimestamps:thefirsttimestampd[v]recordswhenvisfirstdiscovered,andthesecondonef[v]recordswhenthesearchfinishesexaminingv'sadjacencylist.Atopologicalsortofadirectedacyclicgraph(DAG)G=(V;E)isalinearorderingofallitsverticessuchthatifGcontainsanedge(u;v),thenuappearsbeforevintheordering(ifthegraphiscyclic,thennolinearorderingispossible).Astronglyconnectedcomponent(SCC)ofadirectedgraphG=(V;E)isamaximalsubsetofverticesCVsuchthatu,vC,wehaveu→vandv→u.四、編程任務1、深度優(yōu)先遍歷;2、利用深度優(yōu)先遍歷的timestamps進行拓撲排序;3、利用深度優(yōu)先遍歷的timestamps進行有向圖的強連通分支;五、數(shù)據(jù)輸入六、結(jié)果輸出1、將編程計算出深度優(yōu)先遍歷結(jié)果輸出到文件output1.txt;2、將編程進行拓撲排序結(jié)果輸出到文件output2.txt;3、將編程進行有向圖的強連通分支的結(jié)果輸出到文件output3.txt。七、實驗報告內(nèi)容見《算法分析與設計》實驗規(guī)范。實驗七圖算法2-最小生成樹和單源頂點最短路徑一、實驗目的及任務1、應用優(yōu)先隊列求最小生成樹的Prim算法,了解其中的貪心算法的設計思想;2、應用優(yōu)先隊列求單源頂點的最短路徑Dijkstra算法,了解貪心算法的設計思想,并掌握松弛技巧。二、實驗環(huán)境c++或java或Turboc三、問題描述1、Givenaconnected,undirectedgraphG=(V,E),where(u,v)∈Ehasaweightw(u,v).WeintendtofindanacyclicsubsetTEthatconnectsalltheverticesandwhosetotalweightw(T)=isminimized.SinceTisacyclicandconnectsallvertices,itmustbeatree,calledspanningtree.TheproblemtofindsuchTiscalledminimumspanningtree(MST)problem.2、Dijkstra'salgorithmsolvesthesingle-sourceshortest-pathsproblemonaweighted,directedgraphG=(V,E)forthecaseinwhichalledgeweightsarenonnegative.Dijkstra'salgorithmmaintainsasetSofverticeswhosefinalshortest-pathweightsfromthesourceshavealreadybeendetermined.Thealgorithmrepeatedlyselectsthevertexu∈V–Swiththeminimumshortest-pathestimate,addsutoS,andrelaxesalledgesleavingu.四、編程任務對于給定的賦權圖G,編程計算圖的最大邊權最小生成樹。2、對于給定的賦權圖G,編程計算圖的單源頂點最短路徑。五、數(shù)據(jù)輸入1由文件input.txt給出輸入數(shù)據(jù)。第1行有2個正整數(shù)n和m,表示給定的圖G有n個頂點和m條邊,頂點編號為1,2,…,n。接下來的m行中,每行有3個正整數(shù)u,v,w,表示圖G的一條邊(u,v)及其邊權w。2六、結(jié)果輸出1將編程計算出的最大邊權最小生成樹的最大邊權輸出到文件output1.txt。如果不存在所要求的最大邊權最小生成樹,則輸出-1。輸入文件示例input.txt79122816102714231665257524741834125422輸出文件示例output.txt252將編程計算出單源頂點最短路徑結(jié)果輸出到output2.txt。七、實驗報告內(nèi)容見《算法分析與設計》實驗規(guī)范實驗八圖算法3-所有點對最短路徑一、實驗目的及任務1、掌握Matrixmultiplication和Floyd-Warshallalgorithm的實現(xiàn);2、了解這兩種算法的不同;3、進一步了解所有點對最短路徑問題中的動態(tài)規(guī)劃設計思想。二、實驗環(huán)境c++或java或Turboc三、問題描述Givenaweighted,directedgraphG=(V,E),foranyu,v∈V,findashortestpathfromutov.四、編程任務對于給定的賦權有向圖G,編程計算圖的所有點對的最短路徑。五、數(shù)據(jù)輸入六、結(jié)果輸出將編程計算出的所有點對的最短路徑輸出到文件output.txt。七、實驗報告內(nèi)容見《算法分析與設計》實驗規(guī)范《算法分析與設計》實驗規(guī)范一、實驗課的意義
實驗是對學生的一種全面綜合訓練。是與課堂聽講、自學和練習相輔相成的必不可少的一個教學環(huán)節(jié)。通常,實驗題中的問題比平時的習題復雜得多,也更接近實際。實驗著眼于原理與應用的結(jié)合點,使學生學會如何把書上學到的知識用于解決實際問題,培養(yǎng)軟件工作所需要的動手能力;另一方面,能使書上的知識變"活",起到深化理解和靈活掌握教學內(nèi)容的目的。平時的練習較偏重于如何編寫功能單一的"小"算法,而實驗題是軟件設計的綜合訓練,包括問題分析、總體結(jié)構設計、用戶界面設計、程序設計基本技能和技巧,多人合作,以至一整套軟件工作規(guī)范的訓練和科學作風的培養(yǎng)。二、實驗步驟
常用的軟件開發(fā)方法,是將軟件開發(fā)過程劃分為分析、設計、實現(xiàn)和維護四個階段。雖然算法分析與設計課程中的實驗題目的遠不如從實際問題中的復雜程度高,但為了培養(yǎng)一個軟件工作者所應具備的科學工作的方法和作風,也應遵循以下五個步驟來完成實驗題目:1.問題分析和任務定義在進行設計之前,首先應該充分地分析和理解問題,明確問題要求做什么?限制條件是什么。本步驟強調(diào)的是做什么?而不是怎么做。對問題的描述應避開算法和所涉及的數(shù)據(jù)類型,而是對所需完成的任務作出明確的回答。例如:輸入數(shù)據(jù)的類型、值的范圍以及輸入的形式;輸出數(shù)據(jù)的類型、值的范圍及輸出的形式;若是會話式的輸入,則結(jié)束標志是什么?是否接受非法的輸入?對非法輸入的回答方式是什么等。還應該為調(diào)試程序準備好測試數(shù)據(jù),包括合法的輸入數(shù)據(jù)和非法形式的輸入數(shù)據(jù)。2.邏輯設計和詳細設計在設計這一步驟中需分邏輯設計和詳細設計兩步實現(xiàn)。邏輯設計指的是,對問題描述中涉及的操作對象定義相應的數(shù)據(jù)類型,并按照以數(shù)據(jù)結(jié)構為中心的原則劃分模塊,定義主程序模塊和各抽象數(shù)據(jù)類型;詳細設計則為定義相應的存儲結(jié)構并寫出各函數(shù)的偽碼算法。在這個過程中,要綜合考慮系統(tǒng)功能,使得系統(tǒng)結(jié)構清晰、合理、簡單和易于調(diào)試,抽象數(shù)據(jù)類型的實現(xiàn)盡可能做到數(shù)據(jù)封裝,基本操作的規(guī)格說明盡可能明確具體。作為邏輯設計的結(jié)果,應寫出每個抽象數(shù)據(jù)類型的定義(包括數(shù)據(jù)結(jié)構的描述和每個基本操作的功能說明),各個主要模塊的算法,并畫出模塊之間的調(diào)用關系圖。詳細設計的結(jié)果是對數(shù)據(jù)結(jié)構和基本操作作出進一步的求精,寫出數(shù)據(jù)存儲結(jié)構的類型定義,寫出函數(shù)形式的算法框架。在求精的過程中,應盡量避免陷入語言細節(jié),不必過早表述輔助數(shù)據(jù)結(jié)構和局部變量。3.編碼實現(xiàn)和靜態(tài)檢查編碼是把詳細設計的結(jié)果進一步求精為程序設計語言程序。如果基于詳細設計的偽碼算法就能直接在鍵盤上輸入程序的話,則可以不必用筆在紙上寫出編碼,而將這一步的工作放在上機準備之后進行,即在上機調(diào)試之前直接用鍵盤輸入。然而,不管你是否寫出編碼的程序,在上機之前,認真的靜態(tài)檢查是必不可少的。靜態(tài)檢查主要有兩種方法,一是用一組測試數(shù)據(jù)手工執(zhí)行程序(通常應先分模塊檢查);二是通過對程序深入全面地理解程序邏輯,在這個過程中再加入一些注解和斷言。如果程序中邏輯概念清楚,后者將比前者有效。4.上機準備和上機調(diào)試上機準備包括以下幾個方面:
(1)注意同一高級語言文本之間的差別。
(2)熟悉機器的操作系統(tǒng)和語言集成環(huán)境的用戶手冊,尤其是最常用的命令操作,以便順利進行上機的基本活動。(3)掌握調(diào)試工具,考慮調(diào)試方案,設計測試數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《倉庫現(xiàn)場管理》課件
- 《倉庫庫存管理系統(tǒng)》課件
- 《小學細節(jié)描寫》課件
- 單位管理制度集粹選集員工管理篇
- 單位管理制度合并匯編【職員管理】
- 四川省南充市重點高中2024-2025學年高三上學期12月月考地理試卷含答案
- 單位管理制度分享合集職員管理篇十篇
- 單位管理制度范文大合集【人事管理】十篇
- 單位管理制度呈現(xiàn)大全職工管理篇十篇
- 《運算律》教案(20篇)
- 物流倉儲設備維護保養(yǎng)手冊
- 農(nóng)商銀行小微企業(yè)續(xù)貸實施方案
- 2024年山西廣播電視臺招聘20人歷年高頻500題難、易錯點模擬試題附帶答案詳解
- 2024山西太原文化局直屬事業(yè)單位招聘30人歷年高頻500題難、易錯點模擬試題附帶答案詳解
- 中國普通食物營養(yǎng)成分表(修正版)
- 2024年北京市第一次普通高中學業(yè)水平合格性考試英語仿真模擬卷03(全解全析)
- 2024年江蘇省淮安技師學院長期招聘高技能人才3人高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 應急救援員五級理論考試題庫含答案
- 2024年導游服務技能大賽《導游綜合知識測試》題庫及答案
- 高中化學實驗開展情況的調(diào)查問卷教師版
- 《聲聲慢(尋尋覓覓)》課件 統(tǒng)編版高中語文必修上冊
評論
0/150
提交評論