最近專案中遇到lcs問題,於是研究了下,寫了乙個簡單的實現
public class longestcommonsubsequence )
private static map lcslength(string text1,string text2)else
}system.out.print(lengths[i][j]+" "+lenflags[i][j]+" ");}}
system.out.println();
}map map=new hashmap();
map.put("lengths", lengths);
map.put("lenflags", lenflags);
return map;
}/**
* 由最後乙個字元開始,判斷最後乙個字元是否屬於lcs,屬於則列印,不屬於,則通過lenflags判斷下乙個lcs在哪個結果集中
* @param lenflags 判斷最佳優子結構在哪個結果集
* @param text1 :
* @param text2 :
* @param text1lastindex :
* @param text2lastindex :
*/private static void getlcs(string lenflags,string text1,string text2,int text1lastindex,int text2lastindex)
string lenflag = lenflags[text1lastindex][text2lastindex];
string rtext1 = new string[text1lastindex];
string rtext2 = new string[text2lastindex];
system.arraycopy(text1, 0, rtext1, 0, text1lastindex);
system.arraycopy(text2, 0, rtext2, 0, text2lastindex);
if("leftup".equals(lenflag))elseelse}}
@suppresswarnings("rawtypes")
public static void main(string args)
}
LCS的動態規劃演算法
輸入 兩個字串 輸出 最長公共子串行 演算法思想 動態規劃 include include using namespace std string x,y 輸入串 int c 100 100 維護lcs length的陣列 int b 100 100 用於構造乙個最優解 int lcs len str...
動態規劃演算法
一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...
動態規劃演算法
動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...