• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >数据结构 > 计算字符串的相似度

计算字符串的相似度

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了计算字符串长度函数,计算字符串的长度,c语言计算字符串长度,php计算字符串长度,如何计算字符串长度等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>

在看完《编程之美》一书的“计算字符串的相似度”一文后,对该书最后提出的问题作一点回忆与思考。

这里先将原问题再复述一遍:  

原文的问题描述:  许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:

1.修改一个字符(如把“a”替换为“b”);

2.增加一个字符(如把“abdd”变为“aebdd”);

3.删除一个字符(如把“travelling”变为“traveling”);

比如,对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g”的方式来达到目的。上面的两种方案,都仅需要一 次 。把这个操作所需要的次数定义为两个字符串的距离,而相似度等于“距离+1”的倒数。也就是说,“abcdefg”和“abcdef”的距离为1,相似度 为1/2=0.5。

给定任意两个字符串,你是否能写出一个算法来计算它们的相似度呢?

原文的分析与解法  

不难看出,两个字符串的距离肯定不超过它们的长度之和(我们可以通过删除操作把两个串都转化为空串)。虽然这个结论对结果没有帮助,但至少可以知道,任意两个字符串的距离都是有限的。

我们还是就住集中考虑如何才能把这个问题转化成规模较小的同样的子问题。如果有两个串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]的距离。

在这个题目中,我们并不在乎两个字符串变得相等之后的字符串是怎样的。所以,可以将上面的6个操作合并为:

1.一步操作之后,再将A[2,...,lenA]和B[1,...,lenB]变成相字符串。

2.一步操作之后,再将A[2,...,lenA]和B[2,...,lenB]变成相字符串。

3.一步操作之后,再将A[1,...,lenA]和B[2,...,lenB]变成相字符串。

这样,很快就可以完成一个递归程序。

 2 3 4  下一页</div> </div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 计算字符串的相似度

相关文章

  • 2017-06-28数据结构教程 第二十四课 遍历二叉树
  • 2017-06-28数据结构教程
  • 2017-06-28数据结构教程 第二十一课 树、二叉树定义及术语
  • 2018-08-06C++ 成绩排名算法
  • 2017-06-28数据结构C语言实现之二叉树
  • 2017-06-28数据结构教程 第四十课 总复习
  • 2017-06-28计算字符串的相似度
  • 2017-06-28RSA算法的实现(java版)
  • 2017-07-23【一步步学OpenGL26】-《法线贴图》
  • 2017-06-28数据结构教程 第九课 循环链表与双向链表

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 数据库理论:学习基于SQL数据库的算法
    • 数据结构教程 第十一课 栈的应用
    • C#算法设计与分析-寻找素数
    • HDU-2017 多校训练赛8-补题
    • 数据结构教程 第二十一课 树、二叉树定义及术语
    • 做幻方
    • 验证哥德巴赫猜想
    • 数据结构教程 第三十二课 哈希表(一)
    • 水仙花数的vfp实现
    • 数据结构教程 第三十四课 插入排序、快速排序

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有