二维参数化匹配算法.docx

上传人:b****3 文档编号:3654763 上传时间:2022-11-24 格式:DOCX 页数:32 大小:240.89KB
下载 相关 举报
二维参数化匹配算法.docx_第1页
第1页 / 共32页
二维参数化匹配算法.docx_第2页
第2页 / 共32页
二维参数化匹配算法.docx_第3页
第3页 / 共32页
二维参数化匹配算法.docx_第4页
第4页 / 共32页
二维参数化匹配算法.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

二维参数化匹配算法.docx

《二维参数化匹配算法.docx》由会员分享,可在线阅读,更多相关《二维参数化匹配算法.docx(32页珍藏版)》请在冰豆网上搜索。

二维参数化匹配算法.docx

二维参数化匹配算法

二维参数化匹配算法

RichardCole,NewYorkUniversity

CarmitHazayandMosheLewenstein,Bar-IlanUniversity

DekelTsur,UniversityofHaifa

两个长度相同的字符串,或者两个相同大小的文本,如果它们存在一对一的映射关系(相对于字母表来说),则称为参数化匹配(简称P-匹配)。

二维参数化匹配指的是找出一个n*n规模的文本中所有的m*m子串中同一个m*m的模式串存在参数化匹配的子串,例如,这个模型可以用于在变化着的彩色地图中查找彩色图像。

我们在本论文中给出了两种算法用于解决二维参数化匹配的问题,它们的时间复杂度分别为O(n2log2m)、O(n2+m2.5polylog(m)),这二者都比Amir等.[2006]给出的O(n2mlog2mloglogm)的时间复杂度要快。

我们的算法中的一个关键步骤是计算n*n字符串中所有m*m子串的不同字符的数目,对于这个问题,我们给出的时间复杂度为O(n2),这个结果相对于参数化匹配来说可能具有独立的意义。

分类和主题描述:

模式匹配

通用术语:

算法

关键词:

参数化匹配,二维模式匹配,失配证据计算

1、介绍

两个相同长度的字符串S和S’,如果存在一个一一映射Π,使得S’[i]=Π(S[i])对于所有的i都成立,则称两者参数化匹配(简称P-匹配)。

Baker[1996,1997]首次提出参数化匹配的问题,对于输入文本T和模式P,找出T中所有长度为|P|并且同模式P满足P-匹配的子串。

Baker在源码分析工作中引入参数化模式匹配的问题,而其他如图像处理、计算生物学等领域都存在着参数化匹配问题([Amir等2006])。

Bakar[1996,1997]在字母表大小固定的条件下,给出了一个参数化匹配问题的优化的线性算法;而Amir等[1994]则给出了一个非限定字母表大小的优化算法。

在Baker[1996,1997]中,通过构造参数化后缀树来解决参数化匹配问题,该方法可以用于在线的P-匹配。

Kosaraju[1995]进一步研究了参数化后缀树而Cole和Hariharan[2003]给出了一个快速的后缀树构造方法。

Apostolico等.[27]引入了近似参数化匹配并且给出了一个针对二进制字母表的解决方案。

Hazay等.[2007]给出了一个时间复杂度为O(nk1.5+mklogm)的近似参数化匹配算法,其中k为失配数,并且指明该问题同二分图的最大匹配问题存在着很强的相关性。

图像搜索是网络搜索中一个非常有趣的问题(见[Amir等.2004;Babu等.1995;SwainandBallard1991]),如果图像颜色固定,则该问题就是一个精准的二维模式匹配问题[Amir等1994],然而,图像经常出现在不同的彩色地图中,这就导致图像的像素分量的关系没有改变,而相同颜色的像素的颜色已经发生了变化,而这恰好就是二维参数化搜索的研究内容。

[Amir等.2006]给出了一个O(n2mlog2mloglogm)时间复杂度的算法,其中文本大小为n*n,模式串大小为m*m。

对于二维参数化模式匹配是否存在线性时间复杂度的算法成为一个开放性的问题,在本文中,我们给出了两种新的算法,第一个算法相对于输入规模非常接近线性时间复杂度,而第二个算法,在对模式串进行高代价的预处理之后,是一种相对文本规模的线性复杂度的算法。

