计算字符串相似度的矩阵算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算字符串相似度的矩阵算法
李 彬
(武汉理工大学计算机学院 湖北武汉 430070)
摘 要:用2个字符串滑动比较时匹配的字符数和2字符串滑动比较的重叠率定义了相似度的衡量指标,在确定一个字符串比另一个字符串少的情况下,设计了一种算法,试验结果表明该算法实现了在字符串匹配矩阵中确定插入空格的位置使相似度指标达到最大值,并且算法的计算次数也明显地减少。

该算法可以用于信息的模糊检索。

关键词:匹配率;相似度;匹配矩阵;信息量
中图分类号:TP301.6 文献标识码:B 文章编号:10042373X (2007)242106203
Matrix Arithmetic of Computing Strings ′Similar Degree
L I Bin
(School of Computer Science ,Wuhan University of Technology ,Wuhan ,430070,China )
Abstract :The similar degree is defined based on the number of matching chars and the overlaping ratio of two strings ′chars when two strings do comparison during gliding.Designing a arithmetic under the sistuation that make sure the length of one string is smaller than another strings ′and the position of inserting blank space in strings ′matching matrix makes similar degree gain the biggest value ,and the computation number is also decrease greatly.this arithmetic can be used for the misty in 2dex of the information.
K eywords :matching ratio ;similar degree ;matching matrix ;information quantity
收稿日期:2007206207
1 引 言
随着现代科学技术的发展,生物学中的DAN 序列的相似性比较可以用于亲子鉴定等,医学中应用病毒基因的相似性来诊治疾病。

与之相似,随着计算机的发展,字符串的相似问题也成了计算科学中一个非常重要的问题,也提出了很多关于字符串匹配和相似度的算法,现有的计算字符串相似度的方法按照计算所依据的特征的不同,可以划分为3种方法:基于字面相似的方法、基于统计关联的方法、基于语义相似的方法。

3种方法各有优缺点,还有人提出了综合考虑3种方法的多层特征方法[1]。

其中,基于字面相似的计算方法主要有基于编辑距离的计算方法[2]和基于相同字或词的方法[3]。

字符串序列相似度计算在异构数据库操作、音乐乐谱分析、基因序列分析[4]
、信
息检索等方面有较好的应用。

本文通过定义的字符串相似度的衡量指标,利用匹配矩阵对字符串的相似度进行计算。

对于长度不相等的字符串,通过插入空格的方法使字符串的长度相等,根据设计的算法确定空格的位置,使相似度的值达到最大,可以使模糊检索的信息更有意义。

2 计算字符串相似度的算法2.1 构造字符串相似程度的指标
给定2个长度相等的任意字符串Str1=“abcddacbcb ”和Str2=“aadaccbddc ”,对2个字符串在任意的位置比对:
a b c d d a c b c b
∼∼∼∼∼∼∼∼ a a d a c c b d d c
(字符中间没有空格)。

字符串的长度记为n (这里
n =10),相同字母(d ,a ,c )的个数记为m (这里m =3),两
字符串重叠的个数记为r (这里r =8)。

根据上面给出的数据,这里给出下面的定义:
定义1 重叠率2个长度相等的(包括在长度短的字符串中加入空格,使两个字符串长度相等的情况)字符串在字符串移动匹配的过程中,重叠字符串的个数与字符串的长度的比率,即L =r/n 。

定义2 匹配率2个长度相等的(包括在长度的短的字符串中加入空格,使其长度相等的情况)字符串在字符串移动匹配的过程中,对应位置字符相同的个数与字符串长度的比率,即M =m/n 。

定义3 相似度匹配率的平方与重叠率的乘积,即:
Q =M 2
L =(m 2
n
2)・
r
n 6
01
这样定义相似度是为了在匹配率相同的情况下,利用重叠率衡量相似度,同时减小重叠率对相似度的影响,因为相似度是应该依赖于匹配率的。

2.2 算法设计与分析2.2.1 算法原理
鉴于以上相似度指标Q 的定义,只需要考虑如何使匹配率最大,这样就可以得到最大的相似度。

