摘要: 在日常的需求设计中,遍历组合是一个常见的问题。  例如:现在有N个不同的数。要求在其中找到M个数,使得M个数之和为指定的S,求所有满足条件的组合。  这是一个很明显的遍历组合的问题。一般采用递推算法,求出满足条件的解。  这类问题一般都采用一个数组P,来存放解。遍历整个组合空间,来找出解(有可能是所有解、也可能是一个解,根据题目要求来定)  由于这类问题解法是固定的,故在此把该算法模块化。留待日后... 阅读全文
posted @ 2010-06-10 22:41 万仓一黍 阅读(4096) 评论(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 万仓一黍 阅读(7723) 评论(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 万仓一黍 阅读(14425) 评论(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 万仓一黍 阅读(30023) 评论(14) 推荐(9) 编辑
摘要: 在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。 文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异。目前,主流的比较文本之间的差异主要有两大类。一类是基于编辑距离(Edit Distance)的,例如LD算法。一类是基于最长公共子串的(Longest Common Subsequence),例如Needleman/Wunsch算法等。 LD算法(Levenshtein Distance)又成为编辑距离算法(Edit Distance)。他是以字符串A通过插入字符、删除字符、替换字符变成另一个字符串B,那么操作的过程的次数表示两个字符串的差... 阅读全文
posted @ 2010-06-01 14:04 万仓一黍 阅读(28618) 评论(19) 推荐(11) 编辑
摘要: 目前,国内主流的搜索引擎无外乎GOOGLE、BAIDU、BING等。  这些搜索引擎都有一个共同点,就是都是基于文本搜索。例如:搜索“SHGetFileInfo”。搜索引擎会返回网页中包含“SHGetFileInfo”的网页。而我们搜索“SHGetFileInfo”时,更多想知道这个函数的直接用法或解释。虽然,上述搜索引擎也能... 阅读全文
posted @ 2010-05-25 17:59 万仓一黍 阅读(3152) 评论(1) 推荐(3) 编辑
摘要: 昨日,看了一篇文章“在举国哀悼之日,我仅技术角度分析开心网暂停游戏后恢复存在的问题”。  文章里讨论了游戏暂停,但是游戏里的时间没有暂停的问题。导致在游戏重开的时候,原本应该收获的“菜”已经腐烂一片了。这个原因的产生,实际上是由于游戏并没有实际上的暂停(服务器可不是说关就关的),只是把链接到服务器的请求转向到一个其他页面而已,所有的游戏数据仍然继续运... 阅读全文
posted @ 2010-04-23 08:35 万仓一黍 阅读(2145) 评论(17) 推荐(0) 编辑
摘要: 在上文“GDI+绘制自定义行距的文本的三种方法。”中,介绍了绘制自定义行间距的多行文本的方法。  在第三种的方法中,启用了GdipDrawDriverString这个函数。这个函数可以定义每个字符的位置,这是它的优点。不过它的缺点也比较明显。一是它定义的字符位置是以字符的左下角为基准的,和一般的概念是两样的。二是他对Font要求比较高,据说如果采用的是英文字体,在显示中文时... 阅读全文
posted @ 2010-04-22 09:14 万仓一黍 阅读(2997) 评论(1) 推荐(1) 编辑
摘要: 在.NET中,绘制图形和文本用的是GDI+。  在实际的应用中,绘制多行文本是比较常见的,而且有时还要求在绘制多行文本时能指定文本的行间距。如下图:    注:由于图太大,只截了左边部分的图,右边有一小部分没有截图。  上面这个示意图。一共18行文字,每行52个文字,行间距为1.5字符。  有关的GDI+的知识这里不再详细的介绍了。下面讲的是如何实现上面这个图的效果,给出三种实现方法。并比较他们的... 阅读全文
posted @ 2010-04-21 13:05 万仓一黍 阅读(8671) 评论(2) 推荐(1) 编辑
摘要: 了解C#的人对typeof这个关键字再熟悉不过了。它是获得对象的类别,返回值是type。  在VB2005中和typeof对位的是GetType。可是,GetType的使用却充满着魅惑性。先看看下面的代码。  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _   ... 阅读全文
posted @ 2010-04-19 18:50 万仓一黍 阅读(2664) 评论(3) 推荐(0) 编辑