计算字符串相似度.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
写书评,赢取《编程之美--微软技术面试心得》/BCZM.asp 1 计算字符串的相似度 许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似 程度。我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1. 修改一个字符 (如把“a”替换为“b”)。 2. 增加一个字符 (如把“abdd”变为“aebdd”)。 3. 删除一个字符(如把“travelling”变为“traveling”)。 比如,对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g” 的方式来达到目的。上面的两种方案,都仅需要一次操作。把这个操作所需要的次数定 义为两个字符串的距离,而相似度等于“距离+1”的倒数。也就是说,“abcdefg”和“abcdef” 的距离为1 ,相似度为1 / 2 = 0.5。 给定任意两个字符串,你是否能写出一个算法来计算出它们的相似度呢? 写书评,赢取《编程之美--微软技术面试心得》/BCZM.asp 2 分析与解法 不难看出,两个字符串的距离肯定不超过它们的长度之和(我们可以通过删除操作 把两个串都转化为空串)。虽然这个结论对结果没有帮助,但至少可以知道,任意两个 字符串的距离都是有限的。 我们还是应该集中考虑如何才能把这个问题转化成规模较小的同样的问题。如果有 两个串A=xabcdae 和B=xfdfa ,它们的第一个字符是相同的,只要计算A [2, …, 7] = abcdae 和B [2, …, 5] = fdfa 的距离就可以了。但是如果两个串的第一个字符不相同,那么可以 进行如下的操作(lenA 和lenB 分别是A 串和B 串的长度): 1 .删除A 串的第一个字符,然后计算A [2, …, lenA ]和B [1, …, lenB]的距离。 2 .删除B 串的第一个字符,然后计算A [1, …, lenA ]和B [2, …, lenB]的距离。 3 .修改A 串的第一个字符为B 串的第一个字符,然后计算A [2, …, lenA ]和B [2, …, lenB]的距离。 4 .修改B 串的第一个字符为A 串的第一个字符,然后计算A [2, …, lenA ]和B [2, …, lenB]的距离。 5 .增加B 串的第一个字符到A 串的第一个字符之前,然后计算A [1, …, lenA ]和 B [2, …, lenB]的距离。 6 .增加A 串的第一个字符到B 串的第一个字符之前,然后计算A [2, …, lenA ]和 B [1, …, lenB]的距离。 写书评,赢取《编程之美--微软技术面试心得》/BCZM.asp 3 在这个题目中,我们并不在乎两个字符串变得相等之后的字符串是怎样的。所 以,可以将上面6 个操作合并为: 4. 一步操作之后,再将A [2, …, lenA ]和B [1, …, lenB]变成相同字符串。 5. 一步操作之后,再将A [1, …, lenA ]和B [2, …, lenB]变成相同字符串。 6. 一步操作之后,再将A [2, …, lenA ]和B [2, …, lenB]变成相同字符串。 这样,很快就可以完成一个递归程序: 写书评,赢取《编程之美--微软技术面试心得》/BCZM.asp 4 代码清单3-6 Int CalculateStringDistance(string strA, int pABegin, int pAEnd, string strB, int pBBegin, int pBEnd) { if(pABegin pAEnd)

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档