如:
abcddacbcb
aadaccbddc …………aadaccbddc
保持上面的字符串不动,把下面的字符串自左向右移动,每到一个位置时计算Q 值,然后取Q 的最大值。

Str1的长度记为n 1,Str2的长度记为n 2,当Str2的尾字母和
Str1的首字母对齐的情况下计算相似度指标为Q 1,Str2
右移一位计算的相似度指标为Q 2,当Str2的首字母和
Str1的尾字母对齐的计算相似度指标为Q m (m =n 2+n 1-1),然后计算最大相似度Q max =max {Q 1,Q 2,…,Q m }。

2.2.2 算法实现
下面用2个字符串实现具体的算法。

字符串S1的长度为n 1,字符串S2的长度为n 2,设n 1>n 2,记S =n 1-n 2;具体的令S1=“abcddacbcbdadcabbdca ”,S2=“aadaccbd 2
dcabacd ”,则n 1=20,n 2=15,S =5。

下面所用的S1,S2,
n 1,n 2,S 都与这里的设置一致。

(1)如图1所示,将2个字符串按如下方式填写
:
图1 匹配图
图1中横向(首行)为字符串S1,纵向(首列)为字符串
S2,矩阵中元素(交叉点)为“1”,表示相匹配,否则为“0”(图1中只表示出非零元素)。

矩阵中划了一些斜线,斜线
所经过的单元格表示S1与S2相匹配的位置和匹配的情况。

第一条斜线必须覆盖字符串S2与S1的前n 2个字母匹配的情况,依次下去,一共有S +1条斜线。

图2,图3是第1条斜线与第2条斜线的表示的情况,其余的斜线表示的情况依次类推。

用第2条斜线为例说明:如图3表示S2的首字母和
S1的第2个对齐。

该斜线经过的单元格有4个元素不为
零,说明有4个元素匹配,即是有底线的字母。

斜线的间距(相邻的2条斜线的距离为1)表示字符串滑动的距离,也表示在2个字符串均不动的情况下,在字符串S2中加入空格所能影响到的距离。

如第1条斜线和第2条斜线:
从图2,图3中可以看出在S2中加入1个空格,在移动匹配中只能到第2条斜线所能表示的情况,依次类推。

因此,在S2中加入的空格数所能达到的最远匹配可以用斜线的条数来表示。

在S2中加入S 个空格,可以在当前匹配的斜线后再划S
条斜线。

图2 第一条斜线表示的情况 图3 第二条斜线表示的情况
(2)这里的目的是为了在加入空格后达到最大的匹
配率,因此可以在n 1-n 2+1条斜线中找到1条含非零值最多的路径,但要遵循一个原则:路径的查找必须遵循自左向右的原则,因为每移动一条斜线相当于插入1个空格,插入空格以后不能向回匹配只能向后匹配。

现在要解决的问题就是在S +1条斜线中按照自左向右、自上向下的原则找一条含非零值最多的路径。

如图1所示,以S1和S2为例说明具体过程,这里字符串S1有20个字符,字符串S2有15个字符,斜线的条数等于20-15+1=6。

这里将斜线覆盖的范围为转化为矩阵的形式,把他写成矩阵R 1。

矩阵R 1的第一行代表左边第一条斜线,依次类推。

矩阵元素表示斜线经过的单元格中的数值,也就是字符是否匹配。

按照上面的原则:自左而右、自上而下,找到一条含“1”最多的路径。

为方便其见,把“1”换成该行的行号。

写成矩阵R 2。

R 1=
10000000000001
0001001100010000001110001000100000001110000001010010001111000100000010001010R 2=
1000000000000
1
0002002200020000
003330003000300000004440000004050050005555000600000060006060
(3)现在需要找到一条含非零值最多的路径。

定义非零值的个数为信息量,记为I n 。

算法准则:因为遵从自左而右、自上而下的原则,所以第i 行可以包含第i +1行的信息量,也就是说从第i 行和第i +1行选取部分元素可以使第i 行达到这2行的最大信息量。

从矩阵R 2中的倒数第2行反向递推到第1行,那么第一行就含有下面所有行的最大信息量,也就是找到了最优路径。

就上面的矩阵R 2进行处理,用穷举法两两寻找最优划分(选取第i 行左面元素和第i +1行右面的元素达到信息量最大)。

以字符串S1和S2为例寻找信息量最大的路径。

7
01
①先在倒数第2行取1个元素,再在倒数第1行取
n 2-1个元素(有底线的为所取的数值):
0|50050005555000
6|00000060006060
,计算信息量为3;
②在倒数第2行取2个元素,再从倒数第1行取n 2-2个元素:
05|0050005555000
60|0000060006060
,计算信息量为4;
③依次穷举计算,得到信息量最大的划分:
050050005555|000
600000
060006|060
,信息量为7;
④将取得的倒数第2行元素和倒数第3行元素,重复步骤①,②,③直到第1行为止。

得到所有的划分结果如图4所示。

图4 划分图
(5)将划分的右上角元素置0,用右下角元素替代右
上角元素,保留左上角元素。

如步骤③的划分变为:
050050005555|060
600000060006|060
,则整个划分变为图5。

(6)在数值增大的地方加入空格,空格的个数为前后
变化的数值的差值(元素零除外)。

S2插入空格如图6所示。

(7)计算匹配率为(12/20)2,重叠率为1,则Q 15=0.38。

如果插入的空格少于n 1-n 2,可以依据重叠率较大
的情况在字符前或字符后插入。

同样可以计算Q 1,Q 2,…,
Q m ,可在其中找到最大值。

2.2.3 算法步骤
这里假设字符串S1的长度大于S2的长度,即n 1>
n 2,记S =n 1-n 2。

(1)将字符串S1的字符依次写成一行,将字符串S2
的字符依次写成一列,然后依次比对,字符相同的记为1,不同的记为0,生成矩阵R,矩阵元素R [i ,j ]表示S2的第
i 个元素与S1的第j 个元素是否相同;
(2)生成矩阵R 1,R 1的行数等于S +1,列数等于n 2,
R 1[i ,j ]=R [j ,j +i -1];
(3)将矩阵R 1的非零元素换成所在行的数字,生成矩
阵R 2。

(4
)从矩阵R 2倒数第2
行反向递推到第1行,那么第
1行就含有下面所有行的最大信息量,也就是找到了最优
路径。

就上面的矩阵R 2进行处理,用穷举法两两寻找最优划分(选取第i 行左面元素和第i +1行右面的元素达到信息量最大)。

图5 改进的划分图
图6 相似度最大匹配图
①先在R 2的倒数第2行取1个元素,再在倒数第1行取n 2-1个元素,计算这n 2个元素的信息量;
②在倒数第2行取2个元素,再在倒数第1行取n 2-2个元素,同样计算这n 2个元素的信息量;
③依次穷举计算,得到信息量最大的划分;
④对倒数第2行元素和倒数第3行,重复步骤(1),
(2),(3)直到第一行为止;
⑤将划分的右上角元素置零,将右下角元素替代右上角元素,保留左上角元素;
⑥取得整个划分,在数值增大的地方加入空格,空格的个数为前后变化的数值的差值(元素0除外)。

2.2.4 算法性能分析
下面按照一般的算法分析对此算法进行分析[5]。

(1)构造匹配矩阵为:n 1×n 2;
(2)进行移动匹配的次数为:n 1+n 2-1;(3)构造寻优路径矩阵:(n 1-n 2+1)×n 1;(4)寻找最优路径计算Q :n 1×(n 1-n 2);(5)寻找最大的Q 值。

算法的空间效率为:n 1×n 2+(n 1-n 2+1)×n 1+2×
n 1+n 2-2;算法的计算次数为:(n 1+n 2-1)×n 1×(n 1-n 2);算法的计算次数比穷举法C n 1-n 2
n 1
+1的次数减少了很多,
如文中的例子,利用穷举法是O (n 15),当然如果n 1-n 2再增大的话,其会更大,因为穷举法的次数是O (n 1
(n 1-n 2)
)。


文中的算法的计算次数是O (n 12)。

特别的,当n 1=n 2时,就不必进行这样的计算,只需要进行移动匹配就可以。

3 结 语
文中用2个字符串滑动比较时匹配的字符数和2字符串滑动比较的重叠率定义了相似度的衡量指标,在确定
(下转第111页) 
8
01
中断服务子程序
DDFS2isr:mov ccap4h,Data;输出新数据到DAC clr ccf3;清中断标志inc ccap3h
clr ea;关中断push acc
push psw
push dph
push dpl;一次相位累加运算mov a,pL
add a,Phase2accL
mov phase2accL,a
mov a,p H
addc a,Phase_acc H
mov phase2acc H,a;查找L U T
mov d#Sin Tab;PWM=sine(hi(Phase_Acc))
movc a,@a+dptr;增益调整mov b,a
mov a,G
mul ab;输出数据mov Data,a
pop dpl
pop dph
pop psw
pop acc
setb ea
reti 正弦波L Urr,共16行256个,由其他程序离线产生并以下述形式插入此源程序中。

sintab:DB080H,083H,086H,089H,08CH,090H,093H,096H DB099H,09CH,09F H,0A2H,0A5H,0A8H,0AB H,0A EH

DB067H,06A H,06D H,070H,074H,077H,07A H,07D H
End
5 结 语
基于DDFS的变频控制方法,并以MCS51系列单片机为例,介绍了这种方法的具体实现。

这种方法解决了分频方法存在的精度低、频率频进不均匀等问题,并抑制了噪声。

这种变频控制方法可广泛用于变频调速等各种变频控制系统。

参 考 文 献
[1]张岳匀,谢运祥,何志伟.交流传动系统PWM技术的近期
发展及展望[J].微电机,1999,32(1):28231.
[2]王力,罗乾超,彭星明.基于微处理器的SPWM变频调速系
统[J].铁道学报,1999,21(增刊).
作者简介 崔树清 男,1966年出生,江苏涟水人,讲师。

主要研究方向为电子技术应用,计算机控制技术。

(上接第105页)
的数据源;将所需要查看和分析的维度和数据拖入Excel 电子表格中,按行与列拖动维度可分析数据。

3 结 语
数据集市的建立可以充分地利用这些油矿勘探数据。

灵活地分析大量勘探数据,可在更大程度上满足高层次决策分析的需求。

通过油矿勘探数据集市的应用,发现虽然围绕数据获取的很多复杂问题并没有减少,但是基于多维模型的数据集市易于开发和使用,建设效率高,具有传统数据组织结构没有的优点。

参 考 文 献
[1]Inmin W H.Building the Data Warehouse[M].New Y ork:
John Wiley&Sons,1996.
[2]Ralph K imball,The Data Warehouse Lifecycle Toolkit.
[3]邵红全,赵茜.运用多维数据模型实现数据集市[J].河北省
科学院学报,2003(2):992102.
作者简介 孙吉赟 男,1982年出生,浙江杭州人,硕士研究生。

研究方向为管理信息系统与计算机网络、数据库、数据仓库。

杨兆进 男,1969年出生,山东胶州人,工程师,应用数学研究生。

(上接第108页)
一个字符串比另一个字符串少的情况下,设计了一种算法,实现了在字符串匹配矩阵中确定插入空格的位置使相似度指标达到最大值,算法的计算次数明显的减少,可以使模糊信息检索高效有意义。

参 考 文 献
[1]章成志.基于多层特征的字符串相似度计算模型[J].情报
学报,2005,24(6):6962701.
[2]Monge A E,Elkan C P.The Field2Matching Problem:Algo2
rithm and Applications[J].In:Proceedings of the Second In2
ternet Conference on Knowledge Discovery and Data Min2 ing,Oregon,Portland,1996,8:2672270.
[3]Nirenburg S,Domashnev C,Grannes D J.Two Approaches
to Matching in Example2based Machine Translation[J].In: Proceedings of TMI293,Kyoto,J apan,1993,7:47257.
[4]孙啸,陆祖宏,谢建明.生物信息学基础[M].北京:清华大
学出版社,2005.
[5]Anany Levitin.算法设计与分析基础[M].潘彦,译.北京:清
华大学出版社,2004.
[6]陈鑫,常致全.智能化搜索引擎原理及实现[J].计算机应
用,2003(23):1912193.
111。

相关文档
最新文档