



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、word最長公共子序列問題 一 實驗?zāi)康模?1. 加深對最長公共子序列問題算法的理解,實現(xiàn)最長公共子序列問題的求解算法;2. 通過本次試驗掌握將算法轉(zhuǎn)換為上機操作;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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國盆景行業(yè)發(fā)展趨勢規(guī)劃分析報告
- 柳州城市職業(yè)學(xué)院《城鄉(xiāng)規(guī)劃原理C》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東體育學(xué)院《有機化學(xué)I2》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州城市理工學(xué)院《交換原理與NGN》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年海南省安全員考試題庫附答案
- 遼寧工程技術(shù)大學(xué)《領(lǐng)導(dǎo)科學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東商業(yè)職業(yè)技術(shù)學(xué)院《生物化學(xué)與分子生物學(xué)(含遺傳學(xué))》2023-2024學(xué)年第二學(xué)期期末試卷
- 鄭州城市職業(yè)學(xué)院《英語高級視聽說》2023-2024學(xué)年第二學(xué)期期末試卷
- 德宏師范高等??茖W(xué)?!?0世紀(jì)西方文學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 湛江科技學(xué)院《土木工程施工技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 精密測量課程中的思政案例弘揚工匠精神助力科技強國
- 殘疾人就業(yè)服務(wù)
- 傳統(tǒng)的中國紋樣與飾品設(shè)計
- 工業(yè)園區(qū)消防培訓(xùn)課件
- 供水管網(wǎng)項目背景
- 淺層高效氣浮池技術(shù)說明
- 小學(xué)大觀念教學(xué):設(shè)計與實施
- 《安全原理》習(xí)題庫及參考答案
- 氮氣能耗估算表
- 分離工程授課教案
- 《HSK標(biāo)準(zhǔn)教程3》第10課
評論
0/150
提交評論