06 2010 档案

摘要:在日常的需求设计中,遍历组合是一个常见的问题。  例如:现在有N个不同的数。要求在其中找到M个数,使得M个数之和为指定的S,求所有满足条件的组合。  这是一个很明显的遍历组合的问题。一般采用递推算法,求出满足条件的解。  这类问题一般都采用一个数组P,来存放解。遍历整个组合空间,来找出解(有可能是所有解、也可能是一个解,根据题目要求来定)  由于这类问题解法是固定的,故在此把该算法模块化。留待日后... 阅读全文
posted @ 2010-06-10 22:41 万仓一黍 阅读(4118) 评论(2) 推荐(1) 编辑
摘要:在“文本比较算法Ⅰ——LD算法”、“文本比较算法Ⅱ——Needleman/Wunsch算法”中介绍的LD算法和LCS算法都是基于动态规划的。它们的时间复杂度O(MN)、空间复杂度O(MN)(在基于计算匹配字符串情况下,是不可优化的。如果只是计算LD和LCS,空间占用可以优化到O(M))。 Nakatsu算法在计算匹配字符串的情况下,有着良好的时间复杂度O(N(M-P))和空间复杂度O(N2),而且在采取适当的优化手段时,可以将空间复杂度优化到O(N),这是一个很诱人的结果。下面将全面介绍Nakatsu算法。 字符串A和字符串B,计算LCS(A,B) 定义一:设M=Len(A),N=Len(B. 阅读全文
posted @ 2010-06-07 15:49 万仓一黍 阅读(7812) 评论(8) 推荐(6) 编辑
摘要:在“文本比较算法Ⅰ——LD算法”中,介绍了编辑距离的计算。 在“文本比较算法Ⅱ——Needleman/Wunsch算法”中,介绍了最长公共子串的计算。 在给定的字符串A和字符串B,LD(A,B)表示编辑距离,LCS(A,B)表示最长公共子串的长度。 如何来度量它们之间的相似度呢? 不妨设S(A,B)来表示字符串A和字符串B的相似度。那么,比较合理的相似度应该满足下列性质。 性质一:0≤S(A,B)≤100%,0表示完全不相似,100%表示完全相等 性质二:S(A,B)=S(B,A) 目前,网上介绍的各种相似度的计算,都有各自的不尽合理的地方。 计算公式一:S(A,B)=1/(LD(A,B)+. 阅读全文
posted @ 2010-06-04 09:29 万仓一黍 阅读(14520) 评论(4) 推荐(5) 编辑
摘要:在“文本比较算法Ⅰ——LD算法”中介绍了基于编辑距离的文本比较算法——LD算法。 本文介绍基于最长公共子串的文本比较算法——Needleman/Wunsch算法。 还是以实例说明:字符串A=kitten,字符串B=sitting 那他们的最长公共子串为ittn(注:最长公共子串不需要连续出现,但一定是出现的顺序一致),最长公共子串长度为4。 定义: LCS(A,B)表示字符串A和字符串B的最长公共子串的长度。很显然,LSC(A,B)=0表示两个字符串没有公共部分。 Rev(A)表示反转字符串A Len(A)表示字符串A的长度 A+B表示连接字符串A和字符串B 性质: LCS(A,A)=Len. 阅读全文
posted @ 2010-06-03 09:38 万仓一黍 阅读(30180) 评论(14) 推荐(9) 编辑
摘要:在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。 文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异。目前,主流的比较文本之间的差异主要有两大类。一类是基于编辑距离(Edit Distance)的,例如LD算法。一类是基于最长公共子串的(Longest Common Subsequence),例如Needleman/Wunsch算法等。 LD算法(Levenshtein Distance)又成为编辑距离算法(Edit Distance)。他是以字符串A通过插入字符、删除字符、替换字符变成另一个字符串B,那么操作的过程的次数表示两个字符串的差... 阅读全文
posted @ 2010-06-01 14:04 万仓一黍 阅读(28993) 评论(19) 推荐(11) 编辑

点击右上角即可分享
微信分享提示