第一个算法以卷积为基础,采用了一种新式的将二维空间转换为一维空间的方法;第二个算法以决斗策略为基础,利用问题的二维属性,它们的时间复杂度分别为O(n2log2m)、O(n2+m2.5polylog(m))。

我们的两种算法的一个关键步骤都是如何计算在一个n*n的字符串中每一个m*m的子串中的不同字符的数目,Amir等.[2004]对于该问题给出了一个O(n2logm)时间复杂度的算法,而我们则给出了一个O(n2)时间复杂度的算法,这个结果具有相对独立的重大意义。

本论文的剩余部分按照如下内容组织:

在第二节,我们给出了一些定义和预备知识的介绍,接下来,在三节中,我们提出了一个O(n2log2m)时间复杂度的算法,而在第四节中,我们提出了一个O(n2+m2.5polylog(m))时间复杂度的算法,最后,在第五节中,我们详细描述了子串字符计数的算法。

2、预备知识

S和S’是相同大小的二维字符串,如果存在函数f,使得S的字母表映射到S’的字母表,并且S’[x,y]=f(S[x,y])对于所有的x,y都成立,则我们称存在一个S到S’的函数匹配,如果这个函数映射是一对一的,那么那么称S和S’参数化匹配,或者简称P-匹配,需要注意的是,函数匹配的定义是非对称的,而参数化匹配的定义是对称的。

二维参数匹配的定义如下:

输入:

n*n的文本T和m*m的模式P。

输出:

文本T中同模式P满足P-匹配的所有的m*m大小的子串。

在本文的论述中,我们假设T的字母表空间为[1,...,n2],而模式P的字母表空间为[1,...,m2]。

结论2.1S和S’存在参数化匹配的充分必要条件为存在S到S’的函数匹配并且S中的不同字符的数目和S’中不同字符的数目相等。

结论2.1使得我们的算法可以从如下结构来理解,首先,我们的算法创建一个T中m*m子串的列表L:

(1)要么存在从P至L中每一个子串的函数匹配,要么存在从L中每一个子串至P的函数匹配(分别的);

(2)T中的每一个同P满足P-匹配的子串都存放在L中。

第二步是计算T中每一个m*m的子串中的不同字符的数目,如果不同字符的数目同P中的相等,则这个子串就是P的P-匹配。

在这个阶段,我们的算法的时间复杂度为O(n2),该算法将在第五节中详细论述,因此,我们在第三节和第四节中分别给出的两个算法只要描述列表L如何计算即可。

二维字符串从左至右/从上至下的遍历指的是这样的遍历顺序,首先从左到右访问字符串的第一行,然后从左到右访问字符串的第二行,以此类推,其他的遍历顺序的定义与此类似。

我们用[a,b]*[c,d]表示所有这样的整数对(x,y)集合,其中a<=x<=b,c<=y<=d,我们称这样的集合为一个“矩形”。

而相对应的,[a]*[c,d]等价于[a,a]*[c,d],[a,b]*[c]等价于[a,b]*[c,c]。

对于一个矩形R,我们定义R+(i,j)={(x+i,y+j):

(x,y)∈R}。

通常意义的数组索引用于表示二维字符串中的位置,也就是说,x坐标表示行号,从上至下依次递增,而y坐标表示列号,从左至右依次递增。

最后,我们要描述的是几个精确匹配问题,这些问题将被用于描述我们的算法。

在一维精确通配符匹配中,其输入时一个模式P和一段文本T,模式和文本中都包含通配符,其目的是找到T中所有的|P|长度的同模式P匹配的子串,其中通配符可以匹配任何字符,精确的通配符匹配问题可以利用卷积来解决。

引理2.2(Cole和Hariharan[2002],Clifford和Clifford[2007])精确的通配符匹配问题存在O(|T|log|P|)时间复杂度算法。

在二维精确通配符匹配问题中,模式和文本都是二维字符串。

引理2.3二维精确通配符匹配问题存在O(|T|log|P|)时间复杂度算法。

证明:

利用标准方法,二维问题可以规约为一般的一维问题,然后根据引理2.2可得。

