【問題描述】
給定2個序列x和y,當另一串行z既是x的子串行又是y的子串行時,稱z是序列x和y的公共子串行。
給定2個序列x=和y=,找出x和y的最長公共子串行。
【分析】最長公共子串行問題具有最優子結構性質
設x =
y =
及它們的最長子序列
z =
則1、若 xm = yn , 則 zk = xm = yn,且z[k-1] 是 x[m-1] 和 y[n-1] 的最長公共子串行
2、若 xm != yn ,且 zk != xm , 則 z 是 x[m-1] 和 y 的最長公共子串行
3、若 xm != yn , 且 zk != yn , 則 z 是 y[n-1] 和 x 的最長公共子串行
由性質匯出子問題的遞迴結構
當 i = 0 , j = 0 時 , c[i][j] = 0
當 i , j > 0 ; xi = yi 時 , c[i][j] = c[i-1][j-1] + 1
當 i , j > 0 ; xi != yi 時 , c[i][j] = max
【程式源**】
package sf;
public class 最長公共子串行問題
}class a;
char y= ;
int m=x.length;
int n=y.length;
int c=new int[x.length+1][y.length+1];
int b=new int[x.length][y.length];
char f= new char[3];
int p = 2;
void run()
void lcslenght(int m,int n,char x,char y,int c,int b)
else if(c[i-1][j]>=c[i][j-1])
else
}} }
void lcs(int i,int j,char x,int b)
else if(b[i][j]==2)
else
} void print()
} void show1()
system.out.println();
} }void show2() {
system.out.println("b[i][j]的值: ");
for(int i=0;i執行截圖:
Java最長公共子串行
問題描述 最長公共子串行定義 兩個或多個已知數列的子串行集合中最長的就是最長公共子串行。比如數列a abcdef 和b adefcb 那麼兩個數列的公共子串行集合有,其中最長 的就是adef,這就是最長公共子串行。注意 最長公共子串行的公共子串行裡的元素可以不相鄰,但是公共子字串必須是連線在一起的,...
動態規劃 最長公共子串行 最長公共子串C 實現
對乙個序列x和另乙個序列y,兩者的最長公共序列是,兩者最長的公共子串是 最長公共子串要求連續 用動態規劃實現最重要的是要找到遞迴方程或者迭代方程,只要把這個方程找出來了,對著這個方程想個幾十分鐘,就可以把 寫出來,然後再拿例子測試,寫出來的 基本就沒問題了。也許你第一次接觸 如何將方程轉化為 的問題...
動態規劃實現最長公共子串行
最長公共子串行的定義 1 子串行 給定兩個序列x 和序列z 若存在x的乙個嚴格遞增下標序列,使得對所有j 1,2,k,有x ij z j 則稱z是x的子串行。如 z 是x 的乙個子串行,相應下標序列為 2,3,5,7 2 公共子串行 對給定的兩個序列x和y,若序列z既是x的的子串行,也是y的子串行,...