1.一种字符串检索方法,其特征在于,获得给定模式串与目标串进行匹配的优化顺序,以及匹配过程中模式串在目标串中跳跃匹配的距离,从而达到快速检索的目的,其具体步骤如下:步骤1、获取模式串中的特征对;
步骤2、获取记录模式串与目标串进行匹配的优化顺序PNext数组;
步骤3、获取记录模式串在目标串中跳跃匹配距离的TNext数组和FNext数组;
步骤4、模式串在目标串中进行从左到右匹配时,如果对应字符适配,根据步骤2获得的匹配顺序依次进行匹配,如果对应字符失配,根据步骤3事先获取的记录数组进行跳跃匹配;
特征对为模式串中出现次数最多的字符对,特征对的个数不少于2,特征对左边的字符称为特征前序,右边的字符称为特征后序,特征前序与特征后序是两个互不相同的字符,将模式串中所有特征对从右至左进行编号,编号从1开始,即最右边的特征对为第一特征对,如果次数最多的字符对有不止1个,选取它们中最右边的字符对作为特征对;
所述步骤2中,当成功获取特征对之后,获取记录模式串字符与目标串字符匹配顺序的PNext数组,具体方法如下:
获取特征对之后,模式串分成特征对和非特征区,构建与模式串等长的PNext数组,将第一个特征后序的位置作为匹配起点,将PNext数组中与匹配起点相同位置的元素赋值为第一个特征对的前序索引,将与第一个特征前序相同位置的元素赋值为下一个特征对的特征后序索引,以此类推;将与最后一个特征对前序位置相同的元素赋值为模式串最右边第一个非特征区字符索引,然后依次从右到左对非特征区字符对应位置进行赋值,每个字符位置对应元素赋值为其相邻的下一个非特征区字符索引,并将PNext数组中最后一个赋值的元素标记为结束标志;
所述步骤3中,当成功获取特征对之后,模式串与目标串字符失配时记录跳跃距离的记录数组的具体获取方法如下:
任意字符失配时根据相应记录数组获取最佳跳跃距离,记录数组包括模式串第一特征对与目标串字符失配时记录最佳跳跃距离的FNext数组,以及模式串除第一特征对之外的字符与目标串字符失配时记录最佳跳跃距离的TNext数组;
FNext数组储存以目标串字符集中的连续两个或者三个字符组成的所有字符串所能提供的最佳跳跃距离,并且每个字符串唯一映射一个FNext数组元素;
首先,获取目标串字符集,计算目标串字符集与自身的一重或二重笛卡尔积,逐一获取由该字符集组成的所有字符串集合,并一一映射到FNext数组中的一个数组元素,即每个字符串唯一对应FNext数组中的一个元素位置,同时对该位置进行赋初值,具体方法如下:当以两个字符构建FNext数组时,若模式串首字符与获取的两个字符中第二个字符相同,将该字符串映射的数组元素赋值为PLen‑1,否则赋值为PLen,其中PLen为模式串长度;
当以三个字符构建FNext数组时,若模式串中首字符、第二字符分别与获取的三个字符中第二个、第三个字符均相同,将该字符串唯一映射的数组元素赋值为PLen‑2,若模式串首字符与获取的三个字符中第三个字符相同,将该字符串唯一映射的数组元素赋值为PLen‑
1,否则赋值为PLen;
然后,对模式串由左至右按长度为2或3的字符进行遍历,对遍历到的每一个字符串计算最佳跳跃距离,其值为该字符串最右边字符与模式串最右边字符在模式串中所在位置之间的距离,将该字符串与FNext数组映射的数组元素重新赋值为该最佳跳跃距离;
当由左至右进行遍历并重新赋值完成之后,FNext数组中的各元素即为模式串中第一个特征对与目标串匹配中失配时,模式串最右边两个或三个字符在目标串中对应位置上的任意字符串所能提供的最佳跳跃距离;
TNext数组具体构建方法为:
构建与模式串等长的TNext数组,TNext数组中每一个数组元素记录对应模式串字符失配时所能提供的最佳跳跃距离,包括模式串中特征对失配时和非特征区字符失配时所能跳跃的最佳距离;
首先,获取特征对失配时所能提供的最佳跳跃距离: 依次对TNext数组中与模式串第二个特征对对应位置相同的数组元素开始进行赋值,将模式串中正在赋值的特征对右边的所有字符称为已知字符串,该字符串中的特征对称为已知特征对,第一个已知特征对为基准特征对,使用模式串从第二个特征开始对依次与基准特征对对齐,利用标识模式串中所有特征前序与特征后序所在位置的Sequence数组、依次记录所有特征前序索引的Index数组和记录相邻特征前序间距的Distance数组构建TNext数组,当已知特征对与模式串特征对完全对齐时,用第一个特征前序索引减去与基准特征对对齐的特征前序索引,得到正在赋值的特征对失配时的最佳跳跃距离;若模式串中各个特征对与基准特征对逐一对齐,但不满足已知特征对与模式串特征对完全对齐的条件,获得该模式串所能提供的最长跳跃距离,最长跳跃距离的获取方法为:判断特征后序与模式串最左边的字符是否相等,若相等,最长跳跃距离即为第一个特征后序的索引值,否则最长跳跃距离即为第一个特征后序的索引值加1,并将TNext数组所有后续待赋值数组元素全部赋值为该最长跳跃距离;
其次,获取非特征区字符失配时所能提供的最佳跳跃距离: 将模式串作为已知字符串,使用特征对失配时获取最佳跳跃距离的方法,获取非特征区字符失配时所能提供的最佳跳跃距离,并将所有TNext数组中与模式串中非特征区字符对应位置的数组元素都赋值为该距离;
其中,Sequence数组、Index数组和Distance数组可在步骤2获取PNext记录数组过程中得到。
2.根据权利要求1所述的一种字符串检索方法,其特征在于,所述步骤3中,当获取特征对失败之后,对PNext数组和TNext数组进行特殊构建,具体构建步骤如下:当模式串不存在特征对时,匹配起点为模式串最右边的字符位置,从匹配起点开始由右至左,依次构建特殊PNext数组;当模式串最右边两个字符失配时,根据特殊FNext数组获取最佳跳跃距离,特殊FNext数组的构建与权利要求1中所述的FNext数组构建方法相同,否则根据特殊TNext数组获取最佳跳跃距离,其中特殊TNext数组的构建方法如下:构建与模式串等长的TNext数组,其每一个数组元素记录对应模式串字符失配时所能提供的最佳跳跃距离,判断模式串最左边的字符与模式串最右边的字符是否相等,若相等,则将TNext数组所有值赋值为PLen‑1 ,否则,赋值为PLen,即目标串在模式串中跳跃距离为模式串长度。
3.根据权利要求1所述的一种字符串检索方法,其特征在于,所述步骤4中,获取PNext、TNext和FNext数组之后,将模式串在目标串中从左至右进行检索,检索过程中,使用模式串指针Pi与目标串指针Ti分别指向模式串的字符与目标串的字符进行匹配,当模式串移动至目标串某一位置时,从模式串匹配起点FirstFeaStr开始,从右至左与目标串对应字符进行跳跃匹配;
当模式串指针与目标串指针指向的字符适配时,使用模式串指针获取PNext数组中对应的数组元素值PNext[Pi],并分别计算模式串与目标串指针指向的下一个匹配字符位置:先将Ti指向Ti‑Pi+PNext[Pi],再将Pi指向PNext[Pi];
当模式串指针与目标串指针指向的字符失配时,如果模式串指针指向的字符是第一特征对,获取目标串中与模式串最后两个或者三个字符对齐的字符串,然后获取FNext数组中与该字符串唯一映射的数组元素值V,该值即为当前模式串第一特征对与目标串中对应字符失配的最佳跳跃距离,通过该最佳跳跃距离计算模式串与目标串指针指向的下一个匹配字符位置:先将Ti指向Ti‑Pi+FirstFeaStr+V,再将Pi指向FirstFeaStr;如果模式串指针指向的字符不是第一特征对,使用模式串指针获取TNext数组中对应的数组元素值TNext[Pi],该值即为当前模式串字符与目标串中对应字符失配的最佳跳跃距离,通过该最佳跳跃距离计算模式串与目标串指针指向的下一个匹配字符位置:先将Ti指向Ti‑Pi+FirstFeaStr+TNext[Pi],再将Pi指向FirstFeaStr。