CN100527134C - 多模式搜寻的方法与*** - Google Patents
多模式搜寻的方法与*** Download PDFInfo
- Publication number
- CN100527134C CN100527134C CNB2007101955363A CN200710195536A CN100527134C CN 100527134 C CN100527134 C CN 100527134C CN B2007101955363 A CNB2007101955363 A CN B2007101955363A CN 200710195536 A CN200710195536 A CN 200710195536A CN 100527134 C CN100527134 C CN 100527134C
- Authority
- CN
- China
- Prior art keywords
- node
- word
- edge
- temporary
- meet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种多模式搜寻的方法与***,此***包括:第一处理单元、第一存储器单元及第二处理单元。第一处理单元根据多个模式字串来建立关键字树,并针对关键字树中的每一节点来建立跳表,此跳表包括多个索引字以及对应这些索引字的多个识别编号,这些识别编号为处于所针对的节点且以这些索引字为索引时,应进入的下一个节点的识别编号。第二处理单元根据第一存储器单元所储存的所有节点的跳表,采用AC演算法来比对一输入字串中是否包含有上述模式字串之一。本发明使用第二处理单元及跳表来执行搜寻,因此可改进***整体的效能。
Description
技术领域
本发明是有关于一种字串搜寻,且特别是有关于一种使用跳表的多模式(multi-pattern)搜寻方法与***。
背景技术
目前的个人计算机(personal computer,PC)的发展是趋于对于不同功能,分别设置不同的对应处理器来加快个人计算机的运算表现,例如,一般的程序运作是由中央处理器(centralprocessing unit,CPU)负责,而游戏与绘图的3D(3 dimension)运算则是由图形处理器(graphic processing unit,GPU)所处理,如此可以减轻3D运算对中央处理器的负担。
在一般状态下(例如,文书作业,听音乐等),图形处理器是被闲置的。所以在一般状态时,如果能将中央处理器的部分运算转到图形处理器中代为运算,则可以达到更有效率的表现。例如,于听音乐中想要同时进行计算机病毒的扫描,而病毒扫描对于中央处理器而言是冗长又会降低执行效能,如果通过其他的处理器进行病毒扫描,则中央处理器就可以另外处理其他程序,而***效能的表现就会更好。
一般而言,计算机病毒的扫描是经由病毒码一一比对计算机中所有的文件。其中最常用的技术就是Aho-Corasick演算法(以下简称AC演算法),AC演算法是一种模式搜寻(patternsearch)演算法,其具有快速的比对速度及不需使用到繁复的计算。AC演算法首先需要多个模式字串来建立AC演算法的关键字树(keyword tree),在此列举一组模式字串作为说明:
{he,she,his,hers} (1-1)
图1A绘示AC演算法的关键字树的建制流程图。图1B绘示AC演算法的关键字树示意图。请同时参考图1A与图1B。图1B中的关键字树100中包括多个节点(node)以及多个边缘(edge),每一边缘以一标示字来标示,每一节点以一识别编号来代表,例如根节点110的节点编号为“0”,根节点110与节点编号为“1”的节点120之间的边缘140的标示字为“h”。首先在步骤S110中,建立根节点110。接着,在步骤S120中,输入所有模式字串其中之一。在步骤S130中,假设一个观察节点,并暂时先令其为根节点110。接下来在步骤S140中,依序输入目前被输入的模式字串内的一个字。并于步骤S150中,检查观察节点是否具有符合标示边缘,所谓具有符合标示边缘就是指:由观察节点为参考点,与此观察节点连结且箭头向外的边缘,并且此边缘的标示字与被输入的字相同。当观察节点具有符合标示边缘时,则进行步骤S151,跟随此符合标示边缘的路径,令观察节点转移至此符合标示边缘的路径的下一个节点。
如果当观察节点不具有符合标示边缘时,则进行步骤S152,新增一个箭头向外的边缘及在箭头所指处新增一个节点,再使新增的边缘的标示字为被输入的字,并对新增的节点给予识别编号,且令观察节点转移至新增的节点。在此定义两个名词:“前路径边缘”与“前路径字值”,上述新增的边缘为新增的节点的“前路径边缘”,上述新增的边缘的标示字为新增的节点的“前路径字值”。在步骤S160中,判断输入的字是否为目前输入的模式字串中的最后一个字,如果不是则到步骤S140去执行,换句话说,重复S140后的步骤,直至被输入的模式字串结束为止后。在步骤S170中,因为执行到此步骤,表示输入了一个完整的模式字串,所以使目前的观察节点为输出节点,以便在利用此关键字树作搜寻时,根据此输出节点来表示搜寻到一个符合的模式字串,例如输出节点130(节点编号为“2”)为输入了一个完整的模式字串“he”而产生,故定义此输出节点130所对应的模式字串为“he”。接着,在步骤180中,判断输入的字串是否为所有模式字串中的最后一个,如果不是则到步骤S120去执行,换句话说,重复S120后的步骤,直至所有的模式字串都输入为止,即完成此关键字树100的建立。
在AC演算法中包括了三种函数,分别为跳转函数(go-tofunction)、失败函数(failure function)及输出函数(outputfunction)。跳转函数是表示当前节点中若具有其标示字与输入字相同的边缘时,就可以移转到当前节点的次一个节点。跳转函数的表示方法如下式所示:
g(x,c)=y (1-2)
其中x代表为当前节点编号,c为输入字串的其中一字,y则是当前节点的次一节点的节点编号。举例来说,在根节点(识别编号为“0”)时,输入的字为“h”,则跳转函数为g(0,h)=1,其中“1”表示根节点所连结且标示字为“h”的边缘的次一节点的编号。
图1C绘示失败函数的移转示意图。失败函数是当前节点在跳转函数不成立时,将当前节点移转至另一个节点,其中另一节点为具有其标示字与输入字相同的边缘的节点,换句话说,另一节点具有一个连结边缘,其中此连结边缘的标示字与输入字相同。
g(x,c)=f (1-3)
f(x)=x` (1-4)
其中f代表为失败函数所移转的次一节点的编号。x`代表为在节点编号为“x”的节点时移转的另一节点的节点编号为“x`”。另外,为更加清楚说明失败函数,于图1C中另以粗黑边缘表示。例如,当处在节点编号为“4”的节点时,输入的字为“h”,在节点编号为“4”的节点的跳转函数中并无此节点可供移转,所以节点编号为“4”的节点的跳转函数则为g(4,h)=f。此时节点编号为“4”的节点则会使用失败函数f(4)=1,将节点编号为“1”的节点设为节点编号为“4”的节点的次一节点。
输出函数是依据所输入的模式字串,分别对其最末字所对应的节点作标记,使得在搜寻时,当依据输入字串的字而进入这些节点时,表示此输入字串是符合上述模式字串其中之一。如图1C所示,节点编号为“5”的节点所对应的模式字串为“she”或“he”。
图1D绘示已知AC演算法的搜寻流程图。AC演算法的搜寻比对流程包括下列步骤:在步骤S210中,令观察节点为根节点110。接着在步骤S220中,依序从输入字串中获得一个字并称之为目标字。在步骤S230中,以此目标字为索引判断目前的观察节点是否具有对应的跳转函数。若具有对应跳转函数,则执行步骤S231,则移转至次一节点。若不具有对应跳转函数,则执行步骤S232,则依据其失败函数移转至另一节点。在步骤S240中,判断观察节点是否为输出节点,当观察节点为输出节点时,在步骤S241中,输出此输出节点所对应的模式字串。最后在步骤S250中,判断输入的字是否为输入字串中的最后一个字,如果不是则到步骤S220去执行,换句话说,重复上述三个步骤,直至输入字串中的所有字都输入为止。
以依据上述所建立的关键字树100作搜寻,且输入一字串{sher}为例。依序输入“s”、“h”、“e”、“r”各字为目标字。首先在根节点110状态时第一个接收到字为“s”,因根节点110具有一个标示字“s”的边缘,所以移转至节点编号为“3”的节点。接着,在节点编号为“3”的节点,判断节点编号为“3”的节点是否具有对应输入字“h”的跳转函数。此时,节点编号为“3”的节点具有对应输入字“h”的跳转函数,所以移转至次一节点为节点编号为“4”的节点。其余字则以此类推。当在节点编号为“5”的节点时,则目前的输入字组合({she})符合输出函数({she})。
最后在节点标号为“5”的节点时,所输入的字为“r”,此时节点标号为“5”的节点的跳转函数因不具有此标示字,所以需另外导入失败函数作为其判断。在节点编号为“5”的节点的失败函数且对应字“r”的移转节点为节点编号为“2”的节点。所以字串{sher}在关键字树100中的移转顺序为:节点编号为“0”的节点→节点编号为“3”的节点→节点编号为“4”的节点→节点编号为“5”的节点→节点编号为“2”的节点。
AC演算法对于一般的处理单元(例如,中央处理器)可以发挥其快速的比对效能,但是对于前文中提到的图形处理单元却无法发挥其快速比对的效能。原因是图形处理器的设计主要以3D图形绘制运算为主,使得图形处理器不适合进行上述的流程控制处理。
发明内容
本发明的目的是提供一种多模式搜寻的方法,用以比对所输入字串中是否包含有预设模式字串其中之一,并使得输入字串的比对能够更加快速。
本发明的另一目的是提供一种多模式搜寻的***,用以比对所输入字串中是否包含有预设模式字串其中之一,并改进***整体的效能。
本发明提出一种多模式搜寻的方法,其可比对输入字串中是否包含有多个模式字串其中之一,这些模式字串是用以建立关键字树,此关键字树包括多个节点以及多个边缘,每一个边缘以一个标示字来标示,每一个节点以一个识别编号来代表,关键字树的第一个节点为根节点。本发明的多模式搜寻的方法会针对关键字树中的每一个节点分别建立跳表,此跳表包括多个索引字以及对应索引字的多个识别编号,其中识别编号为目前所处于节点且以索引字为索引时,应进入的下一个节点的识别编号。本发明的多模式搜寻的方法根据上述所有节点的跳表,来比对输入字串中是否包含有这些模式字串其中之一。
本发明另提出一种多模式搜寻的***。此多模式搜寻***包括第一处理单元、第一存储器单元及第二处理单元。第一处理单元用以根据多个模式字串,来建立关键字树,关键字树包括多个节点以及多个边缘,每一个边缘以一个标示字来标示,每一个节点以一个识别编号来代表,并且针对关键字树中的每一个节点分别建立跳表,跳表中包括多个索引字以及对应索引字的多个识别编号,其中识别编号为目前所处于所针对的节点且以索引字为索引时,应进入的下一个节点的识别编号。第一存储器单元用以储存关键字树中所有节点的跳表。第二处理单元耦接至第一存储器单元,并用以根据第一存储器单元所储存的所有节点的跳表,采用AC演算法来比对输入字串中是否包含有这些模式字串其中之一。
依据本发明的上述方法或***中,根据所有节点的跳表来比对输入字串中是否包含有模式字串其中之一包括下列步骤:先令一观察节点为根节点,再依序输入上述输入字串中的字来获得一目标字,并以此目标字为索引,从目前的观察节点的跳表中,获得对应目标字的识别编号,再令观察节点变为识别编号所代表的节点,接着,判断观察节点是否为一输出节点,当观察节点为输出节点时,输出此输出节点对应的模式字串,重复输入上述输入字串中的字后的动作,直至输入字串结束为止。
本发明因针对关键字树的每一个节点分别建立跳表,然后再利用此跳表进行多模式搜寻,因此使得输入字串的比对能够更加快速。尤其是本发明的***,将利用跳表来进行多模式搜寻以第二处理单元来执行,更能增加***的效能。
附图说明
图1A绘示AC演算法的关键字树的建制流程图。
图1B绘示AC演算法的关键字树示意图。
图1C绘示失败函数的移转示意图。
图1D绘示已知AC演算法的搜寻流程图。
图2A绘示本发明的一实施例的多模式搜寻***的示意图。
图2B绘示本发明的一实施例的节点的跳表的建立流程图。
图3绘示本发明的一实施例的关键字树各节点对应其跳表的连结状态示意图。
图4绘示本发明的一实施例的搜寻流程图。
图5绘示本发明的一实施例的总跳表的示意图。
具体实施方式
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
本发明为能改善AC演算法应用于图形处理器的执行效能,所以针对AC演算法作流程控制的改良,使其更能符合图形处理器的运作。关于AC演算法建立关键字树于前文已有详细描述,所以在此不多加赘述。
图2A绘示本发明的多模式搜寻***的示意图。多模式搜寻***200包括第一处理单元210、第一存储器单元220、第二处理单元230及第二存储器单元240。第一处理单元210根据多个模式字串,建立关键字树。在本实施例中,第一处理单元210为一中央处理器。第一存储器单元220耦接于第一处理单元210。当第一处理单元210建立关键字树后,将关键字树中所有节点的跳表储存至第一存储器单元220中。第二处理单元230耦接至第一存储器单元220,根据第一存储器单元220所储存的所有节点的跳表,来比对输入字串中是否包含有模式字串之一。在本实施例中,第二处理单元230为一图形处理单元。在本实施例中,第二存储器单元240设置于第二处理单元230之中,用以暂存部分的输入字串,但并非限定本发明,其他可以让第二处理单元存取的存储器,都可用来暂存部分的输入字串。
当第一处理单元210建立关键字树后,对关键字树中的每一节点分别建立其对应的跳表。并对关键字树中(除根节点以外)所有的节点分别定义一组前路径边缘以及前路径字值。举例来说,对于节点编号为“5”的节点而言,其前路径边缘则为其与节点编号为“4”的节点间的连结边缘,所以节点编号为“5”的节点的前路径字值为“e”。
图2B绘示本发明的节点的跳表的建立流程图。图3绘示关键字树的各节点对应其跳表的连结状态示意图。并请同时参考图2B与图3,选择关键字树300中的一个节点作为暂存节点,并针对此节点建立跳表。首先在步骤S31000中,第一处理单元210令一暂存字为字集合中其中之一,所谓的字集合就是为输入字串中所有可能出现的字的集合。例如,假设输入字串只可能为{sher},则字集合为字“s”、“h”、“e”以及“r”所组成的集合。接下来,在步骤S32000中,第一处理单元210暂时先令一结果节点为根节点,再将暂存字记录于跳表中的索引字其中之一。举例来说,令节点编号为“1”的节点为暂存节点,将输入字“h”设为暂存字。在步骤S33000中,检查暂存节点是否具有一个连结边缘,其中此连结边缘的标示字与暂存字相同。
若暂存节点具有此连结边缘时,则执行步骤S33100,则将连结边缘所连结的次一节点的识别编号记录于跳表中对应该暂存字的识别编号,再跳到步骤S34100,检查在字集合中是否没有其他可能的字可以用来变更暂存字,当已经没有可能字可以变更时则结束,否则执行步骤S34200,变更暂存字为字集合中的另外一个没有使用过的字,接着跳到步骤S32000去执行。举例来说,令图3中节点编号为“1”的节点为暂存节点且暂存字为“e”,则节点编号为“2”的节点与暂存节点之间具有一个连结边缘,且其索引标示字为“e”。所以将节点编号“2”记录至跳表中对应该暂存字“e”的识别编号。
若暂存节点不具有此连结边缘时,则执行步骤S33200,从关键字树300中找出一组符合节点集合,此符合节点集合中所包括的符合节点的前路径字值与暂存字相同。
在步骤S33300中,将符合节点集合中的符合节点反推到具有符合节点的前路径边缘的节点。举例来说,对于节点编号为“5”的节点且暂存字为“r”而言,在关键字树300中的符合节点为节点编号为“8”的节点。再将符合节点反推至其前路径边缘的节点(意即为节点编号为“2”的节点),并且将前路径边缘的节点设为新的符合节点。
接下来,在步骤S33400中,比对符合节点集合中的某一符合节点与暂存节点的前路径字值是否相同。若符合节点与暂存节点的前路径字值相同时,则跳到步骤S33500,依续前例,比对符合节点(节点编号为“2”的节点)与暂存节点(节点编号为“5”的节点)两者的前路径字。因两者的前路径字相同,则跳到步骤S33500。若符合节点与暂存节点的前路径字值不相同时,则执行步骤S33420,比对此符合节点是否为根节点310。若符合节点为根节点310时,则执行步骤S33421,令结果节点等于此符合节点最原始未被反推前的节点。接着执行步骤S33422从符合节点集合中移除此符合节点。接着,在步骤S33500中,检查符合节点集合中是否所有符合节点都已经比对过。如果不是,则执行步骤S33510的变更符合节点后,再跳到步骤S33400去执行,换句话说,重复执行步骤S33400后的步骤,直至完成所有的符合节点为止。若符合节点集合中所有符合节点都已经比对过的话,则执行步骤S33520,将暂存节点反推到具有暂存节点的前路径边缘的节点。依续前例,将暂存节点反推至其前路径边缘的节点(意即为节点编号为“4”的节点)。接着,执行步骤S33600,比对此暂存节点是否为根节点310。若暂存节点不为根节点310,则到步骤S33300去执行,换句话说,重复执行步骤S33300后的步骤,直到暂存节点前推至根节点310。若暂存节点为根节点310,则跳至步骤S33700执行,并令结果节点的识别编号记录于跳表中对应暂存字的识别编号,再跳到步骤S34100执行。也就是说,变更暂存字为字集合中的下一字,重复步骤S32000后的步骤,直至字集合的所有字都曾经为暂存字为止。最后,当第一处理单元210建立完关键字树300中所有节点的跳表后,将这些跳表储存于第一存储器单元220中。
延续前例,比对符合节点(节点编号为“2”的节点)与暂存节点两者的前路径字(节点编号为“5”的节点)。因符合节点与暂存节点两者的前路径字皆为“e”,所以将符合节点反推至其前路径边缘的节点,将此前路径边缘的节点(节点编号为“1”的节点)设为符合节点。再将暂存节点反推至其前路径边缘的节点,并将此前路径边缘的节点(节点编号为“4”的节点)设为暂存节点。再重复反推及比对两者的前路径字,直至暂存节点抵达根节点310为止。
在此将符合节点的节点编号移转顺序分别列出:节点编号为“2”的节点→节点编号为“1”的节点→节点编号为“0”的节点。符合节点移转时所对应的前路径字分别为“e”、“h”。另外,暂存节点的节点编号移转顺序也分别列出:节点编号为“5”的节点→节点编号为“4”的节点→节点编号为“3”的节点→节点编号为“0”的节点。暂存节点移转时所对应的前路径字分别为“e”、“h”与“s”。而节点编号为“8”的节点会被设为结果节点。
图4绘示本发明的实施例搜寻流程图。当有输入字串欲进行比对时,第二处理单元230会根据本实施例的AC演算法比对搜寻输入字串是否符合预设的多模式字串,搜寻方法包括下列步骤:在步骤S410中,首先第二处理单元230令观察节点为根节点310。接着在步骤S420中,依序从输入字串中获得一个字并称之为目标字。在步骤S430中,以目标字为索引,并从观察节点的跳表中,获得对应目标字的识别编号,再令观察节点移转到识别编号所代表的节点。接下来在步骤S440中,判断观察节点是否为输出节点。若观察节点为输出节点,则执行步骤S441输出此输出节点的模式字串。最后,步骤S450第二处理单元230重复上述三个步骤,直至输入字串结束为止。
依据前例所建立的关键字树300及其所有节点的跳表,并且输入一字串{sher}来搜寻为例。依序输入“s”、“h”、“e”、“r”各字。首先在根节点310状态时第一个接收到字为“s”,因根节点310具有一个标示字“s”的边缘,所以移转至节点编号为“3”的节点。接着,索引节点编号为“3”的节点的跳表是否具有目标字“h”的对应的识别编号,因节点编号为“3”的节点的跳表对应“h”的识别编号为节点编号为“4”的节点。其余字则以此类推。所以字串{sher}在此关键字树300的移转顺序为:节点编号为“0”的节点→节点编号为“3”的节点→节点编号为“4”的节点→节点编号为“5”的节点→节点编号为“8”的节点。本实施例的AC演算法是利用索引找查跳表的方式取代原先的流程控制处理。
除此之外,本领域普通技术人员应当知道,跳表的建立方式不仅限于各节点分别建立跳表。当然,也可以将关键字树的所有节点的跳表总和成一总跳表500,并将其储存于第一存储器单元220中。图5绘示总跳表的示意图。另外在总跳表500中更加入各节点索引项次,以供节点索引其对应的跳表。如图5所示,例如当在节点编号为“5”时,索引总跳表中对应的标示字分别可以得到其移转的次一节点编号。其表示式如下所示:
J[k][e]=n (2-1)
其中,k代表索引节点编号。e为被索引节点的索引项次,索引项次是对应此节点对其他节点的标示字。n代表为对应索引项次的移转至次一节点编号。根据图3而言:
J[5][104(h)]=1 (2-2)
J[5][114(r)]=8 (2-3)
J[5][115(s)]=3 (2-4)
当处于节点编号为“5”的节点,且索引项次为‘104’(即标示字为“h”)时则移转至节点编号为“1”的节点。当处于节点编号为“5”的节点,且索引项次为‘114’(即标示字为“r”)时则移转至节点编号为“8”的节点。其他可依此类推。
综上所述,本发明因采用对关键字树的每一个节点分别建立跳表,在跳表中包括多个索引字以及对应索引字的多个识别编号,这些识别编号为处于所针对的节点且以这些索引字为索引时,应进入的下一个节点的识别编号。使得将图形处理器所不适合的流程控制处理,改成索引找查表的方式进行,使得第二处理单元应用对于本发明的AC演算法时可以能够更加快速地搜寻。
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。
附图中符号的简单说明如下:
100:关键字树
110:根节点
200:多模式搜寻***
210:第一处理单元
220:第一存储器
230:第二处理单元
240:第二存储器
300:关键字树
310:根节点
500:总跳表
S110~S190:AC演算法的建制的步骤
S210~S250:AC演算法搜寻的步骤
S31000~S33700:跳表的建立的步骤
S410~S450:本发明的实施例中搜寻的步骤。
Claims (8)
1.一种多模式搜寻的方法,用以比对一输入字串中是否包含有多个模式字串其中之一,所述模式字串用以建立一关键字树,该关键字树包括多个节点以及多个边缘,每一边缘以一标示字来标示,每一节点以一识别编号来代表,该关键字树的第一个节点为一根节点,其特征在于,该方法包括下列步骤:
针对该关键字树中的每一节点建立一跳表,该跳表包括多个索引字以及对应所述索引字的多个识别编号,所述识别编号为处于该节点且以所述索引字为索引时,应进入的下一个节点的识别编号;
令一观察节点为该根节点;
步骤一:依序输入该输入字串中的字,以获得一目标字;
步骤二:以该目标字为索引,从该观察节点的跳表中,获得对应该目标字的该识别编号,再令该观察节点变为该识别编号所代表的节点;
步骤三:判断该观察节点是否为一输出节点,当该观察节点为该输出节点时,输出该输出节点对应的模式字串;以及
重复上述步骤一至步骤三的动作,直至该输入字串结束为止。
2.根据权利要求1所述的多模式搜寻的方法,其特征在于,针对该关键字树中除该根节点以外的所有节点定义一前路径边缘以及一前路径字值,该前路径边缘的路径的下一节点即为该前路径边缘所针对的节点,且该前路径边缘的该标示字即为该前路径字值,选择该关键字树中的一个节点作为暂存节点,则针对该关键字树中的该暂存节点建立该跳表,更包括下列步骤:
步骤一:令一暂存字为一字集合中其中之一,该字集合为该输入字串的所有可能出现的字的集合;
步骤二:令一结果节点为该根节点,将该暂存字记录于该跳表中的所述索引字其中之一;
步骤三:检查该暂存节点是否具有一连结边缘,其中该连结边缘的标示字与该暂存字相同;
步骤四:若该暂存节点具有该连结边缘时,将该连结边缘所连结的次一节点的识别编号记录于该跳表中对应该暂存字的该识别编号,并跳到步骤十五;
步骤五:若该暂存节点不具有该连结边缘时:
步骤六:从该关键字树中找出一符合节点集合,该符合节点集合中的一符合节点的前路径字值与该暂存字相同;
步骤七:将该符合节点集合中的所述符合节点反推到具有该符合节点的前路径边缘的节点;
步骤八:比对该符合节点集合中一个符合节点与该暂存节点的前路径字值是否相同;
步骤九:若该符合节点的前路径字值与该暂存节点的前路径字值不相同时:
步骤十:比对该符合节点是否为该根节点,若为该根节点时,令该结果节点等于该符合节点最原始未被反推前的节点;以及
步骤十一:从该符合节点集合中移除该符合节点;
步骤十二:变更该符合节点为该符合节点集合中的下一符合节点,重复步骤八至步骤十一的动作,直至该符合节点集合中所有符合节点都比对过为止;
步骤十三:将该暂存节点反推到具有该暂存节点的前路径边缘的节点;以及
步骤十四:比对该暂存节点是否为该根节点,若为该根节点时,令该结果节点的识别编号记录于该跳表中对应该暂存字的该识别编号,并跳到步骤十五,若不为该根节点,则重复步骤七至步骤十四的动作;以及
步骤十五:变更该暂存字为该字集合中的下一字,重复步骤二至步骤十五的动作,直至该字集合的所有字都曾经为该暂存字为止。
3.根据权利要求1所述的多模式搜寻的方法,其特征在于,建立该关键字树,更包括下列步骤:
步骤一:建立该根节点;
步骤二:输入所述模式字串之一;
步骤三:令该观察节点为该根节点;
步骤四:依序输入被输入的所述模式字串内的一个字;
步骤五:检查该观察节点是否具有一符合标示边缘,该符合标示边缘的该标示字与被输入的所述字相同:
步骤六:当具有时,跟随该符合标示边缘的路径,令该观察节点变为该符合标示边缘的路径的下一节点;以及
步骤七:当不具有时,新增一个边缘与一个节点,使新增的所述边缘的该标示字为被输入的所述字,并对新增的所述节点给予该识别编号,且令该观察节点变为新增的所述节点;
步骤八:重复步骤四至步骤七的动作,直至被输入的模式字串结束为止后,使目前的该观察节点为该输出节点;以及
步骤九:重复步骤二至步骤八的动作,直至所有所述模式字串都输入为止。
4.一种多模式搜寻的***,其特征在于,包括:
一第一处理单元,用以根据多个模式字串,建立一关键字树,该关键字树包括多个节点以及多个边缘,每一边缘以一标示字来标示,每一节点以一识别编号来代表,并且针对该关键字树中的每一节点建立一跳表,该跳表包括多个索引字以及对应所述索引字的多个识别编号,所述识别编号为处于所针对的节点且以所述索引字为索引时,应进入的下一个节点的识别编号;
一第一存储器单元,用以储存该关键字树中所有节点的该跳表;以及
一第二处理单元,耦接至该第一存储器单元,用以根据该第一存储器单元所储存的所有节点的该跳表,来比对一输入字串中是否包含有所述模式字串其中之一;
其中,该关键字树的第一个节点为一根节点,比对该输入字串中是否包含有所述模式字串其中之一的步骤包括:该第二处理单元先令一观察节点为该根节点,再依序输入该输入字串中的字来获得一目标字,并以该目标字为索引,从该观察节点的跳表中,获得对应该目标字的该识别编号,再令该观察节点变为该识别编号所代表的节点,接着,判断该观察节点是否为一输出节点,当该观察节点为该输出节点时,输出该输出节点对应的模式字串,该第二处理单元重复输入该输入字串中的字后的动作,直至该输入字串结束为止。
5.根据权利要求4所述的多模式搜寻的***,其特征在于,针对该关键字树中除该根节点以外的所有节点定义一前路径边缘以及一前路径字值,该前路径边缘的路径的下一节点即为该前路径边缘所针对的节点,且该前路径边缘的该标示字即为该前路径字值,选择该关键字树中的一个节点作为暂存节点,则所述第一处理单元针对该暂存节点建立该跳表时:
步骤一:令一暂存字为一字集合中其中之一,该字集合为该输入字串的所有可能出现的字的集合;
步骤二:令一结果节点为该根节点,将该暂存字记录于该跳表中的所述索引字其中之一;
步骤三:检查该暂存节点是否具有一连结边缘,其中该连结边缘的标示字与该暂存字相同;
步骤四:若该暂存节点具有该连结边缘时,将该连结边缘所连结的次一节点的识别编号记录于该跳表中对应该暂存字的该识别编号,并跳到步骤十五;以及
步骤五:若该暂存节点不具有该连结边缘时:
步骤六:从该关键字树中找出一符合节点集合,该符合节点集合中的一符合节点的前路径字值与该暂存字相同;
步骤七:将该符合节点集合中的所述符合节点反推到具有该符合节点的前路径边缘的节点;
步骤八:比对该符合节点集合中一个符合节点与该暂存节点的前路径字值是否相同;
步骤九:若该符合节点的前路径字值与该暂存节点的前路径字值不相同时:
步骤十:比对该符合节点是否为该根节点,若为该根节点时,令该结果节点等于该符合节点最原始未被反推前的节点;以及
步骤十一:从该符合节点集合中移除该符合节点;
步骤十二:变更该符合节点为该符合节点集合中的下一符合节点,重复步骤八至步骤十一的动作,直至该符合节点集合中所有符合节点都比对过为止;
步骤十三:将该暂存节点反推到具有该暂存节点的前路径边缘的节点;以及
步骤十四:比对该暂存节点是否为该根节点,若为该根节点时,令该结果节点的识别编号记录于该跳表中对应该暂存字的该识别编号,并跳到步骤十五,若不为该根节点,则重复步骤七至步骤十四的动作;以及
步骤十五:变更该暂存字为该字集合中的下一字,重复步骤二至步骤十五的动作,直至该字集合的所有字都曾经为该暂存字为止。
6.根据权利要求4所述的多模式搜寻的***,其特征在于,该***更包括一第二存储器单元,设置于该第二处理单元中,用以暂存部分的该输入字串。
7.根据权利要求4所述的多模式搜寻的***,其特征在于,该第一处理单元为一中央处理器。
8.根据权利要求4所述的多模式搜寻的***,其特征在于,该第二处理单元为一图形处理器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101955363A CN100527134C (zh) | 2007-12-04 | 2007-12-04 | 多模式搜寻的方法与*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101955363A CN100527134C (zh) | 2007-12-04 | 2007-12-04 | 多模式搜寻的方法与*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101158980A CN101158980A (zh) | 2008-04-09 |
CN100527134C true CN100527134C (zh) | 2009-08-12 |
Family
ID=39307082
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101955363A Active CN100527134C (zh) | 2007-12-04 | 2007-12-04 | 多模式搜寻的方法与*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100527134C (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5238034B2 (ja) * | 2008-09-05 | 2013-07-17 | 日本電信電話株式会社 | 近似照合装置、近似照合方法、プログラム及び記録媒体 |
CN103198150B (zh) * | 2013-04-24 | 2016-04-20 | 清华大学 | 一种大数据索引方法及*** |
CN104346362B (zh) * | 2013-07-29 | 2019-03-26 | 腾讯科技(深圳)有限公司 | 一种基于属性值查找目标对象的方法和装置 |
CN103618602B (zh) * | 2013-10-21 | 2017-01-25 | 北京交通大学 | 一种基于堆的跳表认证路径产生的新方法 |
CN110222143B (zh) | 2019-05-31 | 2022-11-04 | 北京小米移动软件有限公司 | 字符串匹配方法,装置,存储介质及电子设备 |
CN111475476A (zh) * | 2020-03-08 | 2020-07-31 | 苏州浪潮智能科技有限公司 | 一种基于svn避免多人等待文件解锁的方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1316696A (zh) * | 2000-04-06 | 2001-10-10 | 国际商业机器公司 | 用于网络处理器的全匹配搜索方法和设备 |
CN1979482A (zh) * | 2006-11-08 | 2007-06-13 | 中国工商银行股份有限公司 | 一种基于键树的特定文本信息处理方法及*** |
-
2007
- 2007-12-04 CN CNB2007101955363A patent/CN100527134C/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1316696A (zh) * | 2000-04-06 | 2001-10-10 | 国际商业机器公司 | 用于网络处理器的全匹配搜索方法和设备 |
CN1979482A (zh) * | 2006-11-08 | 2007-06-13 | 中国工商银行股份有限公司 | 一种基于键树的特定文本信息处理方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN101158980A (zh) | 2008-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8301437B2 (en) | Tokenization platform | |
CN100527134C (zh) | 多模式搜寻的方法与*** | |
US5664172A (en) | Range-based query optimizer | |
CN103425672B (zh) | 一种数据库索引的建立方法及装置 | |
CN108897761B (zh) | 一种聚簇存储方法及装置 | |
US20070294235A1 (en) | Hashed indexing | |
Reinanda et al. | Mining, ranking and recommending entity aspects | |
CN111666468A (zh) | 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法 | |
CN107209768A (zh) | 用于数据集的可扩展排序的方法和设备 | |
US20130159315A1 (en) | Methods for prefix indexing | |
JP4491480B2 (ja) | インデクス構築方法、文書検索装置及びインデクス構築プログラム | |
CN117763077A (zh) | 数据查询方法及装置 | |
Mothe et al. | Defining an Optimal Configuration Set for Selective Search Strategy-A Risk-Sensitive Approach | |
CN115759065A (zh) | 一种基于消解原理公共子句消除的sat预处理方法 | |
US6842750B2 (en) | Symbolic simulation driven netlist simplification | |
US7774347B2 (en) | Vortex searching | |
RU2490702C1 (ru) | Способ ускорения обработки множественных запросов типа select к rdf базе данных с помощью графического процессора | |
JP2018136640A (ja) | 検出方法、検出装置および検出プログラム | |
WO2013172309A1 (ja) | ルール発見システムと方法と装置並びにプログラム | |
Yu et al. | Distributed top-k keyword search over very large databases with MapReduce | |
US20230018978A1 (en) | Data Layout Model Generation System | |
WO2010013320A1 (ja) | 表形式データを操作する方法、分散メモリ型マルチプロセッサ、及び、プログラム | |
CN103853796B (zh) | 数据***方法和装置 | |
US11409746B2 (en) | Method and apparatus for processing query using N-ary join operators | |
JP3578045B2 (ja) | 全文検索方法及び装置及び全文検索プログラムを格納した記憶媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: S3 GRAPHICS (SHANGHAI) CO., LTD. Free format text: FORMER OWNER: WEISHENG ELECTRONIC CO. LTD. Effective date: 20150715 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20150715 Address after: 201203 Shanghai Jinke Road, Pudong New Area Zhangjiang hi tech Park No. 2537 Patentee after: Asahi Electronics (Shanghai) Co., Ltd. Address before: Taiwan County, Taipei, China Patentee before: Weisheng Electronic Co., Ltd. |