




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)項(xiàng)目:說(shuō)明:若給定序列X={x1,x2,…,xm},則另一序列Z={z1,z2,…,zk},是X的子序列是指存在一個(gè)嚴(yán)格遞增下標(biāo)序列{i1,i2,…,ik}使得對(duì)于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相應(yīng)的遞增下標(biāo)序列為{2,3,5,7}。給定2個(gè)序列X和Y,當(dāng)另一序列Z既是X的子序列又是Y的子序列時(shí),稱Z是序列X和Y的公共子序列。設(shè)計(jì)要求:請(qǐng)使用C語(yǔ)言編程,設(shè)計(jì)一個(gè)有效的算法解決下述問(wèn)題:給定2個(gè)序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最長(zhǎng)公共子序列。設(shè)計(jì)提示:設(shè)序列X={x1,x2,…,xm}和Y={y1,y2,…,yn}的最長(zhǎng)公共子序列為Z={z1,z2,…,zk},則(1)若xm=yn,則zk=xm=yn,且zk-1是xm-1和yn-1的最長(zhǎng)公共子序列。(2)若xm≠yn且zk≠xm,則Z是xm-1和Y的最長(zhǎng)公共子序列。(3)若xm≠yn且zk≠yn,則Z是X和yn-1的最長(zhǎng)公共子序列。由此可見(jiàn),2個(gè)序列的最長(zhǎng)公共子序列包含了這2個(gè)序列的前綴的最長(zhǎng)公共子序列。由最長(zhǎng)公共子序列問(wèn)題的最優(yōu)子結(jié)構(gòu)性質(zhì)建立子問(wèn)題最優(yōu)值的遞歸關(guān)系。用c[i][j]記錄序列和的最長(zhǎng)公共子序列的長(zhǎng)度。其中,Xi={x1,x2,…,xi};Yj={y1,y2,…,yj}。當(dāng)i=0或j=0時(shí),空序列是Xi和Yj的最長(zhǎng)公共子序列。故此時(shí)C[i][j]=0。其他情況下,由最優(yōu)子結(jié)構(gòu)性質(zhì)可建立遞歸關(guān)系如下:課程設(shè)計(jì)目的:用c語(yǔ)言編程列出解決的方法,復(fù)習(xí)c語(yǔ)言的用法,提高動(dòng)手實(shí)踐能力課程設(shè)計(jì)內(nèi)容需求分析:本演示程序中,輸入的x序列和y序列是任意的,當(dāng)然是在不超過(guò)MAXSIZE的前提下進(jìn)行的;演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)的終端上顯示“提示信息”之后,由用戶在鍵盤(pán)上輸入相應(yīng)數(shù)據(jù)(即X序列和Y序列)測(cè)試數(shù)據(jù)x序列:ADJdjfk48*&*dfj*&hj6GHh%$y序列:AhdhGHGF67HGHG^%&HGF%$輸出:Adh6GH%$x序列:SDJFKJdkjfj^&*UJGHJ&^$y序列:SHJhjhd^&657HGH^$輸出:SJd^&GH^$(3)其余省略概要設(shè)計(jì)voidlcs_length(char*x,char*y,intc[][MAXSIZE])c[i,j]記錄序列Xi和Yj的最長(zhǎng)公共子序列的長(zhǎng)度根據(jù)下面條件,構(gòu)造類(lèi)似圖lcs_length的表圖Lcs_length2.intlcs(intc[][MAXSIZE],char*x,char*y,intlen_x,intlen_y,char*lcs_arr)把最長(zhǎng)公共子序列存儲(chǔ)在lcs_arr中,并返回子序列的長(zhǎng)度詳細(xì)設(shè)計(jì)元素類(lèi)型:C[i][j]記錄Xi和Yj序列的最長(zhǎng)公共子序列長(zhǎng)度Lcs_arr數(shù)組存儲(chǔ)最長(zhǎng)公共子序列的元素每個(gè)模塊的分析主程序模塊:intmain(void){inti,c;charx[MAXSIZE],y[MAXSIZE];while(1){printf("'y'tocontinue,andyoucaninputlistofxandy;'n'tostop:");c=getchar();if(c=='n'){ printf("Areyousuretoquit,'y'toquit,'n'tocontinue:"); getchar(); c=getchar(); if(c=='y'){ exit(1); } elseif(c=='n'){ getchar();printf("Pleaseinputthearrayofx(like:ABCDEF):");if(fgets(x,sizeof(x),stdin)==NULL)exit(1);printf("Pleaseinputthearrayofy(like:ABCDEF):");if(fgets(y,sizeof(y),stdin)==NULL)exit(1);intlen_x=strlen(x);intlen_y=strlen(y);intc[MAXSIZE][MAXSIZE];lcs_length(x,y,c);printf("Thelongestchildsequenceofxandyare:");lcs(c,x,y,len_x,len_y);printf("\n");}else{printf("theerrorinput,youshouldinput'y'or'n'\n\n");getchar();}} elseif(c=='y'){getchar();printf("Pleaseinputthearrayofx(like:ABCDEF):");if(fgets(x,sizeof(x),stdin)==NULL)exit(1);printf("Pleaseinputthearrayofy(like:ABCDEF):");if(fgets(y,sizeof(y),stdin)==NULL)exit(1);intlen_x=strlen(x);intlen_y=strlen(y);intc[MAXSIZE][MAXSIZE];lcs_length(x,y,c);printf("Thelongestchildsequenceofxandyare:");lcs(c,x,y,len_x,len_y);printf("\n");}else{printf("theerrorinput,youshouldinput'y'or'n'\n\n");getchar();}}return0;}構(gòu)造lcs_length表模塊//createthelcs_lengthtablevoidlcs_length(char*x,char*y,intc[][MAXSIZE]){inti,j;intlen_x=strlen(x);intlen_y=strlen(y);//Allofthefirstcolumnare0for(i=0;i<=len_x;++i)c[i][0]=0;//Allofthefirstroware0for(i=0;i<=len_y;++i)c[0][i]=0;for(i=1;i<=len_x;++i)for(j=1;j<=len_y;++j){//Thesituation:c[i][j]=c[i-1][j-1]+1(i,j>0;Xi=Yj)if(x[i-1]==y[j-1])c[i][j]=c[i-1][j-1]+1;//Thesituation:c[i][j]=max(c[i][j-1],c[i-1][j])(i,j>0;Xi!=Yi)elseif(c[i-1][j]>=c[i][j-1])c[i][j]=c[i-1][j];elsec[i][j]=c[i][j-1];}}找出最長(zhǎng)子序列模塊voidlcs(intc[][MAXSIZE],char*x,char*y,intlen_x,intlen_y){inti,j;if(len_x==0||len_y==0)return;if(x[len_x-1]==y[len_y-1]){lcs(c,x,y,len_x-1,len_y-1);printf("%c",x[len_x-1]);}elseif(c[len_x-1][len_y]>=c[len_x][len_y-1])lcs(c,x,y,len_x-1,len_y);elselcs(c,x,y,len_x,len_y-1);}函數(shù)調(diào)用關(guān)系圖main()main()lcs_length()lcs()完整的程序#include<stdio.h>#include<string.h>#include<stdlib.h>#defineMAXSIZE100//createthelcs_lengthtablevoidlcs_length(char*x,char*y,intc[][MAXSIZE]){inti,j;intlen_x=strlen(x);intlen_y=strlen(y);//Allofthefirstcolumnare0for(i=0;i<=len_x;++i)c[i][0]=0;//Allofthefirstroware0for(i=0;i<=len_y;++i)c[0][i]=0;for(i=1;i<=len_x;++i)for(j=1;j<=len_y;++j){//Thesituation:c[i][j]=c[i-1][j-1]+1(i,j>0;Xi=Yj)if(x[i-1]==y[j-1])c[i][j]=c[i-1][j-1]+1;//Thesituation:c[i][j]=max(c[i][j-1],c[i-1][j])(i,j>0;Xi!=Yi)elseif(c[i-1][j]>=c[i][j-1])c[i][j]=c[i-1][j];elsec[i][j]=c[i][j-1];}}voidlcs(intc[][MAXSIZE],char*x,char*y,intlen_x,intlen_y){inti,j;if(len_x==0||len_y==0)return;if(x[len_x-1]==y[len_y-1]){lcs(c,x,y,len_x-1,len_y-1);printf("%c",x[len_x-1]);}elseif(c[len_x-1][len_y]>=c[len_x][len_y-1])lcs(c,x,y,len_x-1,len_y);elselcs(c,x,y,len_x,len_y-1);}intmain(void){inti,c;charx[MAXSIZE],y[MAXSIZE];while(1){printf("'y'tocontinue,andyoucaninputlistofxandy;'n'tostop:");c=getchar();if(c=='n'){ printf("Areyousuretoquit,'y'toquit,'n'tocontinue:"); getchar(); c=getchar(); if(c=='y'){ exit(1); } elseif(c=='n'){ getchar();printf("Pleaseinputthearrayofx(like:ABCDEF):");if(fgets(x,sizeof(x),stdin)==NULL)exit(1);printf("Pleaseinputthearrayofy(like:ABCDEF):");if(fgets(y,sizeof(y),stdin)==NULL)exit(1);intlen_x=strlen(x);intlen_y=strlen(y);intc[MAXSIZE][MAXSIZE];lcs_length(x,y,c);printf("Thelongestchildsequenceofxandyare:");lcs(c,x,y,len_x,len_y);printf("\n");}else{printf("theerrorinput,youshouldinput'y'or'n'\n\n");getchar();}} elseif(c=='y'){getchar();printf("Pleaseinputthearrayofx(like:ABCDEF):");if(fgets(x,sizeof(x),stdin)==NULL)exit(1);printf("Pleaseinputthearrayofy(like:ABCDEF):");if(fgets(y,sizeof(y),stdin)==NULL)exit(1);intlen_x=strlen(x);intlen_y=strlen(y);intc[MAXSIZE][MAXSIZE];lcs_length(x,y,c);printf("Thelongestchildse
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美容院試用期勞動(dòng)合同樣本二零二五年
- 互聯(lián)網(wǎng)行業(yè)實(shí)習(xí)生管理方案措施
- 股東借款合同范例大全
- 2025年溫室節(jié)能遮蔭保溫幕合作協(xié)議書(shū)
- 二零二五簽約主播合同范例
- 自適應(yīng)參數(shù)調(diào)整機(jī)制-全面剖析
- 2025年中學(xué)教師資格考試《綜合素質(zhì)》教育研究方法案例分析題庫(kù)解析及答案試卷
- 2025年安全生產(chǎn)標(biāo)準(zhǔn)化建設(shè)考試題庫(kù):安全生產(chǎn)標(biāo)準(zhǔn)化建設(shè)安全生產(chǎn)標(biāo)準(zhǔn)化建設(shè)案例分析試題
- 2025年小學(xué)語(yǔ)文畢業(yè)升學(xué)考試全真模擬卷(口語(yǔ)交際與綜合實(shí)踐)實(shí)戰(zhàn)演練
- 2025年安全評(píng)價(jià)師考試模擬試題及答案解析集
- 部編版二年級(jí)下冊(cè)語(yǔ)文課件小企鵝心靈成長(zhǎng)故事
- FZ/T 07019-2021針織印染面料單位產(chǎn)品能源消耗限額
- 初中生職業(yè)生涯規(guī)劃課件兩篇
- 低利率時(shí)代家庭財(cái)富管理課件
- 北京七年級(jí)下學(xué)期生物期中考試試卷
- 拖欠房租起訴書(shū)【5篇】
- 護(hù)理人員儀容儀表及行為規(guī)范
- 汽車(chē)品牌馬自達(dá)課件
- 第六章廣播電視的傳播符號(hào)
- 儀器設(shè)備自校規(guī)程
- 蘇教版五下數(shù)學(xué)小數(shù)報(bào)全套高清晰含答案
評(píng)論
0/150
提交評(píng)論