Levenshtein distance最小编辑距离算法实现
来源:互联网 发布:台风战斗机 知乎 编辑:程序博客网 时间:2024/05/21 12:45
Levenshtein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致。该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑距离,有下列的公式。
其中d[i-1,j]+1代表字符串s2插入一个字母,d[i,j-1]+1代表字符串s1删除一个字母,然后当xi=yj时,不需要代价,所以和上一步d[i-1,j-1]代价相同,否则+1,接着d[i,j]是以上三者中最小的一项。
算法实现(Python):
假设两个字符串分别为s1,s2,其长度分别为m,n,首先申请一个(m+1)*(n+1)大小的矩阵,然后将第一行和第一列初始化,d[i,0]=i,d[0,j]=j,接着就按照公式求出矩阵中其他元素,结束后,两个字符串之间的编辑距离就是d[n,m]的值,代码如下:
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- __author__ = 'xanxus'
- s1, s2 = raw_input('String 1:'), raw_input('String 2:')
- m, n = len(s1), len(s2)
- colsize, matrix = m + 1, []
- for i in range((m + 1) * (n + 1)):
- matrix.append(0)
- for i in range(colsize):
- matrix[i] = i
- for i in range(n + 1):
- matrix[i * colsize] = i
- for i in range(n + 1)[1:n + 1]:
- for j in range(m + 1)[1:m + 1]:
- cost = 0
- if s1[j - 1] == s2[i - 1]:
- cost = 0
- else:
- cost = 1
- minValue = matrix[(i - 1) * colsize + j] + 1
- if minValue > matrix[i * colsize + j - 1] + 1:
- minValue = matrix[i * colsize + j - 1] + 1
- if minValue > matrix[(i - 1) * colsize + j - 1] + cost:
- minValue = matrix[(i - 1) * colsize + j - 1] + cost
- matrix[i * colsize + j] = minValue
- print matrix[n * colsize + m]
0 0
- Levenshtein distance最小编辑距离算法实现
- Levenshtein distance最小编辑距离算法实现
- Levenshtein distance最小编辑距离算法实现
- 编辑距离算法 Levenshtein Distance
- 编辑距离算法(Levenshtein distance)
- Minimum edit distance(levenshtein distance)(最小编辑距离)初探
- 编辑距离(Levenshtein Distance)
- 编辑距离(Levenshtein Distance)
- Levenshtein Distance(编辑距离)
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 字符串相似度算法 levenshtein distance 编辑距离算法
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 字符串相似度算法 levenshtein distance 编辑距离算法
- 字符串相似度算法 -- levenshtein distance 编辑距离算法
- Java算法之Levenshtein Distance(编辑距离)算法
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 字符串相似度算法(编辑距离Levenshtein Distance)
- iNLP源代码之编辑距离算法(Levenshtein distance)
- Ubuntu12.04上安装MySQL Server提示mysql-server : Depends: mysql-server-5.1
- 面试题10:二进制中1的个数
- Hadoop 运行 Wordcount程序
- hdoj1042(N!,大数乘)
- Xml特点,语法规范
- Levenshtein distance最小编辑距离算法实现
- S2SH+ajax+json-------(二)实现异步加载
- AndroidStudio实用插件收集
- 我自己对三维数组的理解
- ssh之struts2xml简单配置
- 拓扑排序模板
- POJ Power Network (dinic)
- SkipList 跳表
- C语言学习-通过柴田望洋的《明解C语言》(3)