package com.wanali.dynamic_planning;
/** * 最長公共自序列lcs(動態規劃求解)
* @author wan_ys
* * 2023年1月10日上午8:43:34
*/public class lcs ;
string y = new string ;
getlcslength(x, y);
} /**
* 計算lcs的長度
* @param x
* @param y
*/static void getlcslength(string x, string y)
//初始化第一行為0
for (int j = 0; j < n; j++)
/*從(1,1)開始往後比較x[i]==y[j],b[i][j]=c[i-1][j-1]+1;
* b[i-1][j]>=b[i][j-1],則該位置的箭頭向上指
* b[i][j-1]>b[i-1][j],則該位置的箭頭向左指
*/for (int i = 1; i < m; i++) else if (b[i - 1][j] >= b[i][j - 1]) else
}} //列印公共子串行的長度
for (int i = 0; i < m; i++)
system.out.println();
} //列印回溯方向
for (int i = 0; i < m; i++)
system.out.println();
} system.out.println("乙個最長公共自序列為:");
//注意這裡是m-1,n-1
getlcs(c, x, m-1, n-1);
} static void getlcs(string c, string x, int i, int j)
if (c[i][j] == "upleft") else if (c[i][j] == "up") else
}}
最長公共子串行(Java實現) 動態規劃
問題描述 給定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...
動態規劃 最長公共子串行
問題描述 我們稱序列z z1,z2,zk 是序列x x1,x2,xm 的子串行當且僅當存在嚴格上公升的序列 i1,i2,ik 使得對j 1,2,k,有xij zj。比如z a,b,f,c 是x a,b,c,f,b,c 的子串行。現在給出兩個序列x和y,你的任務是找到x和y的最大公共子串行,也就是說要...
動態規劃 最長公共子串行
兩個序列的最長公共子序 lcs longest common length 的 每個字元可以不連續,如x y 那麼它們的最長公共子串行為。這是乙個經典的動態規劃問題,著手點還是找到 最精髓的 狀態轉移方程 假設x,y兩個序列的前i,j個位置的最大子串行已經找到為r i j 自底往上 那麼x i 與y...