接下来,我们扩展上面的问题为带证据的精确二维通配符匹配,其输入为模式P和文本T,而其目的是找出所有的T的子串T’,T’的大小和模式P相同,倒是T’和P不匹配,其中一个证据就是一个不匹配的地方,也就是说,一个位置(x,y),其中T’[x,y]和P[x,y]不匹配。

引理2.4带证据的精确二维通配符匹配问题存在O(|T|log|P|)时间复杂度算法。

证明:

理论证明是由Alon、Naor[1996](亦见[Auman等2011])和引理2.2的算法证明相结合即可。

接下来,我们考虑带证据的区域匹配问题,其输入为带通配符的两个字符串P1和P2,其目的为比较两者相同大小的子串,找到使之不匹配的证据。

我们思考这个问题的两个变形:

一个是n*n大小的两个字符串P1和P2,相比较的子串为P1[1..n-i,1..n-j]和P2[i+1..n,j+1..n],其中1<=i,j<=n;第二个变形为,P1的大小为(2n-1)*n,P2的大小为n*m,其中m<=n,相比较的子串为P1和P2中所有的大小为n*n的子串。

引理2.5带证据的区域匹配问题存在O(|P2|polylog|P1|)时间复杂度的算法。

证明:

这个问题可以规约为如下的带证据的精确通配符匹配问题。

对于第一个变形,通过为P2添加n-1行和n-1列的通配符来构造大小为(2n-1)*(2n-1)的字符串P2’,更准确的说,P2’[x,y]=P2[x,y],如果x,y<=n,否则,P2’[x,y]是一个通配符,现在,P1[1..n-i,1..n-j]和P2[i+1..n,j+1..n]匹配等价于P1和P2’[i+1..i+m,j+1..j+m]匹配。

对于第二个变形,通过为P2增加2n-2行通配符来构造P2’,其中,n-1行增加到原有行的上方,n-1行增加到原有行的下方,这样,子串P1[i+1..i+n,1..n]和P2[1..n,j+1..j+n]匹配等价于P1和P2’[1..n-i,j+1..j+n]匹配。

3、一种O(N2log2M)时间复杂度的算法

在本小节中,我们给出我们关于解决二维参数化匹配问题的第一个算法,该算法的关键是通过对模式和文本进行编码,用“距离”来替代每一个字符,将参数化匹配问题规约为精确通配符匹配问题。

这种方法也在Amir等[1994]提出的一维参数化匹配中使用,然而,在二维情况下,编码方法更加复杂。

我们在本小节的开始先给出Amir等提出的算法的描述,然后我们一种简单的低效率的一维扩展到二维的方法,最后,我们详细论述我们提出的更高效的算法。

Amir等的算法利用模式(或者文本)中距离左侧最近的相同字符的距离来进行编码,如果左边没有相同的字符,则标记为0,除了每个字符的首次出现,一个参数化的匹配对应于一个编码后的标准匹配。

这个算法利用KMP算法的变形来进行编码后的匹配算法。

对于我们来说,我们采用一种稍微低效率的该算法的变形,通过将P和T按照类似上面描述的算法编码为P2和T2,其区别在于P中首次出现的字符被编码为∅,∅用来表示一个通配符,这样我们可以很容易的得到下面的结论。

引理3.1对于T中长度为|P|的每一个子串T’,对应的T2中的子串T2’,

(1)如果T’和P满足P-匹配,则T2’和P2满足精确通配符匹配。

(2)如果P2和T2’满足精确通配符匹配,则存在P到T’的函数匹配。

例子3.2P=abacb,T=yxyxxy。

那么,P2=∅∅2∅3,T2=002213。

存在一个P到T[2..6]的函数匹配,和存在一个P2和T2[2..6]的精确通配符匹配。

图1一个5*5大小的模式和8*8大小的文本的简单算法的例子。

假设在这个例子中,P同T’=T[3..7,2..6]满足P-匹配(T’在图中红色方框标出)。

模式P中的位置(4,4)和文本T中的位置(6,5)的活动矩形在图中粗线标出(活动矩形分别为R(4,4),-3,R(4,4),-2,R(4,4),-1,R(4,4),0,R(4,4),1和R(6,5),-4,...,R(6,5),2),而这些活动矩形中的选中的邻居也由粗体标出。

位置(4,4)编码为∅2∅124∅∅∅,而位置(6,5)编码为125124000,这两个字符串匹配。

