i=m,j=n;
while(1)
{if(i==0││j==0) break;
if(b[i][j]== '\\ '){
temp[h++]=x[i]; //反序記錄最長公共子序列到temp中
i=i-1,j=j-1;
}
else
if(b[i][j]== '│ ')
i=i-1;
else
j=j-1;}
cout < < "\nx[ " <
for(i=h-1;i> =0;i--) //格式化輸出最長公共子序列
if(i==h-1)
if(h==1)
cout < < "LCS: < " <
else
cout < < "LCS: < " <
else
if(i==0)
cout < < ", " <
else
cout < < ", " <
cout < < "\n " <
}
三、運(yùn)算結(jié)果
其實(shí)它的最長公共子序列不止一個(gè),這里只輸出了其中的一個(gè)。
四、總結(jié)分析
在這個(gè)具體的算法中,還有可以改進(jìn)的地方,比如在具體的求最大公共子序列中,可以不必要MAX的宏定義,只需將各數(shù)組設(shè)為具體的長度就可以節(jié)約不少的空間,大大降低程序的空間復(fù)雜度,但是為了鍵盤輸入任意字符串,犧牲了很多的內(nèi)存空間。在鍵盤輸入字符串時(shí),可以不用循環(huán)賦值,直接用 cin> > x;cin> > y;這樣就可以將這部分的時(shí)間復(fù)雜度從O(m+n)降到O(2),但有一個(gè)相關(guān)的問題沒解決,所以我沒這樣賦值。程序總的時(shí)間復(fù)雜度為:O(mn+3m+ 3n).
相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試精華備考資料匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |