CN105095276B - 一种挖掘最大重复序列的方法及装置 - Google Patents
一种挖掘最大重复序列的方法及装置 Download PDFInfo
- Publication number
- CN105095276B CN105095276B CN201410200896.8A CN201410200896A CN105095276B CN 105095276 B CN105095276 B CN 105095276B CN 201410200896 A CN201410200896 A CN 201410200896A CN 105095276 B CN105095276 B CN 105095276B
- Authority
- CN
- China
- Prior art keywords
- sequence
- character
- pipeline
- same
- suffix tree
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
- G06F16/3344—Query execution using natural language analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
- G06F16/322—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明实施例提供一种挖掘最大重复序列的方法及装置,基于流水线和后缀树确定最大重复序列,实现增量式挖掘,提高了计算效率。本发明实施例提供的挖掘最大重复序列的方法包括:获取字符;将字符追加到流水线集合中的每个流水线中,分别判断追加字符后的每个流水线中的序列与后缀树上对应的序列是否相同;在流水线集合中,若存在第一流水线,在追加字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列;若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
Description
技术领域
本发明涉及数据挖掘领域,尤其涉及一种挖掘最大重复序列的方法及装置。
背景技术
模式挖掘指在一组序列数据中,寻找一些特定的便于人们理解与解释的基本序列模式,实现将所处理的长序列数据进行分解,便于后期各种建模和再分析,降低在大数据流量中人为干预的程度,提高序列处理的效率和准确度,因此,模式挖掘在以软件控制的设备中起到了非常重要的作用,例如,模式挖掘在智能手机的用户行为建模、传感器数据流分析、金融***欺诈交易识别、生物基因序列检测等多种领域中被广泛使用。在模式挖掘的实际应用中,人们通常将序列数据中包含最多信息且做成结构最小的序列模式-最大重复序列作为基本序列模式,但是,在模式挖掘中,有一类数据随着时间的变化而不断有新的数据产生,例如,手机设备所携带的传感器可以记录每时每刻用户的位置、通话、上网浏览记录等,这类数据根据时间先后顺序排列,并且以序列化的方式呈现,尤其是,随着大数据与移动互联网的蓬勃发展,这些序列数据产生的数量和速度都成倍增长,如何从这些序列数据中实时动态地挖掘出基本序列模式(即最大重复序列)成为亟待解决的问题。
目前,挖掘序列数据中最大重复序列的方法为:根据一段时间内的序列数据建立相应的后缀树,再在后缀上查找最大重复序列;其中,后缀树是一种数据结构,能快速解决很多关于字符串的问题,用来支持有效的字符匹配和查询;例如,将序列数据“abcabxa$”用图1所示的后缀树来表示,即后缀树的根节点到每一个叶子节点的路径表示序列“abcabxa$”中的每一个后缀子序列;然后,寻找存在不同左边元素的两个叶子节点,并标记出来;从叶子节点开始自下而上遍历后缀树上的每一个节点,如果一个节点下的子树中存在已标记的节点,则此节点也被标记;如果一个节点下的子树中没有被标记的节点,则检查此节点下孩子节点的左元素;如果此节点下孩子节点的左元素不同,则标记当前节点;用这个方法扫描所有节点直至根节点,并将所有非标记节点剔出,所剩下的树就是最大重复序列;由此可知,在现有技术中,需要通过对整个后缀树进行遍历和标记来确定最大重复序列,且当下一时刻有新数据加入到原来的序列数据中时,除了根据后缀树的建立规则在原有的后缀树上增加相应的节点结构之外,之前遍历标记的结果也需要进行重新统计和标识,即需要重新对增加节点后的后缀树进行遍历和标记,增大计算量。
发明内容
本发明实施例提供一种挖掘最大重复序列的方法及装置,基于流水线和后缀树确定最大重复序列,实现增量式挖掘,提高了计算效率。
为达到上述目的,本发明采用的技术方案是,
第一方面,本发明实施例提供一种挖掘最大重复序列的方法,包括:
获取字符;
将所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;
在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列。
在第一方面的第一种可能的实现方式中,结合第一方面,所述根据第一预设策略以及所述第一流水线中的序列确定最大重复序列,包括:
在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符;
若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流水线中的序列为最大重复子序列;
若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重复序列,并销毁所述第一流水线。
在第一方面的第二种可能的实现方式中,结合第一方面的第一种可能的实现方式,所述在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符,包括:
在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;
在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。
在第一方面的第三种可能的实现方式中,结合第第一方面至第一方面的第二种可能的实现方式中的任一种实现方式,所述分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,包括:
在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所述流水线包含的序列的尾字符相邻的下一个字符的位置;
判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列相同。
在第一方面的第四种可能的实现方式中,结合第一方面,所述方法还包括:
在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;
根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
在第一方面的第五种可能的实现方式中,结合第一方面的第四种可能的实现方式,所述根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列,包括:
判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相同的流水线;
若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
在第一方面的第六种可能的实现方式中,结合第一方面的第五种可能的实现方式,所述方法还包括:
确定所述第二流水线的参考流水线中的序列为由所述第二流水线中的序列组成的串联序列,销毁第二流水线以及第二流水线的参考流水线。
在第一方面的第七种可能的实现方式中,结合第一方面至第一方面的第六种可能的实现方式中的任一种实现方式,在读取字符之前,建立空流水线;
相应的,所述方法还包括:
遍历所述后缀树的每个分支的首字符;
若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到所述后缀树的每一个分支上;
若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点***出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到***后的所述后缀树的每一个分支上。
在第一方面的第八种可能的实现方式中,结合第一方面至第一方面的第七种可能的实现方式中的任一种实现方式,所述方法还包括:
将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
第二方面,本发明实施例提供一种挖掘最大重复序列的装置,包括:
获取模块,用于获取字符;
判断模块,用于将获取模块获取的字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;
第一确定模块,用于在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列。
在第二方面的第一种可能的实现方式中,结合第二方面,所述第一确定模块具体用于:
在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符;
若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流水线中的序列为最大重复子序列;
若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重复序列,并销毁所述第一流水线。
在第二方面的第二种可能的实现方式中,结合第二方面的第一种可能的实现方式,所述第一确定模块具体用于:
在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;
在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。
在第二方面的第三种可能的实现方式中,结合第二方面至第二方面的第二种可能的实现方式中的任一种实现方式,所述判断模块具体用于:
在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所述流水线包含的序列的尾字符相邻的下一个字符的位置;
判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列相同。
在第二方面的第四种可能的实现方式中,结合第二方面,所述装置还包括:
追加模块,用于在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线中序列的尾字符在所述后缀树上的位置;
第二确定模块,用于根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
在第二方面的第五种可能的实现方式中,结合第二方面的第四种可能的实现方式,所述第二确定模块具体用于:
判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相同的流水线;
若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
在第二方面的第六种可能的实现方式中,结合第二方面的第五种可能的实现方式,所述装置还包括:
销毁模块:用于确定所述第二流水线的参考流水线中的序列为由所述第二流水线中的序列组成的串联序列,销毁第二流水线以及第二流水线的参考流水线。
在第二方面的第七种可能的实现方式中,结合第二方面至第二方面的第六种可能的实现方式中的任一种实现方式,所述装置还包括:
建立模块,用于在获取模块获取字符之前,建立空流水线,
搜索模块,用于遍历所述后缀树的每个分支的首字符;
存储模块,用于若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到所述后缀树的每一个分支上;
若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点***出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到***后的所述后缀树的每一个分支上。
在第二方面的第八种可能的实现方式中,结合第二方面至第二方面的第七种可能的实现方式中的任一种实现方式,所述装置还包括:
模式信息存储模块,用于将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
第三方面,本发明实施例提供一种挖掘最大重复序列的装置,包括:
通信单元,用于获取字符;
处理器,用于将通信单元获取的字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;
在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列。
在第三方面的第一种可能的实现方式中,结合第三方面,所述处理器具体用于:
在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符;
若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流水线中的序列为最大重复子序列;
若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重复序列,并销毁所述第一流水线。
在第三方面的第二种可能的实现方式中,结合第三方面的第一种可能的实现方式,所述处理器还用于:
在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;
在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。
在第三方面的第三种可能的实现方式中,结合第三方面至第三方面的第二种可能的实现方式中的任一种实现方式,所述处理器还用于:
在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所述流水线包含的序列的尾字符相邻的下一个字符的位置;
判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列相同。
在第三方面的第四种可能的实现方式中,结合第三方面,所述处理器还用于:
在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线中序列的尾字符在所述后缀树上的位置;
根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
在第三方面的第五种可能的实现方式中,结合第三方面的第四种可能的实现方式,所述处理器还用于:
判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相同的流水线;
若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
在第三方面的第六种可能的实现方式中,结合第三方面的第五种可能的实现方式,所述处理器还用于:
确定所述第二流水线的参考流水线中的序列为由所述第二流水线中的序列组成的串联序列,销毁第二流水线以及第二流水线的参考流水线。
在第三方面的第七种可能的实现方式中,结合第三方面至第三方面的第六种可能的实现方式中的任一种实现方式,所述处理器还用于:
在通信单元获取字符之前,建立空流水线;
遍历所述后缀树的每个分支的首字符;
若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到所述后缀树的每一个分支上;
若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点***出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到***后的所述后缀树的每一个分支上。
在第三方面的第八种可能的实现方式中,结合第三方面至第三方面的第七种可能的实现方式中的任一种实现方式,所述处理器还用于:
将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
由上可知,本发明实施例提供一种挖掘最大重复序列的方法及装置,获取字符;将所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列;如此,通过流水线结构和后缀树结构的相互结合,挖掘最大重复序列,提高了计算速率;同时,在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列;以使得所挖掘的最大重复序列为非串联重复序列;如此,避免了现有技术不能实现增量式挖掘,计算量大,以及挖掘的最大重复序列包含冗余的串联结构,不能有效地表达序列模式的最小单元的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中挖掘最大重复序列的流程示意图;
图2为本发明实施例提供的一种挖掘最大重复序列的方法的流程图;
图3为本发明实施例提供的挖掘字符串“abcabx”中的最大重复序列的流程示意图;
图4为本发明实施例提供的挖掘字符串“abcababab”中的最大非串联重复序列的流程示意图;
图5为本发明实施例提供的将序列模式信息在后缀树上表示的示意图;
图6为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
图7为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
图8为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
图9为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
图10为本发明实施例提供的一种挖掘最大重复序列的装置60的结构图;
图11为本发明实施例提供的一种挖掘最大重复序列的装置110的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
图2为本发明实施例提供一种挖掘最大重复序列的方法的流程图,如图2所示,可以包括以下步骤:
201:获取字符。
其中,所述字符属于一个字符串,所述字符串为包含多个字符的长序列,字符为所述字符串中的任一字符;优选的,可以从存储有所述字符串的数据库中,按照所述字符串中的字符顺序逐一读取字符;例如,假设字符串为“abcabxa”,则按照字符串中的字符顺序分别读取的字符为“a”、“b”、“c”、“a”、“b”、“x”、“a”。
进一步,还可以在一段时间内,按照时间先后接收其他***发送的字符,形成字符串;例如,在一段时间的每一时刻分别接收到的字符为“a”、“b”、“c”、“a”、“b”、“x”、“a”,则在这段时间内接收到的字符串为“abcabxa”。
202:将所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同。
其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;例如,如图4所示,字符串为“abcababab”,在步骤6读取的字符为“a”,此时,流水线集合包含#4、#5流水线,后缀树为第五后缀树,#4流水线包含与字符“a”之前的序列重复的序列“ab”以及序列“ab”中尾字符“b”在第五后缀树上的位置指针〈r→1,2〉,#5流水线包含与字符“a”之前的序列重复的序列“b”以及序列“b”在第五后缀上的位置指针〈r→2,1〉。
所述将字符追加到流水线中指的是将所述字符存储在流水线包含的序列的后面;例如,流水线1包含的序列为“ab”,获取的字符为“x”,则将获取的字符追加到流水线1中为将字符“x”添加到序列“ab”中,以“abx”的形式存储在流水线1中。
优选的,所述分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,可以包括:
在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所述流水线包含的序列的尾字符相邻的下一个字符的位置;
判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列相同。
例如,如图4所示,在步骤6,依次移动#4、#5流水线的位置指针,使其指向位置〈r→1,3〉以及〈r→2,2〉,发现〈r→1,3〉以及〈r→2,2〉位置上的字符均为“c”,与字符a不相同,则确定追加字符后的#4流水线中的序列“aba”与第五后缀树上对应的序列不同,追加字符后的#5流水线中的序列“ba”与第五后缀上对应的序列不同。
203:在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列。
例如,如图4所示,在步骤6,追加字符“a”后的#4流水线中的序列“aba”与第五后缀树上对应的序列不同,则不将字符“a”追加到#4流水线中,同时,根据第一预设策略以及#4流水线中的序列“ab”确定#4流水线中的序列“ab”是否是最大重复序列。
优选的,所述根据第一预设策略以及所述第一流水线中的序列确定最大重复序列,可以包括:
在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符;
若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流水线中的序列为最大重复子序列;
若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重复序列,并销毁所述第一流水线。
其中,所述在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符,可以包括:
在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;
在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。
例如:读取的字符为“x”,第一流水线中包含的序列为“ab”,且追加“x”后的第一流水线与后缀树上对应的序列不同,且所述序列“ab”在字符串“#abcabxa”中,首先获取所述字符串“#abcabxa”中与序列“ab”相同的序列相邻的左边字符集为(“#”,“c”),确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;其次,若所述第一流水线的位置指针〈r→4,1〉在后缀树上所指的字符为“a”,与读取的字符“x”,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,由此可知,第一流水线中包含的序列“ab”为最大重复序列。
进一步的,所述方法还包括:
在读取下一个字符时,销毁所述第一流水线。
通常情况下,采用上述方法获取最大重复序列,虽然能够实现增量式挖掘,提高计算速率,但是获取的最大重复序列可能包含较多冗余子序列,不能有效地表达序列模式的最小单位,不便于理解与分析;例如,对序列“#xyababpqababmn$”进行最大重复序列挖掘时,会将“abab”作为其中的最大重复序列,而子序列“abab”是由更小的两个相同子序列“ab”串联组成的。因此,为了使得所挖掘出来的序列为最大非串联重复序列,在进行上述方法的同时,进一步的,所述方法还包括:
在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;
根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
优选的,所述根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列,可以包括:
判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相同的流水线;
若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
例如,第二流水线包含的序列的首字符为“a”,当读取“a”时(即第二流水线还为空流水线时),遍历流水线集合中的每一个流水线,发现#4流水线中包含的首字符也为“a”,且此时#4流水线的位置指针为〈r→4→2,1〉,则将#4流水线确定为第二流水线的参考流水线,位置指针〈r→4→2,1〉确定为第二流水线的参考指针,若第二流水线在不断追加新字符的过程中,其位置指针到达〈r→4→2,1〉,则将第二流水线的位置指针为〈r→4→2,1〉时包含的序列确定为最大非串联重复序列。
进一步的,在读取字符之前,建立空流水线;
相应的,所述方法还包括:
遍历所述后缀树的每个分支的首字符;
若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到所述后缀树的每一个分支上;
若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点***出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到***后的所述后缀树的每一个分支上。
进一步的,为了在后续工作中,方便快速地利用获取的模式信息进行分析,所述方法还包括:
将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
例如,假如已经找出1000个模式信息,并且现在要比较正在识别的序列“ab”,此时如果要完全查找信息表的话,需要从表开始到结束比较1000次;而如果将模式信息根据后缀树的存储规则储存在后缀树上的话,只需要比较在“ab”分支上的模式就可以了,若在“ab”分支上有10个模式信息,则需要比较这10个就可以了,加快了比较的速度,方便检索。
其中,所述将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示为:
分别将序列模式的模式编号,以及,所述模式编号对应的序列模式的剩余长度在所述后缀树对应的分支上进行表示。
例如,将确定的最大非串联重复序列“ab”以及“b”的相关信息存储在预设的模式信息表1中,并如图5所示,对应表1将挖掘出的序列模式的相关信息在后缀上表示,其中,后缀树的分支r→8上存储的字符为“a”,为模式信息表中模式编号1、模式编号2对应的序列的首字符,则在分支r→8上存储模式编号1和模式编号1对应的序列的长度,以及,模式编号2和模式编号2对应的序列的长度的相关信息,分别为[1,2]、[2,1],沿着分支r→8向下搜索,在模式编号1对应的序列的剩余字符对应的分支8→4上,存储模式编号1和模式编号1对应的序列的剩余长度1的相关信息[1,1]。
表1
模式编号 | 内容 | 总长度 |
1 | “ab” | 2 |
2 | “a” | 1 |
下面分别以挖掘字符串中“abcabx”中的最大重复序列,以及,挖掘字符串“abcababab”中的最大非串联重复序列为例对上述方法进行具体说明。
图3为挖掘序列“abcabx”中的最大重复序列的流程示意图,如图3所示,可以包括以下步骤:
步骤1:创建空流水线#1;读取字符“a”,在初始化后缀上没有与“a”相同的首字符,不将字符“a”存储在#1流水线,销毁#1流水线;同时,从初始化后缀树的根节点开辟一个新的分支r→1,将字符“a”***分支r→1,形成第一后缀树;其中,初始化后缀树为
步骤2:创建空流水线#2;读取下一个字符“b”,从第一后缀树的根节点遍历第一后缀树每个分支上的首字符,发现没有与字符“b”相同的字符,则不将字符“b”存储在#2流水线,销毁#2流水线;同时,从第一后缀树的根节点开辟一个新的分支r→2,将字符“b”分别***分支r→1和r→2,形成第二后缀树。
步骤3:创建空流水线#3;读取下一个字符“c”,从第二后缀树的根节点遍历第二后缀树每个分支上的首字符,发现没有与字符“c”相同的字符,则不将字符“c”存储在#3流水线,销毁#3流水线;同时,从第二后缀树的根节点开辟一个新的分支r→3,将字符“c”分别***分支r→1、r→2、r→3,形成第三后缀树。
步骤4:创建空流水线#4;读取下一个字符“a”,从第三后缀树的根节点遍历第三后缀树每个分支上的首字符,发现分支r→1上的首字符与读取的字符“a”相同,则将字符“a”存储在#4流水线,将#4流水线的位置指针设置为〈r→1,1〉;同时,将字符“a”分别***分支r→1、r→2、r→3,形成第四后缀树。
步骤5:创建空流水线#5;读取下一个字符“b”,将#4流水线中的位置指针〈r→1,1〉向下移动一个位置〈r→1,2〉,在第四后缀树〈r→1,2〉的位置上的字符与追加的字符“b”相同,则将字符“b”追加#4流水线中,同时,#4流水线的位置指针设置为〈r→1,2〉;从第四后缀树的根节点遍历第四后缀树每个分支的首字符,发现分支r→2上的首字符与读取的字符“b”相同,则将字符“b”存储在#5流水线,同时,将#5流水线的位置指针设置为〈r→2,1〉;将字符“b”分别***分支r→1、r→2、r→3,形成第五后缀树。
步骤6:创建空流水线#6;读取下一个字符“x”,将#4流水线中的位置指针〈r→1,2〉向下移动一个位置〈r→1,3〉,将#5流水线中的位置指针〈r→2,1〉向下移动一个位置〈r→2,2〉,发现在第五后缀树上〈r→1,3〉以及〈r→2,2〉的位置的字符均为“c”,与读取的字符“x”不同,则不将字符“x”追加在#4和#5流水线,确定#4和#5流水线包含的序列是否是最大重复序列,并销毁所述#4和#5流水线。
在已经读取的字符串“abcabx”中,获取与#4流水线中包含的序列相同的序列“ab”相邻的左边字符:空字符和“c”,则确定与#4流水线中包含的序列相同的序列“ab”相邻的左边字符不是同一种字符;同时,#4流水线的位置指针在第五后缀上所指的字符为“b”与读取的字符“x”不同,则确定与#4流水线中包含的序列相同的序列“ab”相邻的右边字符不是同一种字符,如此,与#4流水线中包含的序列相同的序列“ab”相邻的左边字符以及与#4流水线中包含的序列相同的序列“ab”相邻的右边字符均不是同一种字符,则确定#4流水线包含的序列“ab”为字符串“abcabx”的最大重复序列。
在已经读取的字符串“abcabx”中,获取与#5流水线中包含的序列相同的序列“b”相邻的左边字符:“a”和“a”,则确定与#5流水线中包含的序列相同的序列“ab”相邻的左边字符为同一种字符;同时,#5流水线的位置指针在第五后缀上所指的字符为“b”与读取的字符“x”不同,则确定与#5流水线中包含的序列相同的序列“b”相邻的右边字符不是同一种字符,如此,与#5流水线中包含的序列相同的序列“b”相邻的左边字符是同一种字符,则确定#5流水线包含的序列“b”不是字符串“abcabx”的最大重复序列。
同时,从第五后缀树的根节点遍历第五后缀树每个分支的首字符,发现没有与读取的字符“x”相同的首字符,则不将字符“x”存储在#6空流水线,销毁#6空流水线;并且,在第五后缀树的根节点开辟一个新的分支r→8,以及,从第五后缀树上〈r→1,2〉的位置开始将分支r→1***成两支r→4→1和r→4→5,从第五后缀树上〈r→2,1〉的位置开始将分支r→2***成两支r→6→2和r→6→7,将字符“x”分别***分支r→3,r→8,r→4→1、r→4→5、r→6→2、r→6→7形成第六后缀树。
图4为挖掘序列“abcababab”中的最大非串联重复序列的流程示意图,如图4所示,可以包括以下步骤:
步骤1:创建空流水线#1;读取字符“a”,在初始化后缀上没有与“a”相同的首字符,不将字符“a”存储在#1流水线,销毁#1流水线;同时,从初始化后缀树的根节点开辟一个新的分支r→1,将字符“a”***分支r→1,形成第一后缀树;其中,初始化后缀树为
步骤2:创建空流水线#2;读取下一个字符“b”,从第一后缀树的根节点遍历第一后缀树每个分支上的首字符,发现没有与字符“b”相同的字符,则不将字符“b”存储在#2流水线,销毁#2流水线;同时,从第一后缀树的根节点开辟一个新的分支r→2,将字符“b”分别***分支r→1和r→2,形成第二后缀树。
步骤3:创建空流水线#3;读取下一个字符“c”,从第二后缀树的根节点遍历第二后缀树每个分支上的首字符,发现没有与字符“c”相同的字符,则不将字符“c”存储在#3流水线,销毁#3流水线;同时,从第二后缀树的根节点开辟一个新的分支r→3,将字符“c”分别***分支r→1、r→2、r→3,形成第三后缀树。
步骤4:创建空流水线#4;读取下一个字符“a”,从第三后缀树的根节点遍历第三后缀树每个分支上的首字符,发现分支r→1上的首字符与读取的字符“a”相同,则将字符“a”存储在#4流水线,将#4流水线的位置指针设置为〈r→1,1〉;同时,将字符“a”分别***分支r→1、r→2、r→3,形成第四后缀树。
步骤5:创建空流水线#5;读取下一个字符“b”,将#4流水线中的位置指针〈r→1,1〉向下移动一个位置〈r→1,2〉,在第四后缀树〈r→1,2〉的位置上的字符与追加的字符“b”相同,则将字符“b”追加#4流水线中,同时,#4流水线的位置指针设置为〈r→1,2〉;从第四后缀树的根节点遍历第四后缀树每个分支的首字符,发现分支r→2上的首字符与读取的字符“b”相同,则将字符“b”存储在#5流水线,同时,将#5流水线的位置指针设置为〈r→2,1〉;将字符“b”分别***分支r→1、r→2、r→3,形成第五后缀树。
步骤6:创建空流水线#6;读取下一个字符“a”,将#4流水线中的位置指针〈r→1,2〉向下移动一个位置〈r→1,3〉,将#5流水线中的位置指针〈r→2,1〉向下移动一个位置〈r→2,2〉,发现在第五后缀树上〈r→1,3〉以及〈r→2,2〉的位置的字符均为“c”,与读取的字符“a”不同,则不将字符“a”追加在#4和#5流水线,确定#4和#5流水线包含的序列是否是最大重复序列,并销毁所述#4和#5流水线;
在已经读取的字符串“abcaba”中,获取与#4流水线中包含的序列相同的序列“ab”相邻的左边字符:空字符和“c”,则确定与#4流水线中包含的序列相同的序列“ab”相邻的左边字符不是同一种字符;同时,#4流水线的位置指针在第五后缀上所指的字符为“b”与读取的字符“a”不同,则确定与#4流水线中包含的序列相同的序列“ab”相邻的右边字符不是同一种字符,如此,与#4流水线中包含的序列相同的序列“ab”相邻的左边字符以及与#4流水线中包含的序列相同的序列“ab”相邻的右边字符均不是同一种字符,则确定#4流水线包含的序列“ab”为字符串“abcaba”的最大重复序列。
在已经读取的字符串“abcaba”中,获取与#5流水线中包含的序列相同的序列“b”相邻的左边字符:“a”和“a”,则确定与#5流水线中包含的序列相同的序列“ab”相邻的左边字符为同一种字符;同时,#5流水线的位置指针在第五后缀上所指的字符为“b”与读取的字符“a”不同,则确定与#5流水线中包含的序列相同的序列“b”相邻的右边字符不是同一种字符,如此,与#5流水线中包含的序列相同的序列“b”相邻的左边字符是同一种字符,则确定#5流水线包含的序列“b”不是字符串“abcaba”的最大重复序列。
同时,从第五后缀树的根节点遍历第五后缀树每个分支的首字符,发现分支r→1上的首字符与读取的字符“a”相同,则将字符“a”存储在#6流水线;同时,从第五后缀树上〈r→1,2〉的位置开始将分支r→1***成两支r→4→1和r→4→5,从第五后缀树上〈r→2,1〉的位置开始将分支r→2***成两支r→6→2和r→6→7,将字符“a”分别***分支r→3,r→4→1、r→4→5、r→6→2、r→6→7形成第六后缀树,并对应第六后缀树将#6流水线的位置指针设置为〈r→4,1〉。
步骤7:创建空流水线#7;读取下一个字符“b”,将#6流水线中的位置指针〈r→4,1〉向下移动一个位置〈r→4,2〉,发现在第六后缀树上〈r→4,2〉位置的字符均与读取的字符“b”相同,则将字符“b”追加在#6;同时,从第六后缀树的根节点遍历第六后缀树每个分支的首字符,发现分支r→6上的首字符与读取的字符“b”相同,则将字符“b”存储在#7流水线,同时,将#7流水线的位置指针设置为〈r→6,1〉;将字符“b”分别***分支r→3,r→4→1、r→4→5、r→6→2、r→6→7形成第七后缀树。
步骤8:创建空流水线#8;读取下一个字符“a”,将#6流水线中的位置指针〈r→4,2〉向下移动至〈r→4→1,1〉以及〈r→4→5,1〉的位置,将#7流水线中的位置指针〈r→6,1〉向下移动至〈r→6→2,1〉以及〈r→6→7,1〉的位置,发现〈r→4→5,1〉以及〈r→6→7,1〉的位置上的字符与读取的字符“a”相同,则将字符“a”追加在#6、#7流水线,将#6流水线以及#7流水线的位置指针设置为〈r→4→5,1〉、〈r→6→7,1〉;同时,将#6流水线作为#8流水线的参考流水线,并记录读取字符“a”时,#6流水线的位置指针〈r→4,2〉;
从第七后缀树的根节点遍历第七后缀树每个分支的首字符,发现分支r→4上的首字符与读取的字符“a”相同,则将字符“a”存储在#8流水线,同时,将#8流水线的位置指针设置为〈r→4,1〉;将字符“a”分别***分支r→3,r→4→1、r→4→5、r→6→2、r→6→7形成第八后缀树。
步骤9:创建空流水线#9;读取下一个字符“b”,将#6流水线中的位置指针〈r→4→5,1〉以及#7流水线中的位置指针〈r→6→7,1〉以及#8流水线中的位置指针〈r→4,1〉向下移动至〈r→4→5,2〉、〈r→6→7,2〉、〈r→4,2〉,发现在第八后缀树〈r→4→5,2〉、〈r→6→7,2〉、〈r→4,2〉位置上的字符与读取的字符“b”相同,则将字符“b”追加在#6流水线、#7流水线、#8流水线;同时,将#6流水线的位置指针设置为〈r→4→5,2〉,将#7流水线的位置指针设置为〈r→6→7,2〉,将#8流水线的位置指针设置为〈r→4,2〉,此时,#8流水线的位置指针与记录的#8流水线的参考流水线#6的位置指针相同,则确定#6流水线中的序列包含串联结构的重复序列,#8流水线中的序列为最大非串联重复序列,输出最大非串联重复序列,并销毁#6流水线和#8流水线;
从第七后缀树的根节点遍历第八后缀树每个分支的首字符,发现分支r→6上的首字符与读取的字符“b”相同,则将字符“b”存储在#9流水线,同时,将#9流水线的位置指针设置为〈r→6,1〉;将字符“a”分别***分支r→3,r→4→1、r→4→5、r→6→2、r→6→7形成第九后缀树。
由上可知,本发明实施例提供一种挖掘最大重复序列的方法,获取字符;将所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列;如此,通过流水线结构和后缀树结构的相互结合,挖掘最大重复序列,提高了计算速率;同时,在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列;以使得所挖掘的最大重复序列为非串联重复序列;如此,避免了现有技术不能实现增量式挖掘,计算量大,以及挖掘的最大重复序列包含冗余的串联结构,不能有效地表达序列模式的最小单元的问题。
实施例二
图6为本发明实施例提供的一种挖掘最大重复序列的装置60,如图6所示,包括:
获取模块601,用于获取字符。
其中,所述字符属于字符串,所述字符串为包含多个字符的长序列,字符为所述字符串中的任一字符;优选的,可以从存储有所述字符串的数据库中,按照所述字符串中的字符顺序逐一读取字符;例如,假设字符串为“abcabxa”,则按照字符串中的字符顺序分别读取的字符为“a”、“b”、“c”、“a”、“b”、“x”、“a”。
进一步,还可以在一段时间内,按照时间先后接收其他***发送的字符,形成字符串;例如,在一段时间的每一时刻分别接收到的字符为“a”、“b”、“c”、“a”、“b”、“x”、“a”,则在这段时间内接收到的字符串为“abcabxa”。
判断模块602,用于将获取模块601获取到的字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同。
其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;例如,如图4所示,字符串为“abcababab”,在步骤6读取的字符为“a”,此时,流水线集合包含#4、#5流水线,后缀树为第五后缀树,#4流水线包含与字符“a”之前的序列重复的序列“ab”以及序列“ab”中尾字符“b”在第五后缀树上的位置指针〈r→1,2〉,#5流水线包含与字符“a”之前的序列重复的序列“b”以及序列“b”在第五后缀上的位置指针〈r→2,1〉。
所述将字符追加到流水线中指的是将所述字符存储在流水线包含的序列的后面;例如,流水线1包含的序列为“ab”,获取的字符为“x”,则将获取的字符追加到流水线1中为将字符“x”添加到序列“ab”中,以“abx”的形式存储在流水线1中。
第一确定模块603,用于在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列。
例如,如图4所示,在步骤6中,追加字符“a”后的#4流水线中的序列“aba”与第五后缀树上对应的序列不同,则不将字符“a”追加到#4流水线中,同时,根据第一预设策略以及#4流水线中的序列“ab”确定#4流水线中的序列“ab”是否是最大重复序列。
进一步的,所述判断模块602具体用于:
在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所述流水线包含的序列的尾字符相邻的下一个字符的位置;
判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列相同。
例如,如图4所示,在步骤6,依次移动#4、#5流水线的位置指针,使其指向位置〈r→1,3〉以及〈r→2,2〉,发现〈r→1,3〉以及〈r→2,2〉位置上的字符均为“c”,与字符不相同,则确定追加字符后的#4流水线中的序列“aba”与第五后缀树上对应的序列不同,追加字符后的#5流水线中的序列“ba”与第五后缀上对应的序列不同。
进一步的,所述第一确定模块603具体用于:
在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符;
若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流水线中的序列为最大重复子序列;
若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重复序列,并销毁所述第一流水线。
其中,所述在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符,可以包括:
在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;
在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。例如:读取的字符为“x”,第一流水线中包含的序列为“ab”,且追加“x”后的第一流水线与后缀树上对应的序列不同,且所述序列“ab”在字符串“#abcabxa”中,首先获取所述字符串“#abcabxa”中与序列“ab”相同的序列相邻的左边字符集为(“#”,“c”),确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;其次,若所述第一流水线的位置指针〈r→4,1〉在后缀树上所指的字符为“a”,与读取的字符“x”,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,由此可知,第一流水线中包含的序列“ab”为最大重复序列。
进一步的,如图7所示,所述挖掘最大重复序列的装置60还包括:
销毁模块604,用于销毁所述第一流水线。
通常情况下,采用上述装置获取最大重复序列,虽然能够实现增量式挖掘,提高计算速率,但是获取的最大重复序列可能包含较多冗余子序列,不能有效地表达序列模式的最小单位,不便于理解与分析;例如,对序列“#xyababpqababmn$”进行最大重复序列挖掘时,会将“abab”作为其中的最大重复序列,而子序列“abab”是由更小的两个相同子序列“ab”串联组成的。因此,为了使得所挖掘出来的序列为最大非串联重复序列,进一步的,如图8所示,所述挖掘最大重复序列的装置60还包括:
追加模块605,用于在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置。
第二确定模块606,用于根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
相应的,所述销毁模块604,还用于销毁所述第二流水线以及所述第二流水线的参考流水线。
进一步的,所述第二确定模块606具体用于:
判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相同的流水线;
若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
例如,第二流水线包含的序列的首字符为“a”,当读取“a”时(即第二流水线还为空流水线时),遍历流水线集合中的每一个流水线,发现#4流水线中包含的首字符也为“a”,且此时#4流水线的位置指针为〈r→4→2,1〉,则将#4流水线确定为第二流水线的参考流水线,位置指针〈r→4→2,1〉确定为第二流水线的参考指针,若第二流水线在不断追加新字符的过程中,其位置指针到达〈r→4→2,1〉,则将第二流水线的位置指针为〈r→4→2,1〉时包含的序列确定为最大非串联重复序列。
进一步的,如图9所示,所述挖掘最大重复序列的装置60还包括:
建立模块607,用于在读取字符之前,建立空流水线;
搜索模块608,用于遍历所述后缀树的每个分支的首字符;
存储模块609,用于若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到所述后缀树的每一个分支上;
若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点***出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到***后的所述后缀树的每一个分支上。
进一步的,为了在后续工作中,方便快速地利用获取的模式信息进行分析,如图10所示,所述挖掘最大重复序列的装置60还包括:
模式信息存储模块610,将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
所述将所述最大非串联重复序列的相关信息在所述后缀树上进行表示为:分别将模式编号以及所述模式编号对应的序列模式的在当前分支的剩余长度在所述后缀树对应的分支上进行表示。
例如,假如已经找出1000个模式信息,并且现在要比较正在识别的序列“ab”,此时如果要完全查找信息表的话,需要从表开始到结束比较1000次;而如果将模式信息根据后缀树的存储规则储存在后缀树上的话,只需要比较在“ab”分支上的模式就可以了,若在“ab”分支上有10个模式信息,则需要比较这10个就可以了,加快了比较的速度,方便检索。
其中,所述将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示为:
分别将序列模式的模式编号,以及,所述模式编号对应的序列模式的剩余长度在所述后缀树对应的分支上进行表示。
例如,将确定的最大非串联重复序列“ab”以及“b”的相关信息存储在预设的模式信息表1中,并如图5所示,对应表1将挖掘出的序列模式的相关信息在后缀上表示,其中,后缀树的分支r→8上存储的字符为“a”,为模式信息表中模式编号1、模式编号2对应的序列的首字符,则在分支r→8上存储模式编号1和模式编号1对应的序列的长度,以及,模式编号2和模式编号2对应的序列的长度的相关信息,分别为[1,2]、[2,1],沿着分支r→8向下搜索,在模式编号1对应的序列的剩余字符对应的分支8→4上,存储模式编号1和模式编号1对应的序列的剩余长度1的相关信息[1,1]。
由上可知,本发明实施例提供一种挖掘最大重复序列的装置,获取字符;将所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列;如此,通过流水线结构和后缀树结构的相互结合,挖掘最大重复序列,提高了计算速率;同时,在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列;以使得所挖掘的最大重复序列为非串联重复序列;如此,避免了现有技术不能实现增量式挖掘,计算量大,以及挖掘的最大重复序列包含冗余的串联结构,不能有效地表达序列模式的最小单元的问题。
实施例三
参见图11,为本发明实施例提供的一种挖掘最大重复序列的装置110,如图11所示,该装置可以包括:处理器1101、存储器1102、通信单元1103,至少一个通信总线1104,用于实现这些装置之间的连接和相互通信;
处理器1101可能是一个中央处理器(英文:central processing unit,简称为CPU);
存储器1102,可以是易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM);或者非易失性存储器(英文:non-volatilememory),例如只读存储器(英文:read-only memory,缩写:ROM),快闪存储器(英文:flashmemory),硬盘(英文:hard disk drive,缩写:HDD)或固态硬盘(英文:solid-state drive,缩写:SSD);或者上述种类的存储器的组合,并向处理器1101提供指令和数据;
通信单元1103,用于与外部网元之间进行数据传输。
所述通信单元1103:用于获取字符。
其中,所述字符属于字符串,所述字符串为包含多个字符的长序列,字符为所述字符串中的任一字符;优选的,可以从存储有所述字符串的数据库中,按照所述字符串中的字符顺序逐一读取字符;例如,假设字符串为“abcabxa”,则按照字符串中的字符顺序分别读取的字符为“a”、“b”、“c”、“a”、“b”、“x”、“a”。
进一步,还可以在一段时间内,按照时间先后接收其他***发送的字符,形成字符串;例如,在一段时间的每一时刻分别接收到的字符为“a”、“b”、“c”、“a”、“b”、“x”、“a”,则在这段时间内接收到的字符串为“abcabxa”。
处理器1101,用于将通信单元1103获取到的字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同。
其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;例如,如图4所示,字符串为“abcababab”,在步骤6读取的字符为“a”,此时,流水线集合包含#4、#5流水线,后缀树为第五后缀树,#4流水线包含与字符“a”之前的序列重复的序列“ab”以及序列“ab”中尾字符“b”在第五后缀树上的位置指针〈r→1,2〉,#5流水线包含与字符“a”之前的序列重复的序列“b”以及序列“b”在第五后缀上的位置指针〈r→2,1〉。
所述将字符追加到流水线中指的是将所述字符存储在流水线包含的序列的后面;例如,流水线1包含的序列为“ab”,获取的字符为“x”,则将获取的字符追加到流水线1中为将字符“x”添加到序列“ab”中,以“abx”的形式存储在流水线1中。
所述处理器1101,还用于在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列。例如,如图4所示,在步骤6中,追加字符“a”后的#4流水线中的序列“aba”与第五后缀树上对应的序列不同,则不将字符“a”追加到#4流水线中,同时,根据第一预设策略以及#4流水线中的序列“ab”确定#4流水线中的序列“ab”是否是最大重复序列。
进一步的,所述处理器1101具体用于:
在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所述流水线包含的序列的尾字符相邻的下一个字符的位置;
判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列相同。例如,如图4所示,在步骤6,依次移动#4、#5流水线的位置指针,使其指向位置〈r→1,3〉以及〈r→2,2〉,发现〈r→1,3〉以及〈r→2,2〉位置上的字符均为“c”,与字符不相同,则确定追加字符后的#4流水线中的序列“aba”与第五后缀树上对应的序列不同,追加字符后的#5流水线中的序列“ba”与第五后缀上对应的序列不同。
进一步的,所述处理器1101具体用于:
在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符;
若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流水线中的序列为最大重复子序列;
若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重复序列,并销毁所述第一流水线。
其中,所述在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符,可以包括:
在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;
在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。例如:读取的字符为“x”,第一流水线中包含的序列为“ab”,且追加“x”后的第一流水线与后缀树上对应的序列不同,且所述序列“ab”在字符串“#abcabxa”中,首先获取所述字符串“#abcabxa”中与序列“ab”相同的序列相邻的左边字符集为(“#”,“c”),确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;其次,若所述第一流水线的位置指针〈r→4,1〉在后缀树上所指的字符为“a”,与读取的字符“x”,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,由此可知,第一流水线中包含的序列“ab”为最大重复序列。
进一步的,所述处理器1101还用于:
销毁所述第一流水线。
通常情况下,采用上述装置获取最大重复序列,虽然能够实现增量式挖掘,提高计算速率,但是获取的最大重复序列可能包含较多冗余子序列,不能有效地表达序列模式的最小单位,不便于理解与分析;例如,对序列“#xyababpqababmn$”进行最大重复序列挖掘时,会将“abab”作为其中的最大重复序列,而子序列“abab”是由更小的两个相同子序列“ab”串联组成的。因此,为了使得所挖掘出来的序列为最大非串联重复序列,进一步的,所述处理器1101还用于:
在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;
根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
进一步的,所述处理器1101具体用于:
判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相同的流水线;
若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
例如,第二流水线包含的序列的首字符为“a”,当读取“a”时(即第二流水线还为空流水线时),遍历流水线集合中的每一个流水线,发现#4流水线中包含的首字符也为“a”,且此时#4流水线的位置指针为〈r→4→2,1〉,则将#4流水线确定为第二流水线的参考流水线,位置指针〈r→4→2,1〉确定为第二流水线的参考指针,若第二流水线在不断追加新字符的过程中,其位置指针到达〈r→4→2,1〉,则将第二流水线的位置指针为〈r→4→2,1〉时包含的序列确定为最大非串联重复序列。
进一步的,所述处理器1101还用于:
在读取字符之前,建立空流水线;
遍历所述后缀树的每个分支的首字符;若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到所述后缀树的每一个分支上;
若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点***出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到***后的所述后缀树的每一个分支上。
进一步的,为了在后续工作中,方便快速地利用获取的模式信息进行分析,所述处理器1101还用于:
将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
所述将所述最大非串联重复序列的相关信息在所述后缀树上进行表示为:分别将模式编号以及所述模式编号对应的序列模式的在当前分支的剩余长度在所述后缀树对应的分支上进行表示。
例如,假如已经找出1000个模式信息,并且现在要比较正在识别的序列“ab”,此时如果要完全查找信息表的话,需要从表开始到结束比较1000次;而如果将模式信息根据后缀树的存储规则储存在后缀树上的话,只需要比较在“ab”分支上的模式就可以了,若在“ab”分支上有10个模式信息,则需要比较这10个就可以了,加快了比较的速度,方便检索。
其中,所述将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示为:
分别将序列模式的模式编号,以及,所述模式编号对应的序列模式的剩余长度在所述后缀树对应的分支上进行表示。
例如,将确定的最大非串联重复序列“ab”以及“b”的相关信息存储在预设的模式信息表1中,并如图5所示,对应表1将挖掘出的序列模式的相关信息在后缀上表示,其中,后缀树的分支r→8上存储的字符为“a”,为模式信息表中模式编号1、模式编号2对应的序列的首字符,则在分支r→8上存储模式编号1和模式编号1对应的序列的长度,以及,模式编号2和模式编号2对应的序列的长度的相关信息,分别为[1,2]、[2,1],沿着分支r→8向下搜索,在模式编号1对应的序列的剩余字符对应的分支8→4上,存储模式编号1和模式编号1对应的序列的剩余长度1的相关信息[1,1]。
由上可知,本发明实施例提供一种挖掘最大重复序列的装置110,获取字符;将所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列;如此,通过流水线结构和后缀树结构的相互结合,挖掘最大重复序列,提高了计算速率;同时,在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列;以使得所挖掘的最大重复序列为非串联重复序列;如此,避免了现有技术不能实现增量式挖掘,计算量大,以及挖掘的最大重复序列包含冗余的串联结构,不能有效地表达序列模式的最小单元的问题。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (14)
1.一种挖掘最大重复序列的方法,其特征在于,包括:
获取字符;
将所述字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;
在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列;
其中,所述根据第一预设策略以及所述第一流水线中的序列确定最大重复序列,包括:在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符;若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流水线中的序列为最大重复子序列;若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重复序列,并销毁所述第一流水线;同时,在所述流水线集合中,若存在第二流水线,根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列;以使得所挖掘的最大重复序列为非串联重复序列;
确定所述第二流水线的参考流水线中的序列为由所述第二流水线中的序列组成的串联序列,销毁第二流水线以及第二流水线的参考流水线。
2.根据权利要求1所述的方法,其特征在于,所述在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符,包括:
在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;
在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。
3.根据权利要求1-2任一项所述的方法,其特征在于,所述分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,包括:
在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所述流水线包含的序列的尾字符相邻的下一个字符的位置;
判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列相同。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线包含的序列的尾字符在所述后缀树上的位置;
根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列,包括:
判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相同的流水线;
若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
6.根据权利要求1所述的方法,其特征在于,在读取字符之前,建立空流水线;
相应的,所述方法还包括:
遍历所述后缀树的每个分支的首字符;
若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到所述后缀树的每一个分支上;
若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点***出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到***后的所述后缀树的每一个分支上。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
8.一种挖掘最大重复序列的装置,其特征在于,包括:
获取模块,用于获取字符;
判断模块,用于将获取模块获取的字符追加到流水线集合中的每个流水线中,分别判断追加所述字符后的每个流水线中的序列与后缀树上对应的序列是否相同,其中,所述流水线集合包含至少一个流水线,所述流水线包含序列以及位置指针,所述序列包含与所述字符所在的字符串中所述字符之前的字符相同的字符,所述位置指针指向所述流水线包含的序列的尾字符在所述后缀树上的位置;
第一确定模块,用于在所述流水线集合中,若存在第一流水线,在追加所述字符后的序列与后缀树上对应的序列不同,则根据第一预设策略以及所述第一流水线中的序列确定最大重复序列;
所述第一确定模块具体用于:在所述字符串中,检测与所述第一流水线中的序列相同的序列相邻的左边字符是否为同一种字符,以及,检测与所述第一流水线中的序列相同的序列相邻的右边字符是否为同一种字符;若与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符,且与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符,则确定所述第一流水线中的序列为最大重复子序列;若与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,或者,与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符以及与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,则确定所述第一流水线中的序列不是最大重复序列,并销毁所述第一流水线;同时,在所述流水线集合中,若存在第二流水线,根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列;以使得所挖掘的最大重复序列为非串联重复序列;
所述装置还包括:
销毁模块:用于确定所述第二流水线的参考流水线中的序列为由所述第二流水线中的序列组成的串联序列,销毁第二流水线以及第二流水线的参考流水线。
9.根据权利要求8所述的装置,其特征在于,所述第一确定模块具体用于:
在所述字符串中,获取与所述第一流水线中的序列相同的序列相邻的左边字符集;若所述字符集包含同一种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符为同一种字符;若所述字符集包含至少两种字符,则确定与所述第一流水线中的序列相同的序列相邻的左边字符不为同一种字符;
在所述后缀树上,判断所述第一流水线的位置指针所指字符与所述字符是否相同,若相同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符为同一种字符,若不同,则确定与所述第一流水线中的序列相同的序列相邻的右边字符不为同一种字符。
10.根据权利要求8-9任一项所述的装置,其特征在于,所述判断模块具体用于:
在所述后缀树上,分别移动每个流水线中的位置指针,使所述位置指针指向与所述流水线包含的序列的尾字符相邻的下一个字符的位置;
判断移动后的所述位置指针指向的字符与所述字符是否相同;若不同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列不同;若相同,则确定追加所述字符后的流水线中的序列与后缀树上对应的序列相同。
11.根据权利要求8所述的装置,其特征在于,所述装置还包括:
追加模块,用于在所述流水线集合中,若存在第二流水线,在追加所述字符后的序列与后缀树上对应的序列相同,则将所述字符追加到所述第二流水线中,并将所述第二流水线的位置指针指向追加所述字符后的所述第二流水线中序列的尾字符在所述后缀树上的位置;
第二确定模块,用于根据所述第二流水线的位置指针以及第二预设策略确定最大非串联重复序列。
12.根据权利要求11所述的装置,其特征在于,所述第二确定模块具体用于:
判断所述第二流水线的位置指针与所述第二流水线的参考流水线的位置指针是否相同;其中,所述第二流水线的参考流水线为读取所述第二流水线包含的序列的首字符时,在所述流水线集合中,包含的序列的首字符与所述第二流水线包含的序列的首字符相同的流水线;
若相同,则确定所述第二流水线中的序列为最大非串联重复序列。
13.根据权利要求8所述的装置,其特征在于,所述装置还包括:
建立模块,用于在获取模块获取字符之前,建立空流水线,
搜索模块,用于遍历所述后缀树的每个分支的首字符;
存储模块,用于若存在与所述字符相同的首字符,则将所述字符存储在所述空流水线中,并将所述空流水线的位置指针指向与所述字符相同的首字符在所述后缀树上的位置;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到所述后缀树的每一个分支上;
若不存在与所述字符相同的首字符,则销毁空流水线,从所述后缀树的根节点***出一个新的分支;同时,在所述流水线集合中,若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列不同,将所述后缀树上对应的分支从所述第三流水线的位置指针指向的位置开始***成两个分支,将所述字符***到***后的所述后缀树的每一个分支上;若存在第三流水线,在追加所述字符后的序列与后缀树上对应的序列相同,将所述字符***到***后的所述后缀树的每一个分支上。
14.根据权利要求8所述的装置,其特征在于,所述装置还包括:
模式信息存储模块,用于将确定的最大重复序列以及最大非串联重复序列的相关信息存储在预设的模式信息表中,以及,将所述最大重复序列以及所述最大非串联重复序列的相关信息在所述后缀树上进行表示;其中,所述相关信息包含:序列编号,序列内容,序列长度。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410200896.8A CN105095276B (zh) | 2014-05-13 | 2014-05-13 | 一种挖掘最大重复序列的方法及装置 |
PCT/CN2014/089726 WO2015172529A1 (zh) | 2014-05-13 | 2014-10-28 | 一种挖掘最大重复序列的方法及装置 |
US15/349,580 US20170060998A1 (en) | 2014-05-13 | 2016-11-11 | Method and apparatus for mining maximal repeated sequence |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410200896.8A CN105095276B (zh) | 2014-05-13 | 2014-05-13 | 一种挖掘最大重复序列的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105095276A CN105095276A (zh) | 2015-11-25 |
CN105095276B true CN105095276B (zh) | 2020-04-21 |
Family
ID=54479264
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410200896.8A Active CN105095276B (zh) | 2014-05-13 | 2014-05-13 | 一种挖掘最大重复序列的方法及装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20170060998A1 (zh) |
CN (1) | CN105095276B (zh) |
WO (1) | WO2015172529A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107590258B (zh) * | 2017-09-20 | 2020-04-28 | 杭州安恒信息技术股份有限公司 | 关键字匹配方法及装置 |
CN113609933B (zh) * | 2021-07-21 | 2022-09-16 | 广州大学 | 一种基于后缀树的故障检测方法、***、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005316605A (ja) * | 2004-04-27 | 2005-11-10 | Hitachi Ltd | 生体高分子配列のスプライシングパターン解析方法 |
CN101794308A (zh) * | 2010-03-04 | 2010-08-04 | 哈尔滨工程大学 | 一种面向有意义串挖掘的重复串提取方法及装置 |
US8108353B2 (en) * | 2008-06-11 | 2012-01-31 | International Business Machines Corporation | Method and apparatus for block size optimization in de-duplication |
CN102495883A (zh) * | 2011-12-08 | 2012-06-13 | 河海大学 | 一种水文时间序列的异步周期模式挖掘方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5511159A (en) * | 1992-03-18 | 1996-04-23 | At&T Corp. | Method of identifying parameterized matches in a string |
JP4740060B2 (ja) * | 2006-07-31 | 2011-08-03 | 富士通株式会社 | 重複データ検出プログラム、重複データ検出方法および重複データ検出装置 |
CN103365934A (zh) * | 2012-04-11 | 2013-10-23 | 腾讯科技(深圳)有限公司 | 复杂命名实体抽取方法及装置 |
CN103699593A (zh) * | 2013-12-11 | 2014-04-02 | 中国科学院深圳先进技术研究院 | 一种广义后缀树快速遍历的方法及*** |
-
2014
- 2014-05-13 CN CN201410200896.8A patent/CN105095276B/zh active Active
- 2014-10-28 WO PCT/CN2014/089726 patent/WO2015172529A1/zh active Application Filing
-
2016
- 2016-11-11 US US15/349,580 patent/US20170060998A1/en not_active Abandoned
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005316605A (ja) * | 2004-04-27 | 2005-11-10 | Hitachi Ltd | 生体高分子配列のスプライシングパターン解析方法 |
US8108353B2 (en) * | 2008-06-11 | 2012-01-31 | International Business Machines Corporation | Method and apparatus for block size optimization in de-duplication |
CN101794308A (zh) * | 2010-03-04 | 2010-08-04 | 哈尔滨工程大学 | 一种面向有意义串挖掘的重复串提取方法及装置 |
CN102495883A (zh) * | 2011-12-08 | 2012-06-13 | 河海大学 | 一种水文时间序列的异步周期模式挖掘方法 |
Non-Patent Citations (4)
Title |
---|
DNA序列中基于适应性后缀树的重复体识别算法;霍红卫等;《计算机学报》;20100430;第33卷(第4期);第747-754页 * |
Linear time algorithm for the longest common repeat problem;Inbok Lee etal.;《Journal of Discrete Algorithms》;20071231;第2007年卷(第5期);第243-249页 * |
Simple and flexible detection of contiguous repeats using a suffix tree;Jens Stoye etal.;《Theoretical Computer Science》;20021231;第2002年卷(第270期);第843-856页 * |
基于后缀树的中文新闻重复网页识别算法;钱爱兵等;《知识组织与知识管理》;20081231;第2008年卷(第3期);第55-61页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105095276A (zh) | 2015-11-25 |
WO2015172529A1 (zh) | 2015-11-19 |
US20170060998A1 (en) | 2017-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102230661B1 (ko) | Sql 검토 방법, 장치, 서버 및 저장 매체 | |
JP3672242B2 (ja) | パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体 | |
CN103902653B (zh) | 一种构建数据仓库表血缘关系图的方法和装置 | |
CN107423391B (zh) | 网页结构化数据的信息提取方法 | |
CN107153647B (zh) | 进行数据压缩的方法、装置、***和计算机程序产品 | |
KR101617696B1 (ko) | 데이터 정규표현식의 마이닝 방법 및 장치 | |
CN107437026B (zh) | 一种基于广告网络拓扑的恶意网页广告检测方法 | |
CN103530429B (zh) | 一种网页正文抽取的方法 | |
JP6672292B2 (ja) | 重複ウェブページを除去する方法および装置 | |
CN105550359B (zh) | 一种基于垂直搜索的网页排序方法、装置及服务器 | |
CN110969517B (zh) | 一种招投标生命周期关联方法、***、存储介质及计算机设备 | |
CN102867049A (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN104778164A (zh) | 检测重复url的方法及装置 | |
CN102591855A (zh) | 一种数据标识方法及*** | |
US20120124060A1 (en) | Method and system of identifying adjacency data, method and system of generating a dataset for mapping adjacency data, and an adjacency data set | |
CN108628907A (zh) | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 | |
CN105095276B (zh) | 一种挖掘最大重复序列的方法及装置 | |
CN111310224B (zh) | 日志脱敏方法、装置、计算机设备及计算机可读存储介质 | |
US20160196303A1 (en) | String search device, string search method, and string search program | |
CN105095106B (zh) | 数据块存储方法及装置 | |
US11031092B2 (en) | Taxonomic annotation of variable length metagenomic patterns | |
CN110782955A (zh) | 从研究文献中提取天然产物数据信息的方法及*** | |
Kumar et al. | Efficient read alignment using burrows wheeler transform and wavelet tree | |
CN110543457A (zh) | 轨迹类文档处理方法和装置、存储介质及电子装置 | |
Xu et al. | A Reconstructing Android User Behavior Approach based on YAFFS2 and SQLite. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210430 Address after: Unit 3401, unit a, building 6, Shenye Zhongcheng, No. 8089, Hongli West Road, Donghai community, Xiangmihu street, Futian District, Shenzhen, Guangdong 518040 Patentee after: Honor Device Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
TR01 | Transfer of patent right |