P中位置(4,4)的邻居和T中位置(6,5)的邻居对齐。

通过引理3.1,一维参数化匹配问题可以转换为精确通配符匹配问题和子串中不同字符的数目的计算问题。

该算法从一维扩展到二维的一个直观的方法是将模式P或者文本T中的一个字符编码为多个字符。

对于模式P(文本T)中的每一个位置(x,y),我们定义2m-1个不相交的矩形R(x,y),-(m-1),R(x,y),-2,...,R(x,y),m-1,其中R(x,y),0=[x]*[1,y-1],对于i不为0时,R(x,y),i=[x+i]*[1,y],需要注意的是,如果y=1,则矩形R(x,y),0为空。

如果一个矩形非空并且它全部位于模式(文本)的内部,那么我们称模式中(或文本)的这个矩形是活动的,也就是说,这个矩形包含在[1,m]*[1,m](对于文本T,则是[1,n]*[1,n])中。

剩下的矩形则称为不活动的。

从右向左遍历活动矩形,如果存在(x’,y’),它的字符同(x,y)的字符相同,则这个位置就叫做(x,y)的邻居,不活动矩形中不包含邻居。

这样,文本T和模式P中按照如下方式进行编码:

模式P中的每一个位置(x,y)编码称一个2m-1的字符串c1,..c2m-1。

字符ci由(x,y)的第i个矩形引入,如果第i个矩形生成邻居(x’,y’),则ci就是(x’,y’)的遍历矩形时的次序;如果第i个矩形没有生成邻居,则ci=∅。

文本T的编码方式类似,除了当矩形不生成邻居时,ci=0。

让P2和T2表示编码之后的模式和文本,参看图1说明。

我们现在证明引理3.1也同样适用于二维的情况,首先我们给出证明过程中需要用到的一些定义。

定义3.3(关联位置)模式中(或者文本)两个位置(x,y)和(x’,y’)是关联的,如果存在一系列的位置(w0,z0)=(x,y),(w1,z1),(w2,z2)...(wl,zl)=(x’,y’),其中(wi,zi)要么是(wi+1,zi+1)的邻居,要么(wi+1,zi+1)是(wi,zi)的邻居(或者二者同时满足),1<=i<=l。

定义3.4(对齐邻居)模式P中的位置(x,y)同文本T中位置(x+a,y+b)对齐,如果P中(x,y)的第i个矩形产生的邻居(x’,y’),则T中(x+a,y+b)第i个矩形产生的邻居为(x’+a,y’+b)对于所有的i都成立。

结论3.5P中具有字符的位置是关联的。

图2应用高度为2的例子。

左边为模式P,右边为文本T,假设P同T[3..7,2..6]满足P-匹配,P中位置(4,4)的矩形为[0,1]*[1,4],[2,3]*[1,4],[4]*[1,3],[5,6]*[1,4]和[7,8]*[1,4],其中仅有第二和第三个是活动的,位置4被编码为∅4∅∅∅,同理,文本中的位置(6,5)编码为14000,(4,4)的第一个矩形不能是活动的,否则,它将生成邻居(1,3)。

然而,文本T中(6,5)的第一个矩形生成的邻居为(2,5),因此,(4,4)的邻居和(6,5)的邻居并不都是对齐的。

引理3.6T’=T[a+1..a+m,b+1..b+m]是T中的某个m*m的子串,

(1)如果P和T’满足P-匹配,则对于P中的每一个位置(x,y),其邻居都与T中的位置(x+a,y+b)的邻居是关联的;

(2)对于P中的每一个位置(x,y),如果(x,y)的邻居跟T中位置(x+a,y+b)的邻居对齐,则存在一个P至T’的函数匹配。

证明:

对于第一部分,直接从定义就可以得出,而对于第二部分,考虑P中的两个不同位置(x1,y1)和(x2,y2),并且有P[x1,y1]=P[x2,y2]。

由结论3.5可得,P中(x1,y1)同(x2,y2)是关联的,根据假设的前提条件,对于P中的每一个位置(x,y),(x,y)的邻居跟T中位置(x+a,y+b)的邻居对齐,我们得出T中的(x1+a,y1+b)和(x2+b,y2+b)是相关联的,特别是,T[x1+a,y1+b]=T[x2+a,y2+b]。

