动态规划思想在NLP及ML中都有很多应用,比如最佳路劲选取,如隐马模型,分词的需找最佳切分路劲。 这里给出一个最简单能表达这种思想的算法,最长公共字串(某些时候可以作为相似度的依据) static void Main(string[] args) { int max = LcsLen("我q北京", "我爱q北京"); Console.WriteLine(max); Console.ReadLine(); } static int LcsLen(String s1, String s2) { int[,] lenLCS = new int[s1.Length + 1, s2.Length + 1]; for (int i = 1; i <= s1.Length; i++) for (int j = 1; j <= s2.Length; j++) if (s1[i - 1] == s2[j - 1]) lenLCS[i, j] = 1 + lenLCS[i - 1, j - 1]; else lenLCS[i, j] = Math.Max(lenLCS[i - 1, j], lenLCS[i, j - 1]); return lenLCS[s1.Length, s2.Length]; }
public static void main(String[] args) { int max=lcsLen("我爱北京安门","我爱北京天安门"); System.out.println(max); } private static int lcsLen(String s1,String s2){ int[][] lenLCS=new int[s1.length()+1][s2.length()+1]; for (int i = 1; i <= s1.length(); i++) for (int j = 1; j <= s2.length(); j++) if(s1.charAt(i-1)==s2.charAt(j-1)) lenLCS[i][j]=1+lenLCS[i-1][j-1]; else lenLCS[i][j]=Math.max(lenLCS[i-1][j], lenLCS[i][j-1]); int max=lenLCS[s1.length()][s2.length()]; return max; }