最長(zhǎng)公共子序列java源程序代碼_第1頁(yè)
最長(zhǎng)公共子序列java源程序代碼_第2頁(yè)
最長(zhǎng)公共子序列java源程序代碼_第3頁(yè)
最長(zhǎng)公共子序列java源程序代碼_第4頁(yè)
最長(zhǎng)公共子序列java源程序代碼_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

以下為最長(zhǎng)公共子序列問(wèn)題的兩種程序,分別通過(guò)兩種算法實(shí)現(xiàn):方法一:publicclassLcsLength{ publicstaticintlcsLength(char[]x,char[]y,int[][]b) { intm=x.length; intn=y.length; int[][]c=newint[m+1][n+1]; for(inti=0;i<=m;i++)c[i][0]=0; for(inti=0;i<=n;i++)c[0][i]=0; for(inti=1;i<=m;i++) for(intj=1;j<=n;j++) { if(x[i-1]==y[j-1]) { c[i][j]=c[i-1][j-1]+1; b[i][j]=1; } elseif(c[i-1][j]>=c[i][j-1]) { c[i][j]=c[i-1][j]; b[i][j]=2; } else { c[i][j]=c[i][j-1]; b[i][j]=3; } } inti=m;intj=n; lcs(i,j,x,b); returnc[m][n]; } publicstaticvoidlcs(inti,intj,char[]x,int[][]b) { if(i==0||j==0)return; if(b[i][j]==1) { lcs(i-1,j-1,x,b); System.out.print(x[i-1]+","); } elseif(b[i][j]==2)lcs(i-1,j,x,b); elselcs(i,j-1,x,b); } publicstaticvoidmain(Stringargs[]) { char[]x={'a','b','c','b','d','a','b'}; char[]y={'b','d','c','a','b','a'}; int[][]b=newint[x.length+1][y.length+1]; System.out.print("最長(zhǎng)公共子序列:"); intn=lcsLength(x,y,b); System.out.println(); System.out.println("其長(zhǎng)度為:"+n); }}方法二:packagecn.lgh;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.List;/***動(dòng)態(tài)規(guī)劃法解最長(zhǎng)公共子系列。*@author藍(lán)冠恒*/publicclassLCS{ publicstaticList<Character>resultList=newArrayList<Character>(); /** *計(jì)算最優(yōu)值 *@paramx *字符系列數(shù)組 *@paramy *字符系列數(shù)組 *@paramc *存儲(chǔ)x和y最長(zhǎng)公共子系列長(zhǎng)度數(shù)組 *@paramb *記錄c中元素對(duì)應(yīng)子問(wèn)題的解的數(shù)組 */ publicstaticvoidlcsLength(charx[],chary[],int[][]c,int[][]b){ intm=x.length-1; intn=y.length-1; resultList.clear(); for(inti=1;i<=m;i++){ c[i][0]=0; } for(inti=1;i<=n;i++){ c[0][i]=0; } for(inti=1;i<=m;i++){ for(intj=1;j<=n;j++){ if(x[i]==y[j]){ c[i][j]=c[i-1][j-1]+1; b[i][j]=1; }elseif(c[i-1][j]>=c[i][j-1]){ c[i][j]=c[i-1][j]; b[i][j]=2; }else{ c[i][j]=c[i][j-1]; b[i][j]=3; } } } } /** *構(gòu)造最長(zhǎng)公共子系列 *@parami *數(shù)組下標(biāo) *@paramj *數(shù)組下標(biāo) *@paramx *字符系列數(shù)組 *@paramb *記錄c中元素對(duì)應(yīng)子問(wèn)題的解的數(shù)組 */ publicstaticvoidlcs(inti,intj,charx[],int[][]b){ if(i==0||j==0){ return; } if(b[i][j]==1){ lcs(i-1,j-1,x,b); resultList.add(x[i]); }elseif(b[i][j]==2){ lcs(i-1,j,x,b); }else{ lcs(i,j-1,x,b); } } publicstaticvoidmain(Stringarg[]){ Stringinput; char[]x; char[]y; BufferedReaderin=newBufferedReader(newInputStreamReader(System.in)); do{ try{ do{ System.out.println("請(qǐng)輸入第一串字符系列(按數(shù)字鍵1退出系統(tǒng)):"); input=in.readLine().trim(); }while(input.equals("")); if(input.equals("1")){ break; } input="S"+input; x=input.toCharArray(); do{ System.out.println("請(qǐng)輸入第二串字符系列(按數(shù)字鍵1退出系統(tǒng)):"); input=in.readLine().trim(); }while(input.equals("")); if(input.equals("1")){ break; } input="S"+input; y=input.toCharArray(); int[][]b=newint[x.length][y.length]; int[][]c=newint[x.length][y.length]; lcsLength(x,y,c,b);//計(jì)算最優(yōu)值 lcs(x.length-1,y.length-1,x,b);//構(gòu)造最長(zhǎng)公共子系列 intsize=resultList.size(); System.out.print("解得最長(zhǎng)公共子系列為:"); for(i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論