一种挖掘最大重复序列的方法及装置的制造方法_2

文档序号:9375664阅读:来源:国知局
种可能的实现方式中,结合第二方面至第二方面的第七种可能 的实现方式中的任一种实现方式,所述装置还包括:
[0063] 模式信息存储模块,用于将确定的最大重复序列以及最大非串联重复序列的相关 信息存储在预设的模式信息表中,以及,将所述最大重复序列以及所述最大非串联重复序 列的相关彳目息在所述后缀树上进彳丁表不;其中,所述相关?目息包含:序列编号,序列内容, 序列长度。
[0064] 第三方面,本发明实施例提供一种挖掘最大重复序列的装置,包括:
[0065] 通信单元,用于获取字符;
[0066] 处理器,用于将通信单元获取的字符追加到流水线集合中的每个流水线中,分别 判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述 流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所 述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包 含的序列的尾字符在所述后缀树上的位置;
[0067] 在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上 对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列。 [0068] 在第三方面的第一种可能的实现方式中,结合第三方面,所述处理器具体用于:
[0069] 在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是 否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否 为同一种字符;
[0070] 若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与 所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流 水线中的序列为最大重复子序列;
[0071] 若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者, 与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一 流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序 列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重 复序列,并销毁所述第一流水线。
[0072] 在第三方面的第二种可能的实现方式中,结合第三方面的第一种可能的实现方 式,所述处理器还用于 :
[0073] 在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符 集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的 左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的 序列相同的序列相邻的左边字符不为同一种字符;
[0074] 在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相 同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符, 若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。 [0075] 在第三方面的第三种可能的实现方式中,结合第三方面至第三方面的第二种可能 的实现方式中的任一种实现方式,所述处理器还用于:
[0076] 在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所 述流水线包含的序列的尾字符相邻的下一个字符的位置;
[0077] 判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追 加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字 符后的流水线中的序列与后缀树上对应的序列相同。
[0078] 在第三方面的第四种可能的实现方式中,结合第三方面,所述处理器还用于:
[0079] 在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上 对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指 针指向追加所述字符后的所述第二流水线中序列的尾字符在所述后缀树上的位置;
[0080] 根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
[0081] 在第三方面的第五种可能的实现方式中,结合第三方面的第四种可能的实现方 式,所述处理器还用于 :
[0082] 判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是 否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符 时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相 同的流水线;
[0083] 若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
[0084] 在第三方面的第六种可能的实现方式中,结合第三方面的第五种可能的实现方 式,所述处理器还用于:
[0085] 确定所述第二流水线的参考流水线中的序列为由所述第二流水线中的序列组成 的串联序列,销毁第二流水线以及第二流水线的参考流水线。
[0086] 在第三方面的第七种可能的实现方式中,结合第三方面至第三方面的第六种可能 的实现方式中的任一种实现方式,所述处理器还用于:
[0087] 在通信单元获取字符之前,建立空流水线;
[0088] 遍历所述后缀树的每个分支的首字符;
[0089] 若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所 述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所 述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不 同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始分裂成两个 分支,将所述字符插入到分裂后的所述后缀树的每一个分支上;若存在第三流水线,在追加 所述字符后的序列与后缀树上对应的序列相同,将所述字符插入到所述后缀树的每一个分 支上;
[0090] 若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点分 裂出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的 序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指 针指向的位置开始分裂成两个分支,将所述字符插入到分裂后的所述后缀树的每一个分支 上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符 插入到分裂后的所述后缀树的每一个分支上。
[0091] 在第三方面的第八种可能的实现方式中,结合第三方面至第三方面的第七种可能 的实现方式中的任一种实现方式,所述处理器还用于:
[0092] 将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式 信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后 缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
[0093] 由上可知,本发明实施例提供一种挖掘最大重复序列的方法及装置,获取字符;将 所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中 的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述 流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的 字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位 置;在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的 序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列;如此,通 过流水线结构和后缀树结构的相互结合,挖掘最大重复序列,提高了计算速率;同时,在所 述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相 同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所 述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;根据所述第二流 水线的位置指针以及第二预设策略确定最大非串联重复序列;以使得所挖掘的最大重复序 列为非串联重复序列;如此,避免了现有技术不能实现增量式挖掘,计算量大,以及挖掘的 最大重复序列包含冗余的串联结构,不能有效地表达序列模式的最小单元的问题。
【附图说明】
[0094] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0095] 图1为现有技术中挖掘最大重复序列的流程示意图;
[0096] 图2为本发明实施例提供的一种挖掘最大重复序列的方法的流程图;
[0097] 图3为本发明实施例提供的挖掘字符串"abcabx"中的最大重复序列的流程示意 图;
[0098] 图4为本发明实施例提供的挖掘字符串"abcababab"中的最大非串联重复序列的 流程示意图;
[0099] 图5为本发明实施例提供的将序列模式信息在后缀树上表示的示意图;
[0100] 图6为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
[0101] 图7为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
[0102] 图8为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
[0103] 图9为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
[0104] 图10为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
[0105] 图11为本发明实施例提供的一种挖掘最大重复序列的装置110的结构图。
【具体实施方式】
[0106] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0107] 实施例一
[0108] 图2为本发明实施例提供一种挖掘最大重复序列的方法的流程图,如图2所示,可 以包括以下步骤:
[0109] 201 :获取字符。
[0110] 其中,所述字符属于一个字符串,所述字符串为包含多个字符的长序列,字符为所 述字符串中的任一字符;优选的,可以从存储有所述字符串的数据库中,按照所述字符串中 的字符顺序逐一读取字符;例如,假设字符串为"abcabxa",则按照字符串中的字符顺序分 别读取的字符为 " a"、"b "、" c "、" a"、"b "、" X "、" a"。
[0111] 进一步,还可以在一段时间内,按照时间先后接收其他系统发送的字符,形成字符 串;例如,在一段时间的每一时刻分别接收到的字符为"a"、"b"、"c"、"a"、"b"、"x"、"a"JJ 在这段时间内接收到的字符串为"abcabxa"。
[0112] 202:将所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后 的每个流水线中的序列与后缀树上对应的序列是否相同。
[0113] 其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针, 所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针 指向所述流水线包含的序列的尾字符在所述后缀树上的位置;例如,如图4所示,字符串为 "abcababab",在步骤6读取的字符为"a",此时,流水线集合包含#4、#5流水线,后缀树为 第五后缀树,#4流水线包含与字符"a"之前的序列重复的序列"ab"以及序列"ab"中尾字 符"b"在第五后缀树上的位置指针〈r - 1,2〉,#5流水线包含与字符"a"之前的序列重复 的序列"b"以及序列"b"在第五后缀上的位置指针〈r - 2,1〉。
[0114] 所述将字符追加到流水线中指的是将所述字符存储在流水线包含的序列的后面; 例如,流水线1包含的序列为"ab",获取的字符为"X",则将获取的字符追加到流水线1中 为将字符"X"添加到序列"ab"中,以"abx"的形式存储在流水线1中。
[0115] 优选的,所述分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的 序列是否相同,可以包括:
[0116] 在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所 述流水线包含的序列的尾字符相邻的下一个字符的位置;
[0117] 判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追 加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字 符后的流水线中的序列与后缀树上对应的序列相同。
[0118] 例如,如图4所示,在步骤6,依次移动#4、#5流水线的位置指针,使其指向位置 〈r - 1,3〉以及〈r - 2,2〉,发现〈r - 1,3〉以及〈r - 2,2〉位置上的字符均为"c",与字符 不相同,则确定追加字符后的#4流水线中的序列"aba"与第五后缀树上对应的序列不同, 追加字符后的#5流水线中的序列"ba"与第五后缀上对应的序列不同。
[0119] 203:在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀 树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序 列。
[0120] 例如,如图4所示,在步骤6,追加字符"a"后的#4流水线中的序列"aba"与第五 后缀树上对应的序列不同,则不将字符"a"追加到#4流水线中,同时,根据第一预设策略以 及#4流水线中的序列"ab"确定#4流水线中的序列"ab"是否是最大重复序列。
[0121] 优选的,所述根据第一预设策略以及所述第一流水线中的序列确定最大重复序 列,可以包括:
[0122] 在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是 否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否 为同一种字符;
[0123] 若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与 所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流 水线中的序列为最大重复子序列;
[0124] 若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者, 与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一 流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序 列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重 复序列,并销毁所述第一流水线。
[0125] 其中,所述在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的 左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右 边字符是否为同一种字符,可以包括:
[0126] 在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符 集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的 左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的 序列相同的序列相邻的左边字符不为同一种字符;
[0127] 在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相 同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符, 若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。
[0128] 例如
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1