因为上述结论对于P中具有相同字符的每对位置都成立,所以我们得出结论,存在一个P至T’的函数匹配。

我们注意到上述引理的第一部分的反面并不一定成立,也就是说,如果P和T’满足P-匹配,则T’中的位置(x+a,y+b)的邻居并不一定同P中位置(x,y)的邻居是关联的。

例如,图1中,T中位置(6,5)有一个邻居(4,1),而它在P中没有与之相对应的邻居。

现在,引理3.1的正确性可以直接从引理3.6得出。

编码之后的模式P2和编码之后的文本T2分别具有O(m3)和O(mn2)的大小,所以,根据引理2.3,解决P2和T2之间的精确通配符匹配算法的时间复杂度为O(mn2logm)。

前面讨论的算法,如何进行改进呢?

既然时间复杂度依赖于为每个位置选中的邻居的数目,那么一个自然而然的改进想法就是用更高的矩形来替换高度为1的矩形,比如说,高度为2,从一个活动矩形将被按照从上至下/从右至左的顺序扫描,如果一个矩形的所有位置都位于模式串的内部,那么这个非空矩形是活动的。

这个条件是必须的,否则,引理3.6就不成立(如图2所示)。

然后,这又产生了新的问题,对于P中具有相同字符的两个位置,它们并不一定是关联的(也就是说,结论3.5不成立),如图3所示。

注意到,这种情况发生在左上角的位置靠近模式串的边界的情况下,为了解决这个问题,我们需要一个更好的距离选择方法,以确保关联字符性质。

图3应用高度为2的矩形并不能保证相同字符的位置是关联的一个例子。

在模式P(左侧)中,位置(1,3)和(4,4)不是关联的因为包含(1,3)的那个(4,4)的矩形是不活动的,因此这个矩形生成的字符为∅.假设T’=T[3..7,2..6]中没有画出的字符同P中的对应字符是相同的,编码之后的P2和T2’相匹配,但是从P到T’中其实没有满足函数匹配。

图48*8(左)的模式串P和11*11(右)文本串T的邻居选择方法的例子。

P和T中位置(3,4)的邻居都被用粗体线标记出来,P和T中位置(3,4)的活动矩形在图中同样标出。

模式P中位置(3,4)的右下象限的矩形是R(3,4),0=[10]*[5,8],R(3,4),1=[8,9]*[5,8],R(3,4),2=[4,7]*[5,8],其中仅有最后一个是活动的。

对应的文本T的矩形是[10]*[5,12],[8,9]*[5,12],[4,7]*[5,12],这三个矩形都是活动的。

在这个例子中,P和T[1..8,1..8]满足P-匹配,所以由引理3.6,P中(3,4)的邻居和T中(3,4)的邻居是对齐的。

我们的解决方法形式如下。

设t=⌈log2m⌉。

对于模式中的每一个位置,我们定义4t+4个不相交的矩形,图4中说明了我们的构造方法。

第一组四个矩形是由位置(x,y)将x行和y列划分而成的,它们分别是[x]*[y+1,m],[x]*[1,y-1],[x+1,m]*[y],[1,x-1]*[y],接下来,我们定义t个不相交的矩形R(x,y),0,...,R(x,y),t-1,它们覆盖了(x,y)右下角的象限。

对于i=0,...,t-2,

R(x,y),i=[x+m-2i+1+1,x+m-2i]*[y+1,m]

R(x,y),t-1=[x+1,x+m-2t-1]*[y+1,m]

对于(x,y)的左上角的象限,我们定义这样的矩形,对于i=0,...,t-2

S(x,y),i=[x-m+2i,x-m+2i+1-1]*[1,y-1]

S(x,y),t-1=[x-m+2t-1,x-1]*[1,y-1]

另外两个象限有类似的定义。

文本中的位置(x,y)的矩形跟上面的描述相似,唯一不同之处就在于,对于y列右边的那些矩形需要扩展到n列,而y列x行下面的那个矩形需要延伸到n行。

需要注意的是,矩形的数量和他们的行数仍然依据m来定义。

