字符串相似度的比较C#实现

由于最近的项目需要,有幸接触到了这方面的算法问题,字符串相似度,顾名思义,就是指两个字符串的相似程度。这一类的算法有很多,主要有编辑距离算法(Levenshtein Distance)、最长公共子串算法(CLS)、还有google的余弦算法。最终根据项目需求决定使用编辑距离算法(Levenshtein Distance),下面就来详细说明一下Levenshtein Distance的具体实现。

 

编辑距离算法最先是由俄国科学家Levenshtein提出的,所以这个算法也叫做Levenshtein Distance算法。用最简单的一句话来说明这个算法就是:通过插入、删除、替换方法将字符串A变成字符串B所有的步骤就是算法中提到的编辑距离,最简单的相似度即编辑距离的倒数。

 

例如:

字符串A字符串BA -> B编辑距离
abcdeabbde将字符串B的b替换字符串A的c1
abcdefgadcdbfg将字符串A第二位上的b变为d,将第五位上的e变为b2

 

该算法的具体实现有以下几个步骤:

1. 获取字符串A和字符串B的长度,分为记为A_Length和B_Length

    如果 A_Length = 0 则编辑距离为B_Length

    如果 B_Length = 0 则编辑距离为A_Length

    如果 A_Length != 0 且 B_Length != 0 那么构造一个(A_Length+1) x (B_Length+1)矩阵Matrix[A_Length+1,B_Length+1]

 

2. 初始化矩阵的第一行和第一列,从0开始逐位递增,如下图:

矩阵的序号1          2         3         ....       B_Length 
 0012.... B_Length 
 11xx
 22
 33
 ........ 
 A_LengthA_Length 

 

3. 从Matrix[1,1]开始逐位遍历矩阵Matrix即:

 

 

4. 如果A[i] = B[j] 则编辑距离为0

    如果A[i] != B[j] 则编辑距离为1

 

5. 更新矩阵单元格Matrix[i,j]的值,算法如下:

    a = Matrix[i-1,j] + 1

    b = Matrix[i,j-1] + 1

    c = Matrix[i-1,j-1] + 第四步骤中的编辑距离

    Matrix[i,j] = a,b,c中的最小值

 

6. 重复上述从3-5的步骤,最后得到单元格Matrix[A_Length,B_Length]的值即从字符串A到字符串B的编辑距离

 

具体C#实现如下

 

 

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
将电子设备插入带电系统是终端应用程序的必要要求。通常这称为“热插拔”或“热插拔”,但也可称为“带电插拔”。在将电子设备插入带电系统并完全通电并运行之前,需要对热插拔有基本了解。没有中断。根据应用程序的不同,这些要求可能更具挑战性。例如,在热交换过程中可能需要维护I/O的状态。由于系统具有高性能、高可靠性和高速性,因此必须始终保持系统的正常运行。一个这样的应用程序是一个独立磁盘冗余阵列(RAID)存储系统,它为数据可靠性提供了高性能,并且始终保持通电和通电是必不可少的。另一个常见的例子是USB,在那里你可以插入和拔掉电源。   Spartan:registered:7和更新版本的Xilinx FPGA在性能和功能之间有着关键的平衡。本机热交换功能不是一项功能,因为这会影响性能,这意味着您在设计实时系统时必须特别小心。此上下文中的活动系统描述了已通电的系统。作为Xilinx FPGA的一个例子,每个FPGA家族都有各自独有的电源排序建议,在热插拔过程中仍然必须遵循这些建议。除了电源序列建议外,应用程序可能需要在热交换事件期间达到有效的信号完整性级别。外部电路可能需要满足有效信号完整性的I/O要求;因此,您必须了解哪些规则和限制限制了Xilinx FPGA的热插拔功能。如果需要热插拔,那么设计一个稳定可靠的系统将面临更大的挑战。此应用程序说明最好用作在热交换类型的应用程序中使用Xilinx FPGA时需要考虑的事项的清单。   热插拔检查表用作热插拔Xilinx FPGA的一般经验法则。请注意,特定的Xilinx FPGA系列的要求略有不同。这些特定于设备的要求列在特定于设备的热交换信息中。Xilinxfpgas具有相同的CMOS I/O结构,但有一些独特的旧设备是不同的。Xilinx高速串行收发器的I/O结构与GPIO不同,但一般指南仍适用于热插拔。如果存在更具体的详细要求,请查看设备数据表。
Windows Usb热插拔是指在Windows操作系统中,当USB设备插入或拔出时,系统能够自动检测并做出相应的响应。在程序中实现USB热插拔的功能,可以通过注册USB设备信息和监测USB设备插拔事件来实现。 在程序初始化时,可以通过注册USB设备信息来响应USB热插拔事件。这可以通过调用RegisterDeviceNotification函数来实现。在注册USB设备信息时,需要指定设备类型为DBT_DEVTYP_DEVICEINTERFACE,并传入相应的设备接口信息。具体的注册过程可以参考引用\[1\]中的代码示例。 另外,还可以使用第三方库来实现USB转串口设备的热插拔检测。例如,可以使用CH343PT库中的接口CH343PT_SetDevNotify来实现USB转串口设备的热插拔检测。具体的使用方法可以参考引用\[3\]中的介绍。 总结起来,Windows Usb热插拔可以通过注册USB设备信息和监测USB设备插拔事件来实现。具体的实现方法可以根据需求选择使用系统提供的函数或第三方库来完成。 #### 引用[.reference_title] - *1* [windows下USB检测插拔状态](https://blog.csdn.net/qq_22642239/article/details/110451792)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [CH343PT库使用一>USB转串口设备的热插拔检测](https://blog.csdn.net/WCH_TechGroup/article/details/127514913)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值