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

文档序号:9375664阅读:238来源:国知局
一种挖掘最大重复序列的方法及装置的制造方法
【技术领域】
[0001] 本发明涉及数据挖掘领域,尤其涉及一种挖掘最大重复序列的方法及装置。
【背景技术】
[0002] 模式挖掘指在一组序列数据中,寻找一些特定的便于人们理解与解释的基本序列 模式,实现将所处理的长序列数据进行分解,便于后期各种建模和再分析,降低在大数据流 量中人为干预的程度,提高序列处理的效率和准确度,因此,模式挖掘在以软件控制的设备 中起到了非常重要的作用,例如,模式挖掘在智能手机的用户行为建模、传感器数据流分 析、金融系统欺诈交易识别、生物基因序列检测等多种领域中被广泛使用。在模式挖掘的实 际应用中,人们通常将序列数据中包含最多信息且做成结构最小的序列模式-最大重复序 列作为基本序列模式,但是,在模式挖掘中,有一类数据随着时间的变化而不断有新的数据 产生,例如,手机设备所携带的传感器可以记录每时每刻用户的位置、通话、上网浏览记录 等,这类数据根据时间先后顺序排列,并且以序列化的方式呈现,尤其是,随着大数据与移 动互联网的蓬勃发展,这些序列数据产生的数量和速度都成倍增长,如何从这些序列数据 中实时动态地挖掘出基本序列模式(即最大重复序列)成为亟待解决的问题。
[0003] 目前,挖掘序列数据中最大重复序列的方法为:根据一段时间内的序列数据建立 相应的后缀树,再在后缀上查找最大重复序列;其中,后缀树是一种数据结构,能快速解决 很多关于字符串的问题,用来支持有效的字符匹配和查询;例如,将序列数据"abcabxa$" 用图1所示的后缀树来表示,即后缀树的根节点到每一个叶子节点的路径表示序列 "abcabxar中的每一个后缀子序列;然后,寻找存在不同左边元素的两个叶子节点,并标记 出来;从叶子节点开始自下而上遍历后缀树上的每一个节点,如果一个节点下的子树中存 在已标记的节点,则此节点也被标记;如果一个节点下的子树中子树中没有被标记的节点, 则检查此节点下孩子节点的左元素;如果此节点下孩子节点的左元素不同,则标记当前节 点;用这个方法扫描所有节点直至根节点,并将所有非标记节点剔出,所剩下的树就是最大 重复序列;由此可知,在现有技术中,需要通过对整个后缀树进行遍历和标记来确定最大重 复序列,且当下一时刻有新数据加入到原来的序列数据中时,除了根据后缀树的建立规则 在原有的后缀树上增加相应的节点结构之外,之前遍历标记的结果也需要进行重新统计和 标识,即需要重新对增加节点后的后缀树进行遍历和标记,增大计算量。

【发明内容】

