C#实现Levenshtein distance最小编辑距离算法

Levenshtein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致。该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑距离,有下列的公式。

其中d[i-1,j]+1代表字符串s2插入一个字母才与s1相同,d[i,j-1]+1代表字符串s1删除一个字母才与s2相同,然后当xi=yj时,不需要代价,所以和上一步d[i-1,j-1]代价相同,否则+1,接着d[i,j]是以上三者中最小的一项。

算法实现(C#):

假设两个字符串分别为source,target,其长度分别为columnSize,rowSize,首先申请一个(columnSize+1)*(rowSize+1)大小的矩阵,然后将第一行和第一列初始化,matrix[i,0]=i,matrix[0,j]=j,接着就按照公式求出矩阵中其他元素,结束后,两个字符串之间的编辑距离就是matrix[rowSize, columnSize]的值,代码如下:

    public class StringComparator
    {
        public static int LevenshteinDistance(string source, string target)
        {
            int columnSize = source.Length;
            int rowSize = target.Length;
            if (columnSize == 0)
            {
                return rowSize;
            }
            if (rowSize == 0)
            {
                return columnSize;
            }
            int[,] matrix = new int[rowSize + 1, columnSize + 1];
            for (int i = 0; i <= columnSize; i++)
            {
                matrix[0, i] = i;
            }
            for (int j = 1; j <= rowSize; j++)
            {
                matrix[j, 0] = j;
            }
            for (int i = 0; i < rowSize; i++)
            {
                for (int j = 0; j < columnSize; j++)
                {
                    int sign;
                    if (source[j].Equals(target[i]))
                        sign= 0;
                    else
                        sign = 1;
                    matrix[i + 1, j + 1] = Math.Min(Math.Min(matrix[i, j] +  sign, matrix[i + 1, j]), matrix[i, j + 1] + 1);
                }
            }

            return matrix[rowSize, columnSize];
        }

        public static float StringSimilarity(string source, string target)
        {
            int distance = LevenshteinDistance(source, target);
            float maxLength = Math.Max(source.Length, target.Length);

            return (maxLength - distance) / maxLength;
        }
    }
时间: 2024-12-23 14:35:35

C#实现Levenshtein distance最小编辑距离算法的相关文章

Levenshein distance最小编辑距离算法实现

Levenshein 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,

Levenshtein距离【编辑距离算法】字符串相似度算法

指两个字串之间,有一个转成另一个所需的最少编辑操作的次数. 算法过程 str1或str2的长度为0返回另一个字符串的长度. if(str1.length==0) return str2.length; if(str2.length==0) return str1.length; 初始化(n+1)*(m+1)的矩阵d,并让第一行和列的值从0开始增长. 扫描两字符串(n*m级的),如果:str1[i] == str2[j],用temp记录它,为0.否则temp记为1.然后在矩阵d[i,j]赋于d[i

java文本相似度计算(Levenshtein Distance算法(中文翻译:编辑距离算法))----代码和详解

算法代码实现: package com.util; public class SimFeatureUtil { private static int min(int one, int two, int three) { int min = one; if (two < min) { min = two; } if (three < min) { min = three; } return min; } public static int ld(String str1, String str2)

字符串相似度算法(编辑距离算法 Levenshtein Distance)(转)

在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录. 据百度百科介绍: 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将kitten一字转成sitting: sitten (k→s) sittin (e→i) sitting (→g) 俄罗斯科学家V

Minimum edit distance(levenshtein distance)(最小编辑距离)初探

最小编辑距离的定义:编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将kitten一字转成sitting: sitten(k→s) sittin(e→i) sitting(→g) 俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念. Thewords `computer' and `commuter' are

Levenshtein distance 编辑距离算法

这几天再看 virtrual-dom,关于两个列表的对比,讲到了 Levenshtein distance 距离,周末抽空做一下总结. Levenshtein Distance 介绍 在信息理论和计算机科学中,Levenshtein 距离是用于测量两个序列之间的差异量(即编辑距离)的度量.两个字符串之间的 Levenshtein 距离定义为将一个字符串转换为另一个字符串所需的最小编辑数,允许的编辑操作是单个字符的插入,删除或替换. 例子 ‘kitten’和’sitten’之间的 Levensht

计算两组标签相似度算法——levenshtein distance 编辑距离算法

标签在数据分析中起到很重要的作用,给用户打标签,给商品打标签,给新闻打标签,好的标签可以为我们后期分析数据时提供很大的便利.有时我们需要计算两个对象之间标签的相似度.目前学习的算法是levenshtein distance 编辑距离算法. 代码示例: //标签相似度 public static double levenshtein(String s1, String s2) { System.out.println("levenshtein str1:"+s1+" str2:

通俗解析莱文斯坦距离(Levenshtein Distance)计算原理(最小编辑距离)

[版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 最近看到一些动态规划的东西讲到莱文斯坦距离(编辑距离)的计算,发现很多都讲的不是很清楚,比较难理解,自己思考过后重新给大家讲解一下: 维基百科解析:莱文斯坦距离,又称Levenshtein距离,是编辑距离的一种.指两个字串之间,由一个转成另一个所需的最少编辑操作次数.允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.例如将kitten转成sittin

Levenshtein Distance莱文斯坦距离算法来计算字符串的相似度

转 理解起来不难,但是很实用. 核心公式就是下面:             (1) 1.百度百科介绍: Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数. 许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance. 2.用途 模糊查询 3.实现过程 a.首先是有两个字符串,这里写一个简单的 abc和abe b.将