加权编辑距离

在词项独立的矫正方法中,有一种叫做编辑距离的方法。

给定两个字符串s1和s2,两者的编辑距离定义为将s1转换成s2的最小编辑操作数。

这些编辑操作包括:

  1. 将一个字符插入字符串中
  2. 将一个字符从字符串中删除
  3. 将字符串中的一个字符替换为另外一个字符

对于加权的编辑距离,假定删除一个字符的权重为delCost,替换字符的权重定义为键盘上按键的曼哈顿距离dist[i][j],插入一个字符的代价为insertCost。

于是有

dp[i][j] = min(min(dp[i-1][j-1]+if(s1[i]==s2[j]) then 0 else dist[i][j],dp[i-1][j]+delCost),del[i][j-1]+delCost);

对于边界有dp[i][0] = i ; dp[0][j] = j * insertCost;


附代码如下:

//karsbin 2012.11.13

/*
 *加权编辑距离,动态规划
 *在搜索引擎拼写矫正中,通过键盘按键的曼哈顿距离给编辑距离赋权值
 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>
#include <ctype.h>

const int maxn = 1024 ;
int dist[32][32] ;
int dp[maxn][maxn] ;
int delCost = 6 ;	//删除一个字符的代价
int insertCost = 6
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值