![最長公共子序列實驗報告_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/b9786e43-ecb9-4acd-8e9a-c922e3027211/b9786e43-ecb9-4acd-8e9a-c922e30272111.gif)
![最長公共子序列實驗報告_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/b9786e43-ecb9-4acd-8e9a-c922e3027211/b9786e43-ecb9-4acd-8e9a-c922e30272112.gif)
![最長公共子序列實驗報告_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/b9786e43-ecb9-4acd-8e9a-c922e3027211/b9786e43-ecb9-4acd-8e9a-c922e30272113.gif)
![最長公共子序列實驗報告_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-3/14/b9786e43-ecb9-4acd-8e9a-c922e3027211/b9786e43-ecb9-4acd-8e9a-c922e30272114.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、word最長公共子序列問題 一 實驗?zāi)康模?1. 加深對最長公共子序列問題算法的理解,實現(xiàn)最長公共子序列問題的求解算法;2. 通過本次試驗掌握將算法轉(zhuǎn)換為上機(jī)操作;3. 加深對動態(tài)規(guī)劃思想的理解,并利用其解決生活中的問題。二 實驗內(nèi)容:1. 編寫算法:實現(xiàn)兩個字符串的最長公共子序列的求解;2. 將輸入與輸出數(shù)據(jù)保存在文件之中,包括運行時間和運行結(jié)果;3. 對實驗結(jié)果進(jìn)行分析。三 實驗操作:1. 最長公共子序列求解: 將兩個字符串放到兩個字符型數(shù)組中,characterString1和characterString2,當(dāng)characterString1m= characterString2m時,
2、找出這兩個字符串m之前的最長公共子序列,然后在其尾部加上characterString1m,即可得到最長公共子序列。當(dāng)characterString1m characterString2m時,需要解決兩個子問題:即找出characterString1(m-1)和characterString2的一個最長公共子序列及characterString1和characterString2(m-1)的一個最長公共子序列,這兩個公共子序列中較長者即為characterString1和characterString2的一個最長公共子序列。2. 動態(tài)規(guī)劃算法的思想求解:動態(tài)規(guī)劃算法是自底向上的計算最優(yōu)值。計算
3、最長公共子序列長度的動態(tài)規(guī)劃算法LCS-Length以characterString1和characterString2作為輸入,輸出兩個數(shù)組result和judge1,其中result存儲最長公共子序列的長度,judge1記錄指示result的值是由那個子問題解答得到的,最后將最終的最長公共子序列的長度記錄到result中。以LCS-Length計算得到的數(shù)組judge1可用于快速構(gòu)造序列最長公共子序列。首先從judge1的最后開始,對judge1進(jìn)行配對。當(dāng)遇到“時,表示最長公共子序列是由characterString1(i-1)和characterString2(j-1)的最長公共子序列
4、在尾部加上characterString1(i)得到的子序列;當(dāng)遇到“時,表示最長公共子序列和characterString1(i-1)與characterString2(j)的最長公共子序列相同;當(dāng)遇到“時,表示最長公共子序列和characterString1(i)與characterString2(j-1)的最長公共子序列相同。如下圖:時間復(fù)雜度公式:代碼實現(xiàn):void LCSLength(char* characterString1,char* characterString2,int length1,int length2,int judge10000) int result10010
5、0; for(int i=0;i<=length1;i+) resulti0=0; for(int j=1;j<=length2;j+) result0j = 0; for(int i=1;i<=length1;i+) for(int j=1;j<=length2;j+) if(characterString1i-1=characterString2j-1) resultij=resulti-1j-1+1; judgeij=0; else if(resulti-1j>=resultij-1) resultij=resulti-1j; judgeij=1; else
6、 resultij=resultij-1; judgeij=-1; void LCS(int judge10000,char* characterString1,int length1,int length2)/得到最長公共子序列 if(length1=0|length2=0) return; if(judgelength1length2=0) LCS(judge,characterString1,length1-1,length2-1); record(characterString1length1-1);/存入文件 cout<<characterString1length1-1
7、; else if(judgelength1length2=1) LCS(judge,characterString1,length1-1,length2); else LCS(judge,characterString1,length1,length2-1); 3. 備忘錄算法實現(xiàn): 備忘錄算法是從頂向下計算最優(yōu)解的思想,備忘錄方法的控制結(jié)構(gòu)與直接遞歸方法的控制結(jié)構(gòu)相同,但備忘錄方法用一個表格來保存已解決的子問題的答案,防止了相同問題的重復(fù)求解。 代碼實現(xiàn): int searchLCS(char* characterString1,char* characterString2,int len
8、gth1,int length2) if(judge2length1length2>-1) return judge2length1length2; if(length1=0|length2=0) judge2length1length2=0; else if(characterString1length1-1=characterString2length2-1) judge2length1length2=searchLCS(characterString1,characterString2,length1-1,length2-1)+1; else judge2length1length
9、2=max(searchLCS(characterString1,characterString2,length1,length2-1), searchLCS(characterString1,characterString2,length1-1,length2); return judge2length1length2;int memorizedLCS(char* characterString1,char* characterString2) int length1=strlen(characterString1); int length2=strlen(characterString2)
10、; for(int i=1;i<=length1;i+) for(int j=1;j<=length2;j+) judge2ij=-1; return searchLCS(characterString1,characterString1,length1,length2); 4. 遞歸法:設(shè)有字符串characterString1和characterString2,當(dāng)兩個數(shù)組的對應(yīng)位置的字符相同時,那么直接求解下一個位置,當(dāng)不同時取兩種情況中的最大值。時間復(fù)雜度公式:代碼實現(xiàn):int recursionLCS(int i,int j,int length1) if(i>=le
11、ngth1|j>=length2) return 0; if(characterString1i=characterString2j) return 1+recursionLCS(i+1,j+1); else return recursionLCS(i+1,j)>recursionLCS(i,j+1)recursionLCS(i+1,j):recursionLCS(i,j+1);5. 窮舉法: 將數(shù)組characterString1和characterString2兩個字符串的所有字串求出,并將這些字串相互比擬,直到找的最長公共子序列為止,當(dāng)字符串的長度很長時,所要求取的子串序列相當(dāng)多,故所開銷的時間最多。四 實驗結(jié)果分析: 當(dāng)輸入字符串長度分別為20,20,34,78,98,145時,在動態(tài)規(guī)劃算法、備忘錄算法、遞歸算法得到的時間分別為0,0,0,0,16,22,0,16,34
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)合同范例粉水
- 2025年公共藝術(shù)設(shè)計市場調(diào)研報告
- 公路護(hù)欄工程合同范例
- 學(xué)校保安聘任合同范本
- 出售魚苗批發(fā)合同范本
- 公司賣舊車合同范例
- 2025年度燃?xì)庠O(shè)施建設(shè)與運營管理合同范本
- 2025年度建筑施工單位臨時用工勞務(wù)派遣與職業(yè)健康合同
- 餐飲服務(wù)合同范本
- 船舶設(shè)備零部件行業(yè)深度研究報告
- 低空飛行旅游觀光項目可行性實施報告
- 2024年版:煤礦用壓力罐設(shè)計與安裝合同
- 2024年貴州云巖區(qū)總工會招聘工會社會工作者筆試真題
- 《算法定價壟斷屬性問題研究的國內(nèi)外文獻(xiàn)綜述》4200字
- 2024年04月浙江義烏農(nóng)商銀行春季招考筆試歷年參考題庫附帶答案詳解
- 涉密計算機(jī)保密培訓(xùn)
- 掛靠免責(zé)協(xié)議書范本
- 2024年浙江省五校聯(lián)盟高考地理聯(lián)考試卷(3月份)
- 在線心理健康咨詢行業(yè)現(xiàn)狀分析及未來三至五年行業(yè)發(fā)展報告
- 電動三輪車購銷合同
- 淋巴瘤的免疫靶向治療
評論
0/150
提交評論