最長公共子序列

最長公共子序列問題:給定兩個序列X={x1,x2,....xm},    Y={y1,y2,yn},找出XY的最長公共子序列spa


 

1 最長公共子序列結構code

  1 xm=yn,則zk = xm = yn,且zk-1是xm-1和yn-1的最長公共子序列blog

  2 xm!=yn,zk!=xm,則Z是xm-1,yn的最長共公共子序列遞歸

  3 xm!=yn,zk!=yn,則Z是xm,yn-1的最長公共子序列class

2 子問題的遞歸結構di

  1 xm=yn時,找出xm-1,yn-1的最長公共子序列co

  2 xm!=yn時,找出xm 和 yn-1     或者   xm-1和yn的最長公共子序列background

3 計算最優值void

c[i][j]:存儲xi,yj的最長公共子序列長度

b[i][j]:記錄c[i][j]的值是由哪個子問題的解獲得的 

void LCSLength(int m,int n,char* x,int * * c,int * *b){ int i,j; for(i=1;i<=m;i++) c[i][0] = 0; for(i=1;i<=m;i++) c[o][i] = 0; for(i=1;i<=m;i++) for(j=1;j<=n;j++){ if(x[i] == y[j]){ c[i][j] = c[i-1][j-1];  b[i][j]=1; } else if(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; } } } 

耗時O(mn);

4 構造最長公共子序列

b[m][n]開始:

  值爲1:由xm-1,yn-1獲得

  值爲2:由xm-1,yn獲得

  值爲3:由xm,yn-1獲得

相關文章
相關標籤/搜索