"编辑距离" 在输入检测中的应用

        在office中输错了单词,office会在单词下方用红色波浪线标出来,你右击它,在菜单中会提示正确的单词拼法;在翻译词典中输入单词时拼错了某个字母,词典会智能的提示你可能想输入的单词。

        其实这里用到的是"编辑距离"的概念,根据维基百科的解释,编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。以begin为例,将它编辑为been,其中一种方案的步骤如下:1.删除g; 2.将i变为e。由于该方案经过了两次编辑操作,因此编辑距离就为2。编辑距离问题就是研究将一个字符串转成另一个字符串需要的最少操作次数。

算法实现

        实现计算编辑距离的算法,主要是采用动态规划的思想。

public static int GetDistance(string a, string b)
{
    char[] arr1 = a.ToCharArray();
    char[] arr2 = b.ToCharArray();

    int[,] D = new int[arr1.Length + 1, arr2.Length + 1];
    for (int i = 0; i <= arr1.Length; i++)
    {
        D[i, 0] = i;
    }
    for (int j = 0; j <= arr2.Length; j++)
    {
        D[0, j] = j;
    }

    for (int i = 1; i <= arr1.Length; i++)
    {
        for (int j = 1; j <= arr2.Length; j++)
        {
            D[i, j] = new int[]{
                D[i-1,j-1]+(arr1[i-1]==arr2[j-1]?0:1),
                D[i-1,j]+1,
                D[i,j-1]+1
            }.Min();
        }
    }
    return D[arr1.Length, arr2.Length];
}

算法应用

        到网上找一个英语词典的数据库,就可以实现错误检测的功能。用户输入一个单词后,当数据库中没有查找到该单词,则将编辑距离为1的单词显示给用户,供用户选择。

        当用户输入了正确的单词,则显示该单词的解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值