[发明专利]基于有序二叉树的模式匹配方法无效
申请号: | 200810203008.2 | 申请日: | 2008-11-20 |
公开(公告)号: | CN101425084A | 公开(公告)日: | 2009-05-06 |
发明(设计)人: | 刘功申;胡佩华;王士林 | 申请(专利权)人: | 上海交通大学 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 上海交达专利事务所 | 代理人: | 王锡麟;王桂忠 |
地址: | 200240*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 有序 二叉 模式 匹配 方法 | ||
1、一种基于有序二叉树的模式匹配方法,其特征在于,包括如下步骤:
步骤一、构造有序二叉树:对二叉树按NLR方式遍历,设定遍历二叉树时的顺序,得到一系列的模式串,如果这些模式串得到的先后顺序和它们的字典序相同,即获得有序二叉树,同时在有序二叉树上构造出失败指针,以重复利用已经匹配成功的模式串子串信息;
步骤二、查找阶段:根据构造的有序二叉树及goto函数和失败指针对源字串进行一次查找,定位出模式串在源字串中的位置,查找的过程如下:从有序二叉树的根节点出发,逐个取出源字串中的字符,根据goto函数和失败指针确定状态之间的转换,当源字串的所有字符都被取出后,查找过程就结束。
2、根据权利要求1所述的基于有序二叉树的模式匹配方法,其特征是,所述的设定遍历二叉树时的顺序,具体如下:设置栈s用来存放模式串,指针p用来跟踪节点,当指针p指向当前节点的右子树时,栈s的栈顶元素出栈,右子树上的元素入栈;当指针p指向当前节点的左子树时,左子树上的元素直接入栈,重复上述过程直到p指向叶子节点,此时,栈内的元素就是某一个模式串。
3、根据权利要求1所述的基于有序二叉树的模式匹配方法,其特征是,所述的失败指针,是指为了重复利用已经匹配成功的子字串信息而使用的一种指针,具体是指:在有序二叉树的某个状态s1时,应用goto函数将达到一个新的状态,如果goto函数调用正确,则到达状态s1某一个子状态节点,如果调用错误,则由失败指针指向一个固定的节点状态,以避免重新回到根节点重新匹配,利用了已经成功匹配的子字串信息。
4、根据权利要求1所述的基于有序二叉树的模式匹配方法,其特征是,所述失败指针,其构造方式具体如下:
(1)根节点的失败指针指向根节点;
(2)状态深度为1的节点的失败指针指向根节点;
(3)对于状态深度大于等于2的节点s,若其父状态为r且goto(r,a)=s,s的失败指针指向的确定是一个递归过程,具体如下:
①如果goto(s的父状态的失败指针指向的状态,a)的运算结果不是一个实际存在的状态时,s重新被赋值为s的父状态;
②依次循环步骤a,直到goto(s的父状态的失败指针指向的状态,a)的运算结果为一个实际存在的状态;
③s的失败指针被赋值为s的父状态。
5、根据权利要求4所述的基于有序二叉树的模式匹配方法,其特征是,所述的状态深度是指节点在构造过程中的深度,具体如下:节点的状态深度不同于二叉树的节点深度,二叉树的节点深度是该节点到根节点的路径,而状态深度反映了字符在相应的模式串中的位置,状态深度按如下方式设定:根节点的状态深度设置为0,如果某节点的状态深度是h,则它的左子节点的状态深度设置为h+1,右子节点的状态深度设置为h,依次类推确定所有节点的状态深度。
6、根据权利要求4所述的基于有序二叉树的模式匹配方法,其特征是,所述的父状态节点、子状态节点之间有节点之间的父子关系,具体如下:如果节点l是节点f的左子树,节点集合R={r|r是l的右子树上的节点并且具有和l相同的状态深度},则f是l和R中所有节点的父状态节点,l和R中所有节点是f的子状态节点。
7、根据权利要求1所述的基于有序二叉树的模式匹配方法,其特征是,所述goto函数是指根据设定的遍历二叉树时的顺序,构造状态转化的函数,具体如下:按照设定的遍历二叉树的顺序,从节点s1出发到其任一子状态节点的过程中,如果到达了子状态节点s2并且此时栈中有且仅有字符c,则goto函数被构造为goto(s1,c)=s2,即在状态节点s1,输入字符c后,将转向状态s2。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海交通大学,未经上海交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810203008.2/1.html,转载请声明来源钻瓜专利网。