2011年10月6日
摘要: 最长公共子串(LCS),有三种情况:1.公共子串的元素必须相邻. 2.公共子串的元素可以不相邻联单3. 求多个字符串而不是两个字符串的最长公共子串1.公共子串的元素必须相邻: LCS问题就是求两个字符串最长公共子串的问题。解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0。然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的位置.下面是字符串21232523311324和字符串312123223445的匹配矩阵,前者为X方向的,后者为Y方向的。不难找到,红色部分是最长的匹配子串。通过查找位置我们得到最长的匹配子串为:21232 0 0 0 1. 阅读全文
posted @ 2011-10-06 09:48 dartagnan 阅读(26160) 评论(1) 推荐(12) 编辑
摘要: 最长公共子序列与最长公共子串的区别在于最长公共子序列不要求在原字符串中是连续的,比如ADE和ABCDE的最长公共子序列是ADE。 我们用动态规划的方法来思考这个问题如是求解。首先要找到状态转移方程: 等号约定,C1是S1的最右侧字符,C2是S2的最右侧字符,S1‘是从S1中去除C1的部分,S2'是从S2中去除C2的部分。 LCS(S1,S2)等于下列3项的最大者: (1)LCS(S1,S2’) (... 阅读全文
posted @ 2011-10-06 09:37 dartagnan 阅读(547) 评论(0) 推荐(0) 编辑