CN103117748B - 一种bwt实现方法中对后缀进行排序的方法及系统 - Google Patents
一种bwt实现方法中对后缀进行排序的方法及系统 Download PDFInfo
- Publication number
- CN103117748B CN103117748B CN201310033687.4A CN201310033687A CN103117748B CN 103117748 B CN103117748 B CN 103117748B CN 201310033687 A CN201310033687 A CN 201310033687A CN 103117748 B CN103117748 B CN 103117748B
- Authority
- CN
- China
- Prior art keywords
- suffix
- section
- module
- chained list
- appear
- 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
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供一种BWT实现方法中对后缀进行排序的方法及系统,通过对需要排序的后缀通过双向搜索,获得后缀位置,对所述后缀进行排序并进行信息更新的方式,通过在变换时间和资源消耗上的平衡,解决了原始BWT变换方法消耗资源大、压缩率低的问题。本发明能实现数据压缩速度快、简单,且使用资源比较合理,能节省大量资源。
Description
技术领域
本发明涉及数据压缩技术以及硬件设计领域,尤其涉及一种BWT实现方法中对后缀进行排序的方法及系统。
背景技术
数据压缩是指在不丢失信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率的一种技术方法。或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间。数据压缩包括有损压缩和无损压缩。
Bzip2作为一种无损压缩,其压缩效率比传统的GZIP或者ZIP的压缩效率更高,但是它的压缩速度较慢,消耗的资源更多。Bzip2首先会对需要进行压缩的文件做前置变换以及行程长度编码,接下来使用BWT(Burrows-WheelerTransform)将重复出现的字符序列转换成同样字母的字符串,然后用MTF(Move-To-FrontTransform)变换进行处理,最后使用哈夫曼编码进行压缩。其中最消耗时间和资源的就是BWT变换。现在对于前置变化以及行程长度编码,MTF变换以及哈夫曼编码这几个部分已经有比较成熟的硬件实现方案,BWT变换的硬件实现仍然是一个问题。
目前已有的Bzip2硬件加速方面的专利,如专利号为:200910095596.7的实用新型专利,给出了一种Bzip2压缩算法硬件加速实现的方法,但是这个方法主要是针对Bzip2前置变换和行程长度编码的,虽然能很好的加速这一块,但是由于这一块在整个Bzip2中的地位并不是那么明显,所以对整个Bzip2的压缩过程起到的加速作用不大。
发明内容
本发明的目的一在于提出一种BWT实现方法中对后缀进行排序的方法及系统,通过在变换时间和资源消耗上的平衡,以解决原始BWT变换方法消耗资源大、压缩率低的问题。
为实现上述发明目的,本发明提出一种BWT实现方法中对后缀进行排序的方法,该方法包括:
步骤1,从BWT的待变换序列中取出需要排序的后缀;
步骤2,判断以所述后缀的开头元素作为段首元素的段在后缀链表中是否出现过,所述后缀的开头元素的ASCⅡ值为i,如果寄存器appear[i]=1,则出现过,执行步骤3;如果寄存器appear[i]=0,则未出现过,执行步骤4,其中appear[i]代表以ASCⅡ表中数字i代表的元素为段首元素的段是否已经出现过的标识;
步骤3,在段内进行双向搜索,获得所述后缀在所述后缀链表中的位置,然后执行步骤5;
步骤4,在整个后缀链表中进行双向搜索,搜索到离所述后缀最近的在后缀链表中存在的段,根据所述段获得所述后缀在所述后缀链表中的位置,其中所述段是以相同元素开头的后缀按从小到大顺序组成的序列,然后执行步骤5;
步骤5,将所述后缀插入后缀链表:将所述后缀的高地址上的所有后缀右移一位,将所述高地址所在的位置空出,然后在所述高地址后缀所在的位置上插入所述后缀,然后执行步骤6;
步骤6,更新所述后缀链表以及段的信息,其中所述后缀链表由后缀段组成,并按照段首元素从小到大顺序排列的,所述段首元素是每个段里面后缀的开头元素。
进一步的,所述步骤3包括:
步骤31,找到段头、段尾位置对应的两个后缀;
步骤32,分别将段头和段尾对应的后缀记为Sm、Sn,并与所述后缀Si进行大小比较,如果Si<Sn或者Si>Sm,则执行步骤34;如果Sn<Si<Sm,则执行步骤33;
步骤33,找到Sm、Sn指向段内方向的相邻的两个后缀,将Sm、Sn替换为这两个后缀,再与Si进行大小比较,如果Si<Sn或者Si>Sm,则执行步骤34;如果Sn<Si<Sm,则执行步骤32;
步骤34,结束双向搜索,记录Si位置,如果Si<Sn,则Si的位置在Sn邻近的低地址,Si>Sm,则Si的位置在Sm邻近的高地址,其中所述段头段尾分别是段里面的最小后缀和最大后缀。
进一步的,所述步骤4包括:
步骤41,令控制参数k自增1,第一次执行步骤41的时候初始化k为0,然后查看appear[i+k]和apprear[i-k],如果appear[i+k]=1或者appear[i-k]=1,结束双向查找,然后执行步骤42;如果appear[i+k]=0并且appear[i-k]=0,则重复步骤41,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识。
步骤42,如果appear[i+k]=1,则Si的位置在以元素i+k为段首元素的段的段尾邻近的低地址;如果appear[i-k]=1,则Si的位置在以元素i-k为段首元素的段的段头邻近的高地址,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识。
进一步的,所述步骤6包括:
步骤61,如果上一个步骤是步骤3,则执行步骤63;如果上一个步骤是步骤4,则执行步骤62;
步骤62,将这个段的存在信息改为已经存在,即令appear[i]=1,同时把max[i]的值min[i]都置为Si在后缀链表中的地址;
步骤63,更新相应段的max[i]以及min[i]信息,即将段头段尾中存放的地址加1,其中所述相应段指的是段首元素大于或者等于后缀Si的开头元素的段,min[i]记录以ASCⅡ表中数字i代表的元素为段首元素的段尾对应的后缀在后缀链表中的地址,max[i]记录以ASCⅡ表中数字i代表的元素为段首元素的段头对应的后缀在后缀链表中的地址。
进一步的,所述后缀链表里的后缀都是成段出现的,而且每一段的段首元素是按字典序从小到大排列的。
为实现上述发明目的,本发明还提供一种BWT实现方法中对后缀进行排序的系统,该系统包括:
提取模块,从BWT的待变换序列中取出需要排序的后缀;
处理模块,判断以所述后缀的开头元素作为段首元素的段在后缀链表中是否出现过,所述后缀的开头元素的ASCⅡ值为i,如果寄存器appear[i]=1,则出现过,执行第一双向搜索模块;如果寄存器appear[i]=0,则未出现过,执行第二双向搜索模块,其中appear[i]代表以ASCⅡ表中数字i代表的元素为段首元素的段是否已经出现过的标识;
第一双向搜索模块,在段内进行双向搜索,获得所述后缀在所述后缀链表中的位置,然后执行后缀排序模块;
第二双向搜索模块,在所述后缀链表中进行双向搜索,搜索到离所述后缀最近的在所述后缀链表中存在的段,根据所述段获得所述后缀在所述后缀链表中的位置,其中所述段是以相同元素开头的后缀按从小到大顺序组成的序列,然后执行后缀排序模块;
插入后缀模块,将所述后缀插入后缀链表:将所述后缀的段的高地址上的所有后缀右移一位,这样所述高地址所在的位置就空出来了,然后在所述高地址后缀所在的位置上插入所述后缀,然后执行更新模块;
更新模块,更新所述后缀链表以及段的信息,其中所述后缀链表由后缀段组成,并按照段首元素从小到大顺序排列的,所述段首元素是每个段里面后缀的开头元素。
进一步的,所述第一双向搜索模块包括:
后缀搜索模块,找到段头、段尾位置对应的两个后缀;
比较模块,分别将段头和段尾对应的后缀记为Sm、Sn,并与所述后缀Si进行大小比较,如果Si<Sn或者Si>Sm,则执行记录位置模块;如果Sn<Si<Sm,则执行替换比较模块;
替换比较模块,找到Sm、Sn指向段内方向的相邻的两个后缀,将Sm、Sn替换为这两个后缀,再与Si进行大小比较,如果Si<Sn或者Si>Sm,则执行记录位置模块;如果Sn<Si<Sm,则执行比较模块;
记录位置模块,结束双向搜索,记录Si位置,如果Si<Sn,则Si的位置在Sn邻近的低地址,Si>Sm,则Si的位置在Sm邻近的高地址,其中所述段头段尾分别是段里面的最小后缀和最大后缀。
进一步的,所述第二双向搜索模块包括:
初始化处理模块,令控制参数k自增1,第一次执行初始化处理模块的时候初始化k为0,然后查看appear[i+k]和apprear[i-k],如果appear[i+k]=1或者appear[i-k]=1,结束双向搜索,然后执行位置确定模块;如果appear[i+k]=0并且appear[i-k]=0,则重复执行初始化处理模块,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识。
位置确定模块,如果appear[i+k]=1,则Si的位置在以元素i+k为段首元素的段的段尾邻近的低地址;如果appear[i-k]=1,则Si的位置在以元素i-k为段首元素的段的段头邻近的高地址,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识。
进一步的,所述更新模块包括:
判断执行模块,如果上一个模块是第一双向搜索模块,则执行信息处理模块;如果上一个模块是第二双向搜索模块,则执行信息修改模块;
信息修改模块,将这个段的存在信息改为已经存在,即令appear[i]=1,同时把max[i]的值min[i]都置为Si在后缀链表中的地址;
信息处理模块,更新相应段的max[i]以及min[i]信息,并将段头段尾中存放的地址加1,其中所述相应段指的是段首元素大于或者等于后缀Si的开头元素的段,min[i]记录以ASCⅡ表中数字i代表的元素为段首元素的段尾对应的后缀在后缀链表中的地址,max[i]记录以ASCⅡ表中数字i代表的元素为段首元素的段头对应的后缀在后缀链表中的地址。
进一步的,所述后缀链表里的后缀都是成段出现的,而且每一段的段首元素是按字典序从小到大排列的。
本发明的有益功效在于,
1.在构建后缀时,采用默认大小方法,省略了哨兵元素,使得待压缩的数据与本方法自身之间不存在数据冲突。
2.计算BWT变换的速度比单纯的基本算法以及双向算法的处理快,仿真测试的结果显示当待压缩数据量达到64Kbyte大小甚至更大时,双向算法消耗的时间大约为9*108个时钟周期,而本发明中提及的算法消耗的时钟周期大约为8.7*107个,显然本发明中提及的方法比双向算法的速度提高了一个数量级;
3.对每一个后缀进行大小比较确定其位置之后,用该后缀的起始元素在原序列中的地址来表示该后缀,这样可以节省存储资源,对于长度为N的序列,由于每个元素都是以ASCⅡ的形式读入,即都能用0~255来表示。如果我们直接将每个后缀存储,需要8*(1+2+3+……+N)=4N(N+1)个比特的存储资源来存放所有后缀;如果用后缀的起始元素在原序列中的地址表示后缀,则只需要N*([log2N]+1)个比特的存储资源来存放所有后缀,当N很大的时候会节省很多存储资源。
4.使用资源比较合理,对于长度为N的待变换序列,用这种在放方法消耗的存储资源是(9+[log2N])*N+512*([log2N]+1)比特,可以根据实际情况调整输入序列的长度来控制资源的消耗;
5.本发明提到的方法的最差计算复杂度为相对于原始算法的最差计算复杂度O(N2)要小很多,采用硬件方案设计时更具可行性。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
附图说明
图1为本发明提供的一种BWT实现方法中定义的后缀链表;
图2为本发明提供的一种BWT实现方法中以元素i开头的段的结构;
图3为本发明提供的一种BWT实现方法中段信息是否出现的信息;
图4为本发明提供的一种BWT实现方法中段头段尾信息;
图5为本发明提供的一种BWT实现方法中对后缀进行排序的流程图;
图6为本发明提供的一种BWT实现方法中双向搜索的具体步骤;
图7为本发明提供的一种BWT实现方法中双向查找最近段的具体步骤;
图8为本发明提供的一种BWT实现方法中更新后缀链表的具体步骤;
图9为本发明提供的一种BWT实现方法中插入后缀的示意图;
图10为本发明的一种BWT实现方法中对后缀进行排序的方法流程图;
图11为本发明的一种BWT实现方法中对后缀进行排序的系统示意图。
具体实施方式
下面参照附图用本发明的示例性实施例对本发明进行更全面的描述和说明。
图10为本发明的一种BWT实现方法中对后缀进行排序的方法流程图。如图1所示,该方法包括:
步骤1,从BWT的待变换序列中取出需要排序的后缀;
步骤2,判断以所述后缀的开头元素作为段首元素的段在后缀链表中是否出现过,所述后缀的开头元素的ASCⅡ值为i,如果寄存器appear[i]=1,则出现过,执行步骤3;如果寄存器appear[i]=0,则未出现过,执行步骤4,其中appear[i]代表以ASCⅡ表中数字i代表的元素为段首元素的段是否已经出现过的标识;
步骤3,在段内进行双向搜索,获得所述后缀在所述后缀链表中的位置,然后执行步骤5;
步骤4,在后缀链表中进行双向搜索,搜索到离所述后缀最近的在所述后缀链表中存在的段,根据所述段获得所述后缀在所述后缀链表中的位置,其中所述段是以相同元素开头的后缀按从小到大顺序组成的序列,然后执行步骤5;
步骤5,将所述后缀插入后缀链表:将所述后缀的高地址上的所有后缀右移一位,这样所述高地址所在的位置就空出来了,然后在所述高地址后缀所在的位置上插入所述后缀,然后执行步骤6;
步骤6,更新所述后缀链表以及段的信息,其中所述后缀链表由后缀段组成,并按照段首元素从小到大顺序排列的,所述段首元素是每个段里面后缀的开头元素。
进一步的,所述步骤3包括:
步骤31,找到段头、段尾位置对应的两个后缀;
步骤32,分别将段头和段尾对应的后缀记为Sm、Sn,并与所述后缀Si进行大小比较,如果Si<Sn或者Si>Sm,则执行步骤34;如果Sn<Si<Sm,则执行步骤33;
步骤33,找到Sm、Sn指向段内方向的相邻的两个后缀,将Sm、Sn替换为这两个后缀,再与Si进行大小比较,如果Si<Sn或者Si>Sm,则执行步骤34;如果Sn<Si<Sm,则执行步骤32;
步骤34,结束双向搜索,记录Si位置,如果Si<Sn,则Si的位置在Sn邻近的低地址,Si>Sm,则Si的位置在Sm邻近的高地址,其中所述段头段尾分别是段里面的最小后缀和最大后缀。
进一步的,所述步骤4包括:
步骤41,令控制参数k自增1,第一次执行步骤41的时候初始化k为0,然后查看appear[i+k]和apprear[i-k],如果appear[i+k]=1或者appear[i-k]=1,结束双向查找,然后执行步骤42;如果appear[i+k]=0并且appear[i-k]=0,则重复步骤41,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识。
步骤42,如果appear[i+k]=1,则Si的位置在以元素i+k为段首元素的段的段尾邻近的低地址;如果appear[i-k]=1,则Si的位置在以元素i-k为段首元素的段的段头邻近的高地址,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识。
进一步的,所述步骤6包括:
步骤61,如果上一个步骤是步骤3,则执行步骤63;如果上一个步骤是步骤4,则执行步骤62;
步骤62,将这个段的存在信息改为已经存在,即令appear[i]=1,同时把max[i]的值min[i]都置为Si在后缀链表中的地址;
步骤63,更新相应段的max[i]以及min[i]信息,即将段头段尾中存放的地址加1,其中所述相应段指的是段首元素大于或者等于后缀Si的开头元素的段,min[i]记录以ASCⅡ表中数字i代表的元素为段首元素的段尾对应的后缀在后缀链表中的地址,max[i]记录以ASCⅡ表中数字i代表的元素为为段首元素的段头对应的后缀在后缀链表中的地址。
进一步的,所述后缀链表里的后缀都是成段出现的,而且每一段的段首元素是按字典序从小到大排列的。
图11为本发明的一种BWT实现方法中对后缀进行排序的系统示意图。如图11所示,该系统包括:
提取模块100,从BWT的待变换序列中取出需要排序的后缀;
处理模块200,判断以所述后缀的开头元素作为段首元素的段在后缀链表中是否出现过,所述后缀的开头元素的ASCⅡ值为i,如果寄存器appear[i]=1,则出现过,执行第一双向搜索模块300;如果寄存器appear[i]=0,则未出现过,执行第二双向搜索模块400,其中appear[i]代表以ASCⅡ表中数字i代表的元素为段首元素的段是否已经出现过的标识;
第一双向搜索模块300,在段内进行双向搜索,获得所述后缀在所述后缀链表中的位置,然后执行后缀排序模块500;
第二双向搜索模块400,在后缀链表中进行双向搜索,搜索到离所述后缀最近的在所述后缀链表中存在的段,根据所述段获得所述后缀在所述后缀链表中的位置,其中所述段是以相同元素开头的后缀按从小到大顺序组成的序列,然后执行后缀排序模块500;
插入后缀模块500,将所述后缀插入后缀链表:将所述后缀的段的高地址上的所有后缀右移一位,这样所述高地址所在的位置就空出来了,然后在所述高地址后缀所在的位置上插入所述后缀,然后执行更新模块600;
更新模块600,更新所述后缀链表以及段的信息,其中所述后缀链表由后缀段组成,并按照段首元素从小到大顺序排列的,所述段首元素是每个段里面后缀的开头元素。
进一步的,所述第一双向搜索模块300包括:
后缀搜索模块,找到段头、段尾位置对应的两个后缀;
比较模块,分别将段头和段尾对应的后缀记为Sm、Sn,并与所述后缀Si进行大小比较,如果Si<Sn或者Si>Sm,则执行记录位置模块;如果Sn<Si<Sm,则执行替换比较模块;
替换比较模块,找到Sm、Sn指向段内方向的相邻的两个后缀,将Sm、Sn替换为这两个后缀,再与Si进行大小比较,如果Si<Sn或者Si>Sm,则执行记录位置模块;如果Sn<Si<Sm,则执行比较模块;
记录位置模块,结束双向搜索,记录Si位置,如果Si<Sn,则Si的位置在Sn邻近的低地址,Si>Sm,则Si的位置在Sm邻近的高地址,其中所述段头段尾分别是段里面的最小后缀和最大后缀。
进一步的,所述第二双向搜索模块400包括:
初始化处理模块,令控制参数k自增1,第一次执行初始化处理模块的时候初始化k为0,然后查看appear[i+k]和apprear[i-k],如果appear[i+k]=1或者appear[i-k]=1,结束双向搜索,然后执行位置确定模块;如果appear[i+k]=0并且appear[i-k]=0,则重复执行初始化处理模块,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识;
位置确定模块,如果appear[i+k]=1,则Si的位置在以元素i+k为段首元素的段的段尾邻近的低地址;如果appear[i-k]=1,则Si的位置在以元素i-k为段首元素的段的段头邻近的高地址,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识。
进一步的,所述更新模块600包括:
判断执行模块,如果上一个模块是第一双向搜索模块,则执行信息处理模块;如果上一个模块是第二双向搜索模块,则执行信息修改模块;
信息修改模块,将这个段的存在信息改为已经存在,即令appear[i]=1,同时把max[i]的值min[i]都置为Si在后缀链表中的地址;
信息处理模块,更新相应段的max[i]以及min[i]信息,并将段头段尾中存放的地址加1,其中所述相应段指的是段首元素大于或者等于后缀Si的开头元素的段,min[i]记录以ASCⅡ表中数字i代表的元素为段首元素的段尾对应的后缀在后缀链表中的地址,max[i]记录以ASCⅡ表中数字i代表的元素为段首元素的段头对应的后缀在后缀链表中的地址。
进一步的,所述后缀链表里的后缀都是成段出现的,而且每一段的段首元素是按字典序从小到大排列的。
图1为本发明提供的一种BWT实现方法中定义的后缀链表。对于一个含有N个元素的待变换序列X=x1x2……xN,其子序列xixi+1……xN称为后缀Si,为了得到这个序列的BWT结果,需要对这个序列的所有后缀进行大小比较,并且按照从小到大的顺序排列,后缀链表用来存放已经按照从小到大的顺序排列好的后缀在待变换序列中的地址,对于长度为N的待变换序列,需要N个单元来存在序列的N个后缀,每个单元里面存放的是对应后缀在原序列中的地址。从序列X的最后一个后缀SN开始往前一直到第一个后缀S1,每次将一个后缀插入到后缀链表中的对应位置。在所有的后缀都插入到后缀链表之后,将每个后缀用它在原序列里面的前一个元素替代(例如Si就用xi-1替代),这时得到的就是BWT变换的结果。需要注意的是,要这样的方法得到BWT结果的前提是xN必须是X里面字典序最大的元素,即在写程序的时候默认序列的最后一个元素的字典序最大即可。
通过分析可以知道后缀链表有以下特点:由以不同元素开头的后缀段组成;而且是按照段首元素从小到大顺序排列的,其中段i表示以元素i为段首元素的段;
图2为本发明提供的一种BWT实现方法中在后缀链表中以元素i为段首元素的段的结构。其中,段首元素:指的是每个段里面后缀的开头元素(例如后缀Si的开头元素就是xi);假设段里面总共有k个后缀,它们是按照从小到大顺序排列的,其中最左边的后缀最小,为段尾,最右边的后缀最大,为段头,相应单元存放的是该后缀在待变换序列中的地址。其在后缀链表中的地址存放在max[i]中;对后缀链表进行分析,可以发现在后缀链表里面的已经排好序后缀都是成段出现的,而且每一段的段首元素是按字典序从小到大排列的。所以记录下这几个信息会使排序过程更快,效率更高。
图3为本发明提供的一种BWT实现方法中段信息是否出现的信息。在将一个新的后缀Si插入后缀链表时,首先需要判断以xi为段首元素的段在后缀链表中是否已经存在,如果已经存在,则根据该段的段头跟段尾的信息使来找到该段在后缀链表中的位置,然后通过双向搜索方法在这个段内找到Si在后缀链表中对应的位置;如果不存在,则需要在后缀链表中已经出现过的段当中找到段首元素距离xi最近的那个段,这样就能根据情况确定下来Si在后缀链表中的位置。
针对可能出现的256个段,分别给出1比特存放这个信息,其中appear[i]=1表示以ASCⅡ表中数字i代表的元素为段首元素的段已经出现,appear[i]=0表示以ASCⅡ表中数字i代表的元素为段首元素的段还没有出现。
图4为本发明提供的一种BWT实现方法中段头段尾信息。其中min[i]记录以ASCⅡ表中数字i代表的元素为段首元素的段的段尾信息,也就是段尾对应的后缀在后缀链表中的地址,max[i]记录以ASCⅡ表中数字i代表的元素为段首元素的段的段头信息,也就是段头对应的后缀在后缀链表中的地址。
图5为本发明提供的一种BWT实现方法中对后缀进行排序的流程图100(假设需要进行排序的后缀是Si,其开头元素是xi,对应的ASCⅡ值为i),包括:
步骤102,获取新后缀Si,依次从待变换序序列中取出每次需要排序的后缀;
步骤104,判断段是否出现,用于判断以Si的开头元素xi为段首元素的段在后缀链表中是否已经出现过,其中xi的ASCⅡ值为i,并根据结果决定下一个步骤;例如,如果appear[i]=1,则执行双向搜索步骤;如果appear[i]=0,则执行双向查找最近段步骤;
步骤106,双向搜索,用于在段内利用双向搜索方法确定Si在后缀链表中的位置;
步骤108,双向查找最近段,用于找到离Si最近的已经在后缀链表中出现过的段,然后根据情况确定Si在后缀链表中的位置;
步骤110,更新后缀链表,用于在确定Si在后缀链表中的位置之后,更新后缀链表以及相应段的信息,包括段是否出现信息,段头段尾信息。
图6为本发明提供的一种BWT实现方法中双向搜索106的具体步骤,包括:
步骤1060,找到段头、段尾位置对应的两个后缀,根据段头段尾记录下的地址,在后缀链表中找到该地址单元存放的数据,这个数据就是对应的后缀在待变换序列中的地址,根据这个地址从待变换序列中找到后缀,即Sik、Si1,并且分别将段头和段尾对应的后缀记为Sm、Sn,同时与Si进行大小比较,根据比较结果决定下一步骤是什么:如果Si<Sn或者Si>Sm,则执行步骤1064;如果Sn<Si<Sm,则执行步骤1062;
步骤1062,找到Sm、Sn指向段内方向的相邻的两个后缀(如果当前的Sm、Sn分别是Sit、Si(k+1-t),则其相邻的两个后缀分别是Si(t+1)、Si(k-t)),将Sm、Sn替换为这两个后缀,再同时与Si进行大小比较,根据比较结果决定下一步骤是什么:如果Si<Sn或者Si>Sm,则执行步骤1064;如果Sn<Si<Sm,则执行步骤1062;
步骤1064,结束双向搜索,记录Si位置,由步骤1060以及1062的结果可知此时Si<Sn或者Si>Sm,如果Si<Sn,则可以确定Si的位置在Sn邻近的低地址;如果Si>Sm,则可以确定Si的位置在Sm邻近的高地址。
图7为本发明提供的一种BWT实现方法中双向查找最近段108的具体步骤,包括:
步骤1080,在双向查找最近段的过程中时,需要用一个参数k来控制查找对象,第一次执行步骤1080时令k=0,步骤1080首先需要做的就是让参数k自增1,然后查看appear[i+k]和apprear[i-k],根据结果确定下一个步骤是什么,如果appear[i+k]=1或者appear[i-k]=1,说明最近的段已经找到,这时应该结束双向查找最近段的过程,执行步骤1082;如果appear[i+k]=0并且appear[i-k]=0,说明没找到最近的段,还需要继续查找,执行步骤1080;
步骤1082,在步骤1080中找到最近的段之后,接下来需要根据查找的结果记录Si的位置,如果appear[i+k]=1,则可以确定Si的位置在以元素i+k为段首元素的段的段尾邻近的低地址;如果appear[i-k]=1,则可以确定Si的位置在以元素i-k为段首元素的段的段头邻近的高地址。
图8为本发明提供的一种BWT实现方法中更新后缀链表110的具体步骤,包括:
步骤1100,高地址后缀右移一位,如图9所示,假设Si的位置在Si(t)和Si(t+1)之间,为了插入Si,我们需要把后缀链表中从Si(t+1)开始,一直到后缀链表的尾部的所有后缀全部往后面移动一位,从而将原本Si(t+1)所在的位置空出来;
步骤1102,在原本Si(t+1)所在的位置上插入Si;
步骤1104,判断上一个步骤是什么,并且根据判断结果决定下一个步骤:如果上一个步骤是106,则执行步骤1108;如果上一个步骤是108,则执行步骤1106;
步骤1106,因为上一个步骤是108,说明Si所在的段在后缀链表中没有出现过,Si是这个段中第一个出现的后缀,这时需要把这个段的存在信息改为已经存在,即令appear[i]=1,同时把max[i]的值min[i]都置为Si在后缀链表中的地址;
步骤1108,更新相应段的max以及min信息,如图9所示,所有比Si大的后缀都往右移了一位,Si所在段的段头与比Si所在的段大的段的段头段尾都往右移了一位,所以需要把这些段头段尾中存放的地址加1。
在对待变换序列中的所有后缀都用本发明提供的方法插入后缀链表之后,再将后缀链表中的所有后缀有它们在待变换序列中的前面一个元素替代,得到的结果就是待变换序列的BWT变换结果。
参考前述本发明的描述,本领域技术人员可以知晓本发明具有以下优点:
本发明提供了一种BWT实现方法,该方法可应用于Bzip2压缩算法核心组成部分BWT变换算法中,在用硬件实现BWT变换时,使用这个方法有以下优点:算法流程简单,计算复杂度不大;变换速度快,通过对一些信息的记录省去了很多不必要的操作;消耗的资源比较合理,克服了BWT原理算法消耗资源多的缺点。
本发明提供了一种BWT实现方法,通过适当的改进和结构变化,该系统和方法也可用于其它含有BWT相同或相似算法的应用中。
尽管本发明此处具体化了方法的描述,然而本发明不限制于所示出的细节,因为在不偏离本发明的精神以及在权利要求的范围和等同范围内,可以作出多种改进和结构变化。因此,宽范围地并且如权利要求中所阐明的在某种意义上与本发明的范围一致地解释附加的权利要求是适当的。
本发明提到的方法中包括双向搜索查找Si在后缀链表中的位置,在将Si插入后缀链表的过程中,如果以xi作为段首元素的段在后缀链表中已经存在,接下来需要通过该段的段头段尾确定该段在后缀链表中的位置,然后以段头段尾为起始地址,从两个方向上分别拿Si跟段内的后缀进行大小比较,无论哪个方向上找到Si的位置,都会给出一个信号来结束查找过程。
本发明提到的方法中包括双向查找最近的段,在插入Si的过程中,如果以xi作为段首元素的段在后缀链表中不存在,则需要在后缀链表中已经出现过的段当中找到段首元素距离xi最近的那个段,假设xi的ASCⅡ值为i,这时需要从两个方向依次判断以i+k和i-k(k=1,2,3……)为段首元素的段是否已经出现过,第一个符合条件的段就是离Si最近的段,然后根据该段的段头段尾确定该段在后缀链表中的位置,然后根据段首元素的大小关系既可以确定Si在后缀链表中的位置。
本发明中提到的方法中包括后缀链表的更新,在找到Si在后缀链表中的位置之后,需要将这个后缀插入到后缀链表对应的位置,这时需要将后缀链表中这个位置后面的所有后缀全部往后移动一位,再将这个后缀插入到该位置。由于这些后缀都移动了位置,后缀链表上的对应位置存放的地址需要更新,所以需要将移动过的后缀对应的段的属性,即段头段尾信息进行更新,另外如果是新的段,还需要将这个段的存在属性改成已存在。
本发明中提到的方法算法复杂度不高,条理清晰,适合硬件实现,比起其他方法,可以大大提高后缀排序的效率,资源的消耗也比较合理,对于一个长度为N的序列,用本发明提出的方法主要消耗的存储资源是(9+[log2N])*N+512*([log2N]+1)比特。
本发明提出了一种BWT硬件实现方法,该方法可应用于Bzip2压缩算法的核心组成部分BWT变换算法中,通过这个方法,可以有效的减少BWT变换的时间、消耗的资源以及算法复杂度。当然,通过适当的改进和结构变化,该方法也可用于其它含有BWT变换相同或相似算法的应用中。
现举一个具体的例子,考虑一个含有N个元素的序列X=x1x2……xN,其子序列xixi+1……xN称为后缀Si,这样整个序列会有N个后缀,将这些后缀按照从小到大的顺序排列(这里由于默认最后一个元素的字典序最大,所有的后缀都能被唯一排序),得到一个所有后缀组成的序列,将这个序列中的每个后缀用它在原序列里面的前一个元素替换(即Si用xi-1替换),这样最后得到的序列即为序列X的BWT变换结果。由此可以看出BWT变换的速度和消耗的资源取决于后缀排序算法的好坏。
假设有后缀Si与Sj,比较其大小首先需要比较xi与xj,比较法则如下:
如果xi>xj,则Si>Sj;
如果xi<xj,则Si<Sj;
如果xi=xj,则比较xi+1与xj+1;
这样一直比较下去,直到分出大小,如果直到较短的那个后缀的最后一个元素仍然没有分出大小,则默认较长的那个后缀要大。
可以看出后缀之间的排序实际上就是元素字典序大小的比较。
基本算法:从SN开始往前,一直到S1,每次处理一个后缀,处理过程就是用当前需要处理的后缀Si和后缀链表中的后缀序列按从小到大的方向分别逐个进行大小的比较,直到找到这个后缀在后缀链表中的位置,将这个后缀插入后缀链表的这个位置,并且在这个位置上记下这个后缀在原序列中的地址,然后再进行下一个后缀的处理。
双向算法:在基础算法的思想上,可以加上另外一个方向的比较,即用当前需要处理的后缀和后缀链表中按从大到小的方向分别逐个进行大小的比较,两个方向并行处理,任何一个方向上找到对应位置时会给出一个信号,来终止本次处理过程,然后再将此后缀插入到后缀链表中,这样会大大减少这个过程所需的时间。
通过对后缀链表特点的分析,可以发现在后缀链表里面的已经排好序后缀都是成段出现的,而且每一段的段首元素是按字典序从小到大排列的。从后缀大小比较的法则可以看出,后缀大小的比较实际上就是元素大小的比较,所以只需要对后缀中的每个元素进行比较即可,由于文件都会以ASCⅡ的形式给出,所以可以把所有后缀根据它们的开头元素分为256段,用本发明中提到的方法进行排序工作需要5个寄存器来存放相应的信息:
memo,位宽为8,深度为N,用于存放长度为N的待变换序列;
suffix_list,位宽为[log2N]+1,深度为N,用来存放排好序之后的后缀,每个位置上存放的是对应位置上的后缀在原序列中的地址来,这里假设小的后缀放在绝对值小的位置上,排序时从低位置往高位置移动,即先进来已经排好序的后缀序列从suffix_list的最低位置依次连续往后存放,当找到新后缀Si的位置时,则将后缀链表中所有比Si大的后缀全部往后移一位,然后插入Si,初始化全为0;
max,位宽为[log2N]+1,深度为256,max[i]表示后缀链表中以ASCⅡ表中数字i代表的元素开头的所有后缀中最大的那个后缀的在suffix_list中的地址,初始化全为0;
min,位宽为[log2N]+1,深度为256,min[i]表示后缀链表中以ASCⅡ表中数字i代表的元素开头的所有后缀中最小的那个后缀的在suffix_list的地址,初始化全为0;
appear,位宽为1,深度为256,appear[i]=1表示以ASCⅡ表中数字i代表的元素为段首元素的段已经出现过;appear[i]=0表示以ASCⅡ表中数字i代表的元素为段首元素的段还没有出现过,初始化全为0。
对后缀Si进行排序的步骤如下:
步骤1,判断以xi为段首地址的段是否出现过,假设xi的ASCⅡ值为i,则要判断appear[i]的值,如果appear[i]=1,则执行步骤2;如果appear[i]=0,则执行步骤3;
步骤2,根据max[i]以及min[i]找到对应段的位置,接下来则以max[i]和min[i]为起始地址从两个方向上让Si与段中的后缀逐个进行比较得到Si的具体位置,将suffix_list中比Si大的后缀全部往后移动一位,再插入Si,接下来还要更新max和min,即将min[i]以及所有的max[k]、min[k](i<k<256)加1;
步骤3,从两个方向依次判断appear[i+k]和appear[i-k]的值(k=1,2,3……),直到找到最近的出现过的段,然后根据情况找到Si的具体位置,插入Si,更新suffix_list,接下来更新相应的max,min,同时令appear[i]=1。
根据这个步骤对所有后缀都插入到后缀链表之后,接下来需要将后缀链表中的所有后缀用它们在原序列中的前一个元素代替,即可得到BWT变换的输出。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (8)
1.一种BWT实现方法中对后缀进行排序的方法,其特征在于,包括:
步骤1,从BWT的待变换序列中取出需要排序的后缀;
步骤2,判断以所述后缀的开头元素的,作为段首元素的段在后缀链表中是否出现过,所述后缀的开头元素的ASCⅡ值为i,如果寄存器appear[i]=1,则出现过,执行步骤3;如果寄存器appear[i]=0,则未出现过,执行步骤4,其中appear[i]代表以ASCⅡ表中数字i代表的元素为段首元素的段是否已经出现过的标识;
步骤3,在段内进行双向搜索,获得所述后缀在所述后缀链表中的位置,然后执行步骤5,其中所述步骤3包括:
步骤31,找到段头、段尾位置对应的两个后缀;
步骤32,分别将段头和段尾对应的后缀记为Sm、Sn,并与所述后缀Si进行大小比较,如果Si<Sn或者Si>Sm,则执行步骤34;如果Sn<Si<Sm,则执行步骤33;
步骤33,找到Sm、Sn指向段内方向的相邻的两个后缀,将Sm、Sn替换为这两个后缀,再与Si进行大小比较,如果Si<Sn或者Si>Sm,则执行步骤34;如果Sn<Si<Sm,则执行步骤32;
步骤34,结束双向搜索,记录Si位置,如果Si<Sn,则Si的位置在Sn邻近的低地址,Si>Sm,则Si的位置在Sm邻近的高地址,其中所述段头段尾分别是段里面的最小后缀和最大后缀;
步骤4,在所述后缀表中进行双向搜索,搜索到离所述后缀最近的在所述后缀链表中存在的段,根据所述段获得所述后缀在所述后缀链表中的位置,其中所述段是以相同元素开头的后缀按从小到大顺序组成的序列,然后执行步骤5;
步骤5,将所述后缀插入后缀链表:将所述后缀的段的高地址上所有后缀右移一位,将所述高地址所在的位置空出,然后在所述高地址后缀所在的位置上插入所述后缀,然后执行步骤6;
步骤6,更新所述后缀链表以及段的信息,其中所述后缀链表由后缀段组成,并按照段首元素从小到大顺序排列的,所述段首元素是每个段里面后缀的开头元素。
2.如权利要求1所述的对后缀进行排序的方法,其特征在于,所述步骤4包括:
步骤41,令控制参数k自增1,第一次执行步骤41的时候初始化k为0,然后查看appear[i+k]和apprear[i-k],如果appear[i+k]=1或者appear[i-k]=1,结束双向查找,然后执行步骤42;如果appear[i+k]=0并且appear[i-k]=0,则重复步骤41,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识;
步骤42,如果appear[i+k]=1,则Si的位置在以元素i+k为段首元素的段的段尾邻近的低地址;如果appear[i-k]=1,则Si的位置在以元素i-k为段首元素的段的段头邻近的高地址。
3.如权利要求1所述的对后缀进行排序的方法,其特征在于,所述步骤6包括:
步骤61,如果上一个步骤是步骤3,则执行步骤63;如果上一个步骤是步骤4,则执行步骤62;
步骤62,将这个段的存在信息改为已经存在,令appear[i]=1,同时把max[i]的值min[i]都置为Si在后缀链表中的地址;
步骤63,更新相应段的max[i]以及min[i]信息,将段头段尾中存放的地址加1,其中所述相应段指的是段首元素大于或者等于后缀Si的开头元素的段,min[i]记录以ASCⅡ表中数字i代表的元素为为段首元素的段尾对应的后缀在后缀链表中的地址,max[i]记录以ASCⅡ表中数字i代表的元素为为段首元素的段头对应的后缀在后缀链表中的地址。
4.如权利要求1所述的对后缀进行排序的方法,其特征在于,所述后缀链表里的后缀都是成段出现的,而且每一段的段首元素是按字典序从小到大排列的。
5.一种BWT实现方法中对后缀进行排序的系统,其特征在于,包括:
提取模块,从BWT的待变换序列中取出需要排序的后缀;
处理模块,判断以所述后缀的开头元素作为段首元素的段在后缀链表中是否出现过,所述后缀的开头元素的ASCⅡ值为i,如果寄存器appear[i]=1,则出现过,执行第一双向搜索模块;如果寄存器appear[i]=0,则未出现过,执行第二双向搜索模块,其中appear[i]代表以ASCⅡ表中数字i代表的元素为段首元素的段是否已经出现过的标识;
第一双向搜索模块,在段内进行双向搜索,获得所述后缀在所述后缀链表中的位置,然后执行后缀排序模块,其中所述第一双向搜索模块包括后缀搜索模块、比较模块、替换比较模块、记录位置模块:
后缀搜索模块,找到段头、段尾位置对应的两个后缀;
比较模块,分别将段头和段尾对应的后缀记为Sm、Sn,并与所述后缀Si进行大小比较,如果Si<Sn或者Si>Sm,则执行记录位置模块;如果Sn<Si<Sm,则执行替换比较模块;
替换比较模块,找到Sm、Sn指向段内方向的相邻的两个后缀,将Sm、Sn替换为这两个后缀,再与Si进行大小比较,如果Si<Sn或者Si>Sm,则执行记录位置模块;如果Sn<Si<Sm,则执行比较模块;
记录位置模块,结束双向搜索,记录Si位置,如果Si<Sn,则Si的位置在Sn邻近的低地址,Si>Sm,则Si的位置在Sm邻近的高地址,其中所述段头段尾分别是段里面的最小后缀和最大后缀;
第二双向搜索模块,在所述后缀链表中进行双向搜索,搜索到离所述后缀最近的在所述后缀链表中存在的段,根据所述段获得所述后缀在所述后缀链表中的位置,其中所述段是以相同元素开头的后缀按从小到大顺序组成的序列,然后执行后缀排序模块;
插入后缀模块,将所述后缀插入后缀链表:将所述后缀的段的高地址上的所有后缀右移一位,将所述高地址所在的位置空出,然后在所述高地址后缀所在的位置上插入所述后缀,然后执行更新模块;
更新模块,更新所述后缀链表以及段的信息,其中所述后缀链表由后缀段组成,并按照段首元素从小到大顺序排列的,所述段首元素是每个段里面后缀的开头元素。
6.如权利要求5所述的对后缀进行排序的系统,其特征在于,所述第二双向搜索模块包括:
初始化处理模块,令控制参数k自增1,第一次执行初始化处理模块的时候初始化k为0,然后查看appear[i+k]和apprear[i-k],如果appear[i+k]=1或者appear[i-k]=1,结束双向搜索,然后执行位置确定模块;如果appear[i+k]=0并且appear[i-k]=0,则重复执行初始化处理模块,其中appear[i+k]和apprear[i-k]分别代表以ASCⅡ表中数字i+k和i-k代表的元素为段首元素的段是否已经出现过的标识;
位置确定模块,如果appear[i+k]=1,则Si的位置在以元素i+k为段首元素的段的段尾邻近的低地址;如果appear[i-k]=1,则Si的位置在以元素i-k为段首元素的段的段头邻近的高地址。
7.如权利要求5所述的对后缀进行排序的系统,其特征在于,所述更新模块包括:
判断执行模块,如果上一个模块是第一双向搜索模块,则执行信息处理模块;如果上一个模块是第二双向搜索模块,则执行信息修改模块;
信息修改模块,将这个段的存在信息改为已经存在,令appear[i]=1,同时把max[i]的值min[i]都置为Si在后缀链表中的地址;
信息处理模块,更新相应段的max[i]以及min[i]信息,并将段头段尾中存放的地址加1,其中所述相应段指的是段首元素大于或者等于后缀Si的开头元素的段,min[i]记录以元素i为段首元素的段尾对应的后缀在后缀链表中的地址,max[i]记录以元素i为段首元素的段头对应的后缀在后缀链表中的地址。
8.如权利要求5所述的对后缀进行排序的系统,其特征在于,所述后缀链表里的后缀都是成段出现的,而且每一段的段首元素是按字典序从小到大排列的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310033687.4A CN103117748B (zh) | 2013-01-29 | 2013-01-29 | 一种bwt实现方法中对后缀进行排序的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310033687.4A CN103117748B (zh) | 2013-01-29 | 2013-01-29 | 一种bwt实现方法中对后缀进行排序的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103117748A CN103117748A (zh) | 2013-05-22 |
CN103117748B true CN103117748B (zh) | 2016-03-16 |
Family
ID=48416035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310033687.4A Active CN103117748B (zh) | 2013-01-29 | 2013-01-29 | 一种bwt实现方法中对后缀进行排序的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103117748B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104284189B (zh) * | 2014-10-23 | 2017-06-16 | 东南大学 | 一种改进的bwt数据压缩方法及其硬件实现系统 |
CN104899476A (zh) * | 2015-06-15 | 2015-09-09 | 中国人民解放军国防科学技术大学 | 一种对多序列bwt索引构建进行并行加速的方法 |
CN105005464B (zh) * | 2015-07-02 | 2017-10-10 | 东南大学 | 一种Burrows Wheeler变换硬件处理装置 |
CN109040081B (zh) * | 2018-08-10 | 2020-08-04 | 哈尔滨工业大学(威海) | 一种基于bwt的协议字段逆向分析系统及方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101000605A (zh) * | 2006-01-09 | 2007-07-18 | 中国科学院自动化研究所 | 一种过程工业历史数据智能两级压缩方法 |
-
2013
- 2013-01-29 CN CN201310033687.4A patent/CN103117748B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101000605A (zh) * | 2006-01-09 | 2007-07-18 | 中国科学院自动化研究所 | 一种过程工业历史数据智能两级压缩方法 |
Non-Patent Citations (2)
Title |
---|
Antisequential Suffix Sorting for BWT-Based Data Compression;Droor Baron 等;《IEEE TRANSACTIONS ON COMPUTERS》;20050430;第54卷(第四期);388-389 * |
Data Compression in Hardware - The Burrows-Wheeler Approach;Arming S 等;《Design & Diagnostics of Electronic Circuits & Systerms IEE International Symp》;20101231;60-65 * |
Also Published As
Publication number | Publication date |
---|---|
CN103117748A (zh) | 2013-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107608750B (zh) | 用于型式辨识的装置 | |
CN103117748B (zh) | 一种bwt实现方法中对后缀进行排序的方法及系统 | |
CN103324632B (zh) | 一种基于协同学习的概念识别方法及装置 | |
US10277246B2 (en) | Program counter compression method and hardware circuit thereof | |
CN107704728A (zh) | 一种基因序列比对的云计算加速方法 | |
CN105791828A (zh) | 二进制算术编码器及其编码方法 | |
CN110795042A (zh) | 一种全闪存储系统元数据写缓存刷盘方法及相关组件 | |
CN109672449B (zh) | 一种基于fpga快速实现lz77压缩的装置及方法 | |
CN102207935A (zh) | 用于创建索引的方法和系统 | |
US20090248691A1 (en) | Interacting methods of data summarization | |
CN112860264B (zh) | 一种抽象语法树重构方法及装置 | |
CN106802787A (zh) | 基于GPU排序的MapReduce优化方法 | |
CN114489518B (zh) | 测序数据质量控制方法及系统 | |
CN115577149A (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN115982436A (zh) | 一种流数据的高效检索、压缩系统及压缩方法 | |
CN110377601B (zh) | 一种基于B树数据结构的MapReduce计算过程优化方法 | |
CN104750846A (zh) | 一种子串查找方法及装置 | |
CN109343117B (zh) | 双缓存双线程地震数据显示方法 | |
CN106980685A (zh) | 数据处理方法及数据处理装置 | |
CN112328630A (zh) | 数据查询方法、装置、设备及存储介质 | |
CN110647988A (zh) | 一种ssd目标检测卷积神经网络的加速计算方法 | |
CN108153838B (zh) | 一种MySQL数据库中间件预处理方法 | |
CN113900622B (zh) | 一种基于fpga的数据信息快速排序方法、系统、设备及存储介质 | |
CN112925564B (zh) | 一种源代码的冗余导入类清理方法及装置 | |
CN103593403A (zh) | 一种流程表中业务数据关联方法及系统 |
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 |