现在我们来定义上述矩形的扫描顺序,我们按照远离(x,y)的方向直到到达P[x,y]的首次出现的位置的顺序遍历每一个活动矩形,精确地说,对于位于y列右边的所有矩形,我们按照从上到下/从左到右的顺序,而位于y列左边的所有矩形,我们是按照从上到下/从右到左的顺序,对于[x+1,m]*[y]则是从上到下,对于[1,x-1]*[y]则是从下到上。

下面的引理3.7则将表明我们的构造过程能够满足关联字符的性质。

引理3.7模式P中的两个包含相同字符的两个位置(x,y)和(x’,y’),那么这两个位置是关联的。

证明:

显然,如果x=x’,那么沿着x行存在一系列的位置,使得(x,y)和(x’,y’)关联,类似的,如果y=y’,也有相同的结果。

下面我们主要考虑的是x≠x’和y≠y’的情况,不失一般性,我们假设x

我们声明要么(x,y)位于(x’,y’)的活动矩形中,要么(x’,y’)位于(x,y)的活动矩形中,具有很大的可能性是两者都满足。

不失一般性,我们假设x<=m/2,否则,我们可以通过交换这两个位置来解决,如果(x’,y’)位于(x,y)的某个活动矩形中,则上述声明的证。

否则,R(x,y),0,...,R(x,y),t-1之间必然至少存在一个非活动矩形,设R(x,y),j是最上面的非活动矩形,因为x<=m/2,并且R(x,y),t-1是活动的,所以j<=t-2。

因为R(x,y),j的最后一行的索引大于m,所以(x’,y’)必定位于R(x,y),j之中,同样容易计算得到(x,y)位于S(x’,y’),j之内。

现在我们证明S(x’,y’),j是活动的。

因为(x’,y’)∈R(x,y),j,x’>=x+m-2j+1+1,更进一步,R(x,y),j不满足此模式则表示x+m-2j>m,也就是说,x>2j。

另外,x’>2j+m-2j+1+1=m-2j+1,所以x’-m+2j>1,由这个不等式表明矩形S(x’,y’),j是活动的,这就证明(x,y)位于(x’,y’)的一个活动矩形之内。

我们已经证明要么(x,y)位于(x’,y’)的活动矩形中,要么(x’,y’)位于(x,y)的活动矩形中,不失一般性,我们假设后者成立,虽然(x’,y’)不一定是(x,y)的一个邻居,尽管如此,通过对y’-y进行归纳证明,我们仍然能证明他们是关联的。

归纳基础是y=y’的情况,这个已经得到证明。

设(x’’,y’’)表示(x,y)的一个位于包含(x’,y’)的矩形之内的邻居,那么y

使用这种新的邻居选择策略,算法按照前面描述的方式构造P2和T2,则它们的大小分别为O(m2logm)和O(n2logm),由此,根据引理2.3,P2和T2之间的精确通配符匹配问题存在O(n2log2m)时间复杂度的算法。

现在,仍然需要说明如何标记出邻居的算法,该算法对于在模式串中需要O(m2log2m)的时间复杂度,而在文本串中需要O(n2log2m)的时间复杂度,下面我们在模式P中详细描述该算法,在文本T中的方法与此相同。

对于在矩形[x]*[y+1,m],[x]*[1,y-1],[x+1,m]*[y]和[1,x-1]*[y]这四个矩形中查找邻居,我们可以采用最简单的方法,即直接扫描模式P中的行和列。

下面,我们描述如何在剩下的矩形中查找邻居。

该算法的基本思想是为每一个字符c维护一系列的模式P上的窗口w1,...,wt-1,窗口wi具有2i行高、m列宽(除了窗口wt-1,它的高度为m-2t-1行)。

对于每一个i,窗口wi在模式P上逐行向下滑动,在wi的滑动过程中,wi中的字符c的出现按照从上到下/从左到右的顺序被保存在一棵平衡搜索树中。

设(x,y)是P中字符c的一个位置,当窗口wi覆盖矩形R(x,y),i的行的时候,我们将通过查找二叉搜索树找到其位于R(x,y),i中的邻居。

每一次搜索花费O(logm)的时间,因此,对于所有的字符和其邻居,则需要花费O(m2log2m)的时间,同时,窗口每下滑一行,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1