下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、word最長(zhǎng)公共子序列問(wèn)題 一 實(shí)驗(yàn)?zāi)康模?1. 加深對(duì)最長(zhǎng)公共子序列問(wèn)題算法的理解,實(shí)現(xiàn)最長(zhǎng)公共子序列問(wèn)題的求解算法;2. 通過(guò)本次試驗(yàn)掌握將算法轉(zhuǎn)換為上機(jī)操作;3. 加深對(duì)動(dòng)態(tài)規(guī)劃思想的理解,并利用其解決生活中的問(wèn)題。二 實(shí)驗(yàn)內(nèi)容:1. 編寫(xiě)算法:實(shí)現(xiàn)兩個(gè)字符串的最長(zhǎng)公共子序列的求解;2. 將輸入與輸出數(shù)據(jù)保存在文件之中,包括運(yùn)行時(shí)間和運(yùn)行結(jié)果;3. 對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析。三 實(shí)驗(yàn)操作:1. 最長(zhǎng)公共子序列求解: 將兩個(gè)字符串放到兩個(gè)字符型數(shù)組中,characterString1和characterString2,當(dāng)characterString1m= characterString2m時(shí),
2、找出這兩個(gè)字符串m之前的最長(zhǎng)公共子序列,然后在其尾部加上characterString1m,即可得到最長(zhǎng)公共子序列。當(dāng)characterString1m characterString2m時(shí),需要解決兩個(gè)子問(wèn)題:即找出characterString1(m-1)和characterString2的一個(gè)最長(zhǎng)公共子序列及characterString1和characterString2(m-1)的一個(gè)最長(zhǎng)公共子序列,這兩個(gè)公共子序列中較長(zhǎng)者即為characterString1和characterString2的一個(gè)最長(zhǎng)公共子序列。2. 動(dòng)態(tài)規(guī)劃算法的思想求解:動(dòng)態(tài)規(guī)劃算法是自底向上的計(jì)算最優(yōu)值。計(jì)算
3、最長(zhǎng)公共子序列長(zhǎng)度的動(dòng)態(tài)規(guī)劃算法LCS-Length以characterString1和characterString2作為輸入,輸出兩個(gè)數(shù)組result和judge1,其中result存儲(chǔ)最長(zhǎng)公共子序列的長(zhǎng)度,judge1記錄指示result的值是由那個(gè)子問(wèn)題解答得到的,最后將最終的最長(zhǎng)公共子序列的長(zhǎng)度記錄到result中。以L(fǎng)CS-Length計(jì)算得到的數(shù)組judge1可用于快速構(gòu)造序列最長(zhǎng)公共子序列。首先從judge1的最后開(kāi)始,對(duì)judge1進(jìn)行配對(duì)。當(dāng)遇到“時(shí),表示最長(zhǎng)公共子序列是由characterString1(i-1)和characterString2(j-1)的最長(zhǎng)公共子序列
4、在尾部加上characterString1(i)得到的子序列;當(dāng)遇到“時(shí),表示最長(zhǎng)公共子序列和characterString1(i-1)與characterString2(j)的最長(zhǎng)公共子序列相同;當(dāng)遇到“時(shí),表示最長(zhǎng)公共子序列和characterString1(i)與characterString2(j-1)的最長(zhǎng)公共子序列相同。如下圖:時(shí)間復(fù)雜度公式:代碼實(shí)現(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)/得到最長(zhǎng)公共子序列 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. 備忘錄算法實(shí)現(xiàn): 備忘錄算法是從頂向下計(jì)算最優(yōu)解的思想,備忘錄方法的控制結(jié)構(gòu)與直接遞歸方法的控制結(jié)構(gòu)相同,但備忘錄方法用一個(gè)表格來(lái)保存已解決的子問(wèn)題的答案,防止了相同問(wèn)題的重復(fù)求解。 代碼實(shí)現(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)兩個(gè)數(shù)組的對(duì)應(yīng)位置的字符相同時(shí),那么直接求解下一個(gè)位置,當(dāng)不同時(shí)取兩種情況中的最大值。時(shí)間復(fù)雜度公式:代碼實(shí)現(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兩個(gè)字符串的所有字串求出,并將這些字串相互比擬,直到找的最長(zhǎng)公共子序列為止,當(dāng)字符串的長(zhǎng)度很長(zhǎng)時(shí),所要求取的子串序列相當(dāng)多,故所開(kāi)銷(xiāo)的時(shí)間最多。四 實(shí)驗(yàn)結(jié)果分析: 當(dāng)輸入字符串長(zhǎng)度分別為20,20,34,78,98,145時(shí),在動(dòng)態(tài)規(guī)劃算法、備忘錄算法、遞歸算法得到的時(shí)間分別為0,0,0,0,16,22,0,16,34
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水處理設(shè)備租賃合同
- 2025工程項(xiàng)目合同模板
- 2025國(guó)外勞務(wù)合同模板
- 汽車(chē)租賃合同范本6篇
- 現(xiàn)代科技在心理健康節(jié)活動(dòng)中的運(yùn)用
- 小學(xué)生自主學(xué)習(xí)與探究性學(xué)習(xí)的互動(dòng)影響
- 二零二五年度風(fēng)力發(fā)電機(jī)組安裝與長(zhǎng)期運(yùn)維合同4篇
- 個(gè)人抵押合同書(shū)
- 2025年新科版選修4化學(xué)上冊(cè)月考試卷
- 2025年人教版必修2生物下冊(cè)月考試卷含答案
- (正式版)CB∕T 4552-2024 船舶行業(yè)企業(yè)安全生產(chǎn)文件編制和管理規(guī)定
- JBT 14588-2023 激光加工鏡頭 (正式版)
- 2024年四川省成都市樹(shù)德實(shí)驗(yàn)中學(xué)物理八年級(jí)下冊(cè)期末質(zhì)量檢測(cè)試題含解析
- 九型人格與領(lǐng)導(dǎo)力講義
- 廉潔應(yīng)征承諾書(shū)
- 2023年四川省成都市中考物理試卷真題(含答案)
- 泵車(chē)述職報(bào)告
- 2024年山西文旅集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 恢復(fù)中華人民共和國(guó)國(guó)籍申請(qǐng)表
- 管理期貨的趨勢(shì)跟蹤策略 尋找危機(jī)阿爾法
- 瀝青化學(xué)分析試驗(yàn)作業(yè)指導(dǎo)書(shū)
評(píng)論
0/150
提交評(píng)論