[0004] 本发明实施例提供一种挖掘最大重复序列的方法及装置,基于流水线和后缀树确 定最大重复序列,实现增量式挖掘,提高了计算效率。
[0005] 为达到上述目的,本发明采用的技术方案是,
[0006] 第一方面,本发明实施例提供一种挖掘最大重复序列的方法,包括:
[0007] 获取字符;
[0008] 将所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每 个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个 流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所 述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述 后缀树上的位置;
[0009] 在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上 对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列。 [0010] 在第一方面的第一种可能的实现方式中,结合第一方面,所述根据第一预设策略 以及所述第一流水线中的序列确定最大重复序列,包括:
[0011] 在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是 否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否 为同一种字符;
[0012] 若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与 所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流 水线中的序列为最大重复子序列;
[0013] 若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者, 与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一 流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序 列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重 复序列,并销毁所述第一流水线。
[0014] 在第一方面的第二种可能的实现方式中,结合第一方面的第一种可能的实现方 式,所述在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是 否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否 为同一种字符,包括:
[0015] 在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符 集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的 左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的 序列相同的序列相邻的左边字符不为同一种字符;
[0016] 在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相 同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符, 若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。
[0017] 在第一方面的第三种可能的实现方式中,结合第第一方面至第一方面的第二种可 能的实现方式中的任一种实现方式,所述分别判断追加所述字符后的每个流水线中的序列 与后缀树上对应的序列是否相同,包括:
[0018] 在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所 述流水线包含的序列的尾字符相邻的下一个字符的位置;
[0019] 判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追 加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字 符后的流水线中的序列与后缀树上对应的序列相同。
[0020] 在第一方面的第四种可能的实现方式中,结合第一方面,所述方法还包括:
[0021] 在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上 对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指 针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;
[0022] 根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
[0023] 在第一方面的第五种可能的实现方式中,结合第一方面的第四种可能的实现方 式,所述根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列,包 括:
[0024] 判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是 否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符 时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相 同的流水线;
[0025] 若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
[0026] 在第一方面的第六种可能的实现方式中,结合第一方面的第五种可能的实现方 式,所述方法还包括:
[0027] 确定所述第二流水线的参考流水线中的序列为由所述第二流水线中的序列组成 的串联序列,销毁第二流水线以及第二流水线的参考流水线。
[0028] 在第一方面的第七种可能的实现方式中,结合第一方面至第一方面的第六种可能 的实现方式中的任一种实现方式,在读取字符之前,建立空流水线;
[0029] 相应的,所述方法还包括:
[0030] 遍历所述后缀树的每个分支的首字符;
[0031] 若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所 述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所 述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不 同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始分裂成两个 分支,将所述字符插入到分裂后的所述后缀树的每一个分支上;若存在第三流水线,在追加 所述字符后的序列与后缀树上对应的序列相同,将所述字符插入到所述后缀树的每一个分 支上;
[0032] 若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点分 裂出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的 序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指 针指向的位置开始分裂成两个分支,将所述字符插入到分裂后的所述后缀树的每一个分支 上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符 插入到分裂后的所述后缀树的每一个分支上。
[0033] 在第一方面的第八种可能的实现方式中,结合第一方面至第一方面的第七种可能 的实现方式中的任一种实现方式,所述方法还包括:
[0034] 将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式 信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后 缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
[0035] 第二方面,本发明实施例提供一种挖掘最大重复序列的装置,包括:
[0036] 获取模块,用于获取字符;
[0037] 判断模块,用于将获取模块获取的字符追加到流水线集合中的每个流水线中,分 别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所 述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与 所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线 包含的序列的尾字符在所述后缀树上的位置;
[0038] 第一确定模块,用于在所述流水线集合中,若存在第一流水线,在追加所述字符后 的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确 定最大重复序列。
[0039] 在第二方面的第一种可能的实现方式中,结合第二方面,所述第一确定模块具体 用于:
[0040] 在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是 否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否 为同一种字符;
[0041] 若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与 所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流 水线中的序列为最大重复子序列;
[0042] 若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者, 与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一 流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序 列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重 复序列,并销毁所述第一流水线。
[0043] 在第二方面的第二种可能的实现方式中,结合第二方面的第一种可能的实现方 式,所述第一确定模块具体用于:
[0044] 在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符 集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的 左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的 序列相同的序列相邻的左边字符不为同一种字符;
[0045] 在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相 同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符, 若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。 [0046] 在第二方面的第三种可能的实现方式中,结合第二方面至第二方面的第二种可能 的实现方式中的任一种实现方式,所述判断模块具体用于:
[0047] 在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所 述流水线包含的序列的尾字符相邻的下一个字符的位置;
[0048] 判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追 加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字 符后的流水线中的序列与后缀树上对应的序列相同。
[0049] 在第二方面的第四种可能的实现方式中,结合第二方面,所述装置还包括:
[0050] 追加模块,用于在所述流水线集合中,若存在第二流水线,在追加所述字符后的序 列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流 水线的位置指针指向追加所述字符后的所述第二流水线中序列的尾字符在所述后缀树上 的位置;
[0051] 第二确定模块,用于根据所述第二流水线的位置指针以及第二预设策略确定最大 非串联重复序列。
[0052] 在第二方面的第五种可能的实现方式中,结合第二方面的第四种可能的实现方 式,所述第二确定模块具体用于:
[0053] 判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是 否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符 时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相 同的流水线;
[0054] 若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
[0055] 在第二方面的第六种可能的实现方式中,结合第二方面的第五种可能的实现方 式,所述装置还包括:
[0056] 销毁模块:用于确定所述第二流水线的参考流水线中的序列为由所述第二流水线 中的序列组成的串联序列,销毁第二流水线以及第二流水线的参考流水线。
[0057] 在第二方面的第七种可能的实现方式中,结合第二方面至第二方面的第六种可能 的实现方式中的任一种实现方式,所述装置还包括:
[0058] 建立模块,用于在获取模块获取字符之前,建立空流水线,
[0059] 搜索模块,用于遍历所述后缀树的每个分支的首字符;
[0060] 存储模块,用于若存在与所述字符相同的首字符,则将所述字符存储在所述空流 水线中,并将所述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位 置;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上 对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开 始分裂成两个分支,将所述字符插入到分裂后的所述后缀树的每一个分支上;若存在第三 流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符插入到所述后 缀树的每一个分支上;
[0061] 若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点分 裂出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的 序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指 针指向的位置开始分裂成两个分支,将所述字符插入到分裂后的所述后缀树的每一个分支 上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符 插入到分裂后的所述后缀树的每一个分支上。
[0062] 在第二方面的第八
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1