一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

序列查找方法、装置、设备及介质与流程

2022-02-25 21:53:59 来源:中国专利 TAG:


1.本技术涉及计算技术领域,尤其涉及一种序列查找方法、装置、设备以及计算机可读存储介质。


背景技术:

2.序列是指具有顺序关系的多个字符形成的字符串。基于组成序列的字符的类型差异,序列可以分为数字序列、字母序列、汉字序列以及由多种类型字符组成的混合序列。在一些示例中,数字序列可以包括电话号码、银行卡号等等,字母序列可以包括基因序列(通常包括字母a、c、g、t,用于表征不同类型碱基)等等。
3.在许多场景中,需要在一个给定的参考序列中查找是否存在目标序列。以基因测序为例,通常需要在参考基因组(为了便于描述,可以称之为reference)中查找对若干样本进行检测得到的目标序列(为了便于描述,可以称之为read),得到该目标序列或者目标序列的最大精确匹配在参考基因组中的位置。
4.目前,业界主要采用bw变换以及全文索引(burrows wheeler transform-full text index in minute space,bwt-fm)算法进行查找。具体地,在数据准备阶段,参考基因组经过bw变换输出索引bwt(排序后的循环字符串的末尾字符组成的字符串),以及后缀数组(suffix array,sa)。其中,根据索引bwt还可以确定二维数组(occurrence,occ)。在查询阶段,通过访问occ可以查找目标序列。
5.然而,上述方法查找效率较低,查找性能下降。业界亟需提供一种高效的序列查找方法。


技术实现要素:

6.本技术提供了一种序列查找方法,该方法将待查找的目标序列分段,然后基于预先构建的加速库加速查找分段所得的子序列,避免逐个查找目标序列的字符,提高了查找效率。本技术还提供了上述方法对应的装置、设备、计算机可读存储介质以及计算机程序产品。
7.第一方面,本技术提供了一种序列查找方法。该方法可以由任意具有数据处理能力的处理设备执行。处理设备可以从目标序列中确定至少一个长度为设定长度值的子序列,该子序列以所述目标序列中的一个字符为起点,然后处理设备在专用于加速查找设定长度值的序列的加速库中查找所述子序列,得到所述子序列或者所述子序列以所述一个字符为起点的最大精确匹配在参考序列中的位置。
8.其中,该方法将目标序列按照设定长度值分段,基于预先构建的加速库加速查找分段所得的子序列,避免逐个查找目标序列的字符,提高了查找效率,从而提升了查找性能。
9.在一些可能的实现方式中,所述加速库包括至少一个信息结构体,所述信息结构体用于指示样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的范围。如
此,处理设备可以根据加速库中的信息结构体指示的信息,直接获得子序列或子序列以第一个字符为起点的最大精确匹配的范围,提高了查找效率。
10.在一些可能的实现方式中,所述信息结构体包括存在字段和长度字段中的至少一个字段以及范围字段。其中,所述存在字段用于表征一个样本序列是否存在于所述参考序列中,所述范围字段用于表征所述样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的范围,所述长度字段用于表征所述样本序列或者所述样本序列的最大精确匹配的长度。
11.在一些实施例中,信息结构体可以包括存在字段和范围字段。在另一些实施例中,信息结构体可以包括范围字段和长度字段。当然,信息结构体也可以包括存在字段、范围字段和长度字段。
12.如此,处理设备可以根据信息结构体中的存在字段和长度字段中的至少一个以及范围字段获得子序列或子序列以第一个字符为起点的最大精确匹配的范围,如此无需逐个比对字符,提高了查找效率。
13.在一些可能的实现方式中,加速库中样本序列的信息结构体可以根据序列与存储地址的映射关系存储在相应的存储地址中。如此,在查找子序列时,处理设备可以根据序列与存储地址的映射关系确定所述子序列对应的存储地址,然后处理设备可以根据所述存储地址访问所述加速库,得到所述子序列或者所述子序列以所述一个字符为起点的最大精确匹配在参考序列中的位置。
14.如此,在查找目标序列时,针对子序列这一部分,处理设备仅通过访问一次内存即可获得查找结果,减少了访问内存的次数,提高了查找效率,提升了查找性能。
15.在一些可能的实现方式中,所述加速库包括位于内存的第一加速库,所述设定长度值为第一长度值。其中,内存也被称为内存储器,其作用是用于暂时存放处理器中的运算数据,以及与磁盘等外存(也称作外部存储器)交换数据。
16.其中,第一加速库位于内存,处理设备无需将第一加速库加载至内存,节省了加载第一加速库的时间,提高了查找效率。
17.在一些可能的实现方式中,所述第一长度值根据所述内存的大小确定。第一加速库位于内存,因此,第一加速库中样本序列的信息结构体占用的存储空间应当不大于内存的存储空间。即第一长度值应当满足如下公式:
[0018][0019]
其中,p表示内存的大小。m表示目标序列中每个字符的取值空间包括的、可能的取值的数量,例如在基因测序场景中,m可以为4。w表示每个信息结构体占用的空间大小,例如存在字段占用1个字节,范围字段占用8 8个字节,长度字段占用8个字节,则w取值为25。
[0020]
如此,可以避免内存被用尽,导致序列查找受到影响,保障查找性能。
[0021]
在一些可能的实现方式中,所述加速库包括位于外存的第二加速库,所述设定长度值为第二长度值。其中,外存是指存储设备中除内存以外的设备。在一些实施例中,外存包括磁盘、固态驱动器(solid state drive,ssd)、闪存存储器等中的任意一种或多种。
[0022]
由于外存的存储空间一般大于内存的存储空间,因此,在第二加速库中可以查找长度更长的子序列,如此可以提高效率,提升查找性能。
[0023]
在一些可能的实现方式中,所述第二长度值根据所述外存的大小确定。第二长度
值可以满足如下公式:
[0024]mlen

*w≤q
[0025]
其中,q表示外存的大小,例如磁盘的大小。m表示目标序列中每个字符的取值空间包括的、可能的取值的数量。w表示每个信息结构体占用的空间大小。
[0026]
处理设备随机访问外存一次的时间是随机访问内存一次的时间的δ倍,即外存内存访问耗时比为δ,可以设置第三长度值lene,其满足如下公式:
[0027][0028]
当子序列长度为lene时,访问内存查找子序列和访问外存查找子序列所耗费的时间相当。而针对长度为lenc的子序列,访问内存的时间可以忽略。因此,子序列长度为lenc lene时,访问内存查找子序列和访问外存查找子序列所耗费的时间相当。为此,处理设备可以设置len

大于lenc lene。具体地,len

可以设置为:
[0029]
len

=lenc lene lenf[0030]
其中,lenf为第四长度值,第二长度值等于第一长度值、第三长度值以及第四长度值之和。具体地,处理设备可以将上述公式迭代至第二长度值应当满足的公式,从而求解得到lenf。
[0031]
当最大精确匹配长度小于lenc lene lenf时,可以大幅缩短查询时间,提高查询效率,提升查询性能。
[0032]
在一些可能的实现方式中,所述第二信息结构体还包括比较字段。所述比较字段用于表征最大精确匹配的长度值是否大于预设长度阈值。所述预设长度阈值根据内存的大小以及外存内存访问耗时比确定。例如预设长度阈值可以为lenc lene。如此,处理设备可以根据比较字段快速获得最大精确匹配的长度与预设长度阈值的大小,该比较结果可以为后续查找过程提供帮助。
[0033]
在一些可能的实现方式中,处理设备可以结合内存断点查找法和外存断点查找法进行序列查找,如此可以综合内存断点查找法和外存断点查找法的优势,进一步提升查找效率。
[0034]
具体地,处理设备可以从目标序列中确定至少一个第一子序列和至少一个第二子序列,至少一个第一子序列和至少一个第二子序列以目标序列中的一个字符为起点,该第二子序列长于所述第一子序列,处理设备可以在位于内存的第一加速库中查找所述第一子序列,以及在位于内存的第二加速库中查找所述第二子序列。
[0035]
该方法将内存断点查找法、外存断点查找法结合,可以查询任意长度的最大精确匹配,不局限于有限长度内的最大精确匹配。而且,该方法可以实现多个分支异步并行查找,提高了查找效率。
[0036]
在一些可能的实现方式中,当在所述第二加速库中查找到所述第二子序列以所述一个字符为起点的最大精确匹配时,停止在所述第一加速库中查找所述第一子序列,当在所述第一加速库中查找到所述第一子序列以所述一个字符为起点的最大精确匹配时,停止在所述第二加速库中查找所述第二子序列。
[0037]
在该实现方式中,当一个分支先查找到结果,与该分支并行的分支可以停止查找,如此可以避免资源浪费。
[0038]
在一些可能的实现方式中,所述第一长度值根据所述内存的大小确定,或者根据外存内存访问耗时比确定。在一些实施例中,第一长度值可以为lenc。在另一些实施例中,第一长度值可以为lene。如此,即使最大精确匹配的长度较小,也可以通过内存断点查找这一分支,快速查找子序列,提升查找效率。
[0039]
在一些可能的实现方式中,处理设备可以在所述参考序列中查找样本序列,获得查找结果,所述查找结果用于表征所述样本序列或所述样本序列以第一个字符为起点的最大精确匹配在所述参考序列中的位置,然后根据所述查找结果构建所述加速库。如此,可以为后续序列查找提供帮助,提高查找效率。
[0040]
在一些可能的实现方式中,处理设备可以根据所述参考序列的索引bwt、后缀数组sa和二维数组occ,通过bwt算法在所述参考序列中查找样本序列,获得查找结果。该查找结果用于表征所述样本序列是否存在于所述参考序列中,以及所述样本序列或所述样本序列以第一个字符为起点的最大精确匹配在所述二维数组的范围,以及所述样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的长度值。
[0041]
其中,处理设备可以通过上述方式加速查找样本序列,加快加速库构建过程,提高加速库构建的效率。
[0042]
在一些可能的实现方式中,所述序列为基因序列。由此,可以在基因测序场景中快速定位基因序列在基因组的位置,提高基因序列查找效率。
[0043]
第二方面,本技术提供了一种序列查找装置。所述装置包括:
[0044]
确定模块,用于从目标序列中确定至少一个子序列,所述子序列以所述目标序列中的一个字符为起点;
[0045]
查找模块,用于在加速库中查找所述子序列,得到所述子序列或者所述子序列以所述一个字符为起点的最大精确匹配在参考序列中的位置,所述加速库用于加速查找设定长度值的序列,所述子序列的长度为所述设定长度值。
[0046]
在一些可能的实现方式中,所述加速库包括至少一个信息结构体,所述信息结构体用于指示样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的范围。
[0047]
在一些可能的实现方式中,所述信息结构体包括存在字段和长度字段中的至少一个字段以及范围字段,所述存在字段用于表征一个样本序列是否存在于所述参考序列中,所述范围字段用于表征所述样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的范围,所述长度字段用于表征所述样本序列或者所述样本序列的最大精确匹配的长度。
[0048]
在一些可能的实现方式中,所述查找模块具体用于:
[0049]
根据序列与存储地址的映射关系确定所述子序列对应的存储地址;
[0050]
根据所述存储地址访问所述加速库,得到所述子序列或者所述子序列以所述一个字符为起点的最大精确匹配在参考序列中的位置。
[0051]
在一些可能的实现方式中,所述加速库包括位于内存的第一加速库,所述设定长度值为第一长度值。
[0052]
在一些可能的实现方式中,所述第一长度值根据所述内存的大小确定。
[0053]
在一些可能的实现方式中,所述加速库包括位于外存的第二加速库,所述设定长度值为第二长度值。
[0054]
在一些可能的实现方式中,所述第二长度值根据所述外存的大小确定。
[0055]
在一些可能的实现方式中,所述第二信息结构体还包括比较字段,所述比较字段用于表征最大精确匹配的长度值是否大于预设长度阈值,所述预设长度阈值根据内存的大小以及外存内存访问耗时比确定。
[0056]
在一些可能的实现方式中,所述确定模块具体用于:
[0057]
从目标序列中确定至少一个第一子序列和至少一个第二子序列,所述至少一个第一子序列和所述至少一个第二子序列以所述目标序列中的一个字符为起点,所述第二子序列长于所述第一子序列;
[0058]
所述加速库包括位于内存的第一加速库和位于外存的第二加速库;
[0059]
所述查找模块具体用于:
[0060]
在所述第一加速库中查找所述第一子序列,以及在所述第二加速库中查找所述第二子序列。
[0061]
在一些可能的实现方式中,所述查找模块具体用于:
[0062]
当在所述第二加速库中查找到所述第二子序列以所述一个字符为起点的最大精确匹配时,停止在所述第一加速库中查找所述第一子序列,当在所述第一加速库中查找到所述第一子序列以所述一个字符为起点的最大精确匹配时,停止在所述第二加速库中查找所述第二子序列。
[0063]
在一些可能的实现方式中,所述第一长度值根据所述内存的大小确定,或者根据外存内存访问耗时比确定。
[0064]
在一些可能的实现方式中,所述装置还包括:
[0065]
构建模块,用于在所述参考序列中查找样本序列,获得查找结果,所述查找结果用于表征所述样本序列或所述样本序列以第一个字符为起点的最大精确匹配在所述参考序列中的位置,根据所述查找结果构建所述加速库。
[0066]
在一些可能的实现方式中,所述构建模块具体用于:
[0067]
根据所述参考序列的索引bwt、后缀数组sa和二维数组occ,通过bwt算法在所述参考序列中查找样本序列,获得查找结果,所述查找结果用于表征所述样本序列是否存在于所述参考序列中,以及所述样本序列或所述样本序列以第一个字符为起点的最大精确匹配在所述二维数组的范围,以及所述样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的长度值。
[0068]
在一些可能的实现方式中,所述序列为基因序列。
[0069]
第三方面,本技术提供一种计算设备,所述计算设备包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得计算设备执行如第一方面或第一方面的任一种实现方式中的序列查找方法。
[0070]
第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示计算设备执行上述第一方面或第一方面的任一种实现方式所述的序列查找方法。
[0071]
第五方面,本技术提供了一种包含指令的计算机程序产品,当其在计算设备上运行时,使得计算设备执行上述第一方面或第一方面的任一种实现方式所述的序列查找方法。
[0072]
本技术在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
[0073]
为了更清楚地说明本技术实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
[0074]
图1为本技术实施例提供的一种序列查找方法的场景架构图;
[0075]
图2为本技术实施例提供的一种处理设备的结构示意图;
[0076]
图3为本技术实施例提供的一种序列查找方法的流程图;
[0077]
图4为本技术实施例提供的一种序列查找方法的流程图;
[0078]
图5为本技术实施例提供的一种序列查找方法的流程图;
[0079]
图6为本技术实施例提供的一种序列查找装置的结构示意图。
具体实施方式
[0080]
本技术实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
[0081]
首先对本技术实施例中所涉及到的一些技术术语进行介绍。
[0082]
序列是指具有顺序关系的多个字符形成的字符串。基于组成序列的字符的类型差异,序列可以分为数字序列、字母序列、汉字序列以及由多种类型字符组成的混合序列。其中,数字序列可以包括电话号码、银行卡号等等,例如一个数字序列可以为132xxxx2323。字母序列可以包括基因序列,例如gggccaactacc。其中,基因序列中的字母a、c、g、t,用于表征不同类型碱基。
[0083]
序列查找是指在一个长序列中查找一个短序列。其中,该长序列也可以称之为参考序列,短序列可以称之为目标序列。序列查找即是在参考序列中查找目标序列,若目标序列存在于参考序列中,返回目标序列在参考序列中的位置,若目标序列不存在于参考序列中,返回该目标序列在参考序列中的最大精确匹配,具体是以目标序列以指定位置(指定字符)为起点的最大精确匹配。
[0084]
其中,参考序列可以是一个长字符串r,目标序列可以是一个短字符串s,以短字符串s中位置c的字符为起点,在r中精确匹配成功的所有s子串中最长的子串称为s以c为起点的最大精确匹配。为了便于理解,下面结合具体示例对最大精确匹配进行说明。在该示例中,长字符串r为“addsdfyihadsdk”,短字符串s为“dsdfyask”,以短字符串s中位置1的字符d为起点,在r中精确匹配成功的所有子串包括“dsdfy”和“dfy”。其中,最长的子串为“dsdfy”,“dsdfy”即为s以字符d为起点的最大精确匹配。
[0085]
目前,业界主要采用bwt-fm算法进行序列查找。具体地,参考序列经过bw变换后可以输出索引bwt以及后缀数字sa。其中,根据索引bwt还可以生成二维数组occ。在查找目标序列时通常需要多次访问内存(具体是内存中的二维数据occ),如此导致查找效率较低,查找性能下降。
[0086]
有鉴于此,本技术实施例提供了一种高效的序列查找方法。该方法可以由具有数
据处理能力的处理设备执行。该处理设备可以是服务器或者终端,其中,终端包括但不限于台式机、笔记本电脑、平板电脑和智能手机。在一些可能的实现方式中,该处理设备还可以是集群。
[0087]
具体地,处理设备可以从目标序列中确定至少一个子序列,该子序列具体以目标序列中的一个字符为起点。然后,处理设备在预先构建的加速库中查找子序列。其中,加速库用于加速查找设定长度值的序列。子序列的长度为设定长度值,如此,处理设备可以无需逐个比较子序列包括的字符,直接根据加速库查找子序列,得到子序列或者子序列以一个字符为起点的最大精确匹配在参考序列中的位置。
[0088]
该方法通过将待查找的目标序列分段,然后基于预先构建的加速库加速查找分段所得的子序列,避免逐个查找目标序列的字符,提高了查找效率。进一步地,该方法还可以根据序列与存储地址的映射关系,直接访问子序列对应的存储地址,获得子序列或者子序列以一个字符为起点的最大精确匹配在参考序列中的位置,减少了处理设备访问内存的次数,尤其是最大精确匹配的长度小于子序列的长度时,仅需随机访问一次内存,如此可以提高查找效率,降低查找成本,提升查找性能。
[0089]
其中,加速库可以包括至少一个信息结构体。信息结构体用于指示样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的范围。在一些实现方式中,信息结构体包括存在字段和范围字段。存在字段用于表征与子序列等长的一个样本序列是否存在于参考序列中,范围字段用于表征(子序列存在于参考序列中时)子序列的范围,或者(子序列不存在于参考序列中时)子序列以上述一个字符为起点的最大精确匹配的范围。在另一些实现方式中,信息结构体包括范围字段和长度字段。长度字段用于表征子序列的长度,或者子序列以一个字符为起点的最大精确匹配的长度。进一步地,信息结构体包括上述存在字段、范围字段和长度字段。如此,处理设备可以得到所述子序列或者所述子序列以所述一个字符为起点的最大精确匹配在参考序列中的位置。
[0090]
如此,处理设备可以基于该加速库直接确定子序列是否存在于参考序列,若是,则返回子序列在参考序列中的位置以及子序列的长度,若否,则返回子序列以该子序列的第一个字符为起点的最大精确匹配的长度。
[0091]
为了便于理解本技术的技术方案,下面结合一基因测序场景对序列查找方法进行介绍。
[0092]
参见图1所示的序列查找方法的应用场景示意图,该场景中包括检测设备100、处理设备200和用户终端300。检测设备100和用户终端300建立有通信连接,处理设备200和用户终端300建立有通信连接。其中,图1以处理设备200为服务器进行示例说明,在其他实现方式中,处理设备200可以为终端或者集群等设备。
[0093]
具体地,检测设备100用于对血液、唾液等生物组织进行检测,得到目标序列。检测设备100可以向用户终端300发送目标序列,用户终端300可以将该目标序列提交至处理设备200。处理设备200接收到目标序列时,从目标序列中确定至少一个子序列,该子序列以目标序列的一个字符为起点,然后在加速库中查找该子序列,得到子序列或者子序列以一个字符为起点的最大精确匹配在参考基因组(参考序列)中的位置。
[0094]
如此,在查找目标序列时,针对子序列这一部分,处理设备200仅通过访问一次内存即可获得查找结果,减少了访问内存的次数,提高了查找效率,提升了查找性能。
[0095]
以上对序列查找方法的系统架构进行介绍。接下来,将从硬件实体化角度对系统中的处理设备200进行介绍。
[0096]
图2示出了处理设备200的结构示意图。应理解,图2仅仅示出了上述处理设备200中的部分硬件结构和部分软件模块,具体实现时,处理设备200还可以包括更多的硬件结构,如指示灯、蜂鸣器等等,以及更多的软件模块,如各种应用程序等。
[0097]
如图2所示,处理设备200包括总线201、处理器202、通信接口203和存储器204。处理器202、存储器204和通信接口203之间通过总线201通信。
[0098]
总线201可以是外设部件互连标准(peripheral component interconnect,pci)总线、快捷外设部件互连标准(peripheral component interconnect express,pcie)或扩展工业标准结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图2中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0099]
处理器202可以为中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、微处理器(micro processor,mp)或者数字信号处理器(digital signal processor,dsp)等处理器中的任意一种或多种。
[0100]
通信接口203用于与外部通信,例如接收用户终端300发送的目标序列,向用户终端300返回子序列在参考序列中的位置或者子序列以一个字符为起点的最大精确匹配在参考序列中的位置等等。
[0101]
存储器204可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,ram)。存储器204还可以包括非易失性存储器(non-volatile memory),也例如只读存储器(read-only memory,rom),快闪存储器,硬盘驱动器(hard disk drive,hdd)或固态硬盘驱动器(solid state drive,ssd)。其中,ram、rom称为内存,hdd、ssd称为外存。
[0102]
存储器204中存储有程序或指令,例如实现本技术实施例提供的序列查找方法所需的程序或指令。处理器202执行该程序或指令以执行前述序列查找方法。
[0103]
为了使得本技术的技术方案更加清楚、易于理解,下面结合附图对本技术实施例提供的序列查找方法进行详细介绍。
[0104]
参见图3所示的序列查找方法的流程图,该方法包括:
[0105]
s302:处理设备200从目标序列中确定至少一个子序列。
[0106]
所述子序列以所述目标序列中的一个字符为起点。例如,处理设备200可以目标序列中一组间隔预设长度值的字符为起点,确定一组子序列。这一组子序列包括至少一个子序列。当这一组子序列包括多个子序列时,多个子序列的长度相等。
[0107]
考虑到目标序列中可能存在特殊字符的情况,该特殊字符是指组成序列的正常字符之外的字符,例如基因测序场景中,检测设备100无法确定一个碱基的类型时,可以将该碱基标记为n(具体是a、c、g、t之外的字符)。处理设备200可以先确定目标序列中的一个字符为起点,然后以与该起点间隔预设长度值的字符为终点,接着确定起点和终点之间是否包括特殊字符。
[0108]
当起点和终点之间包括特殊字符时,则将起点更新为该特殊字符之后的一个字符,重新执行上述步骤,即重新确定终点,以及确定起点和终点之间是否包括特殊字符,直
至起点和终点之间不包括特殊字符。如此处理设备200可以根据该起点和终点之间的字符确定一个子序列。进一步地,处理设备200可以更新起点,再次执行上述步骤,确定下一个子序列。
[0109]
s304:处理设备200在加速库中查找所述子序列,得到子序列或者子序列以上述一个字符为起点的最大精确匹配在参考序列中的位置。
[0110]
其中,加速库用于加速查找设定长度值的序列。子序列的长度为所述设定长度值,如此,处理设备200可以直接根据加速库查找子序列,得到子序列或者子序列以该子序列的第一个字符为起点的最大精确匹配在参考序列中的位置。
[0111]
在一些可能的实现方式中,所述加速库包括至少一个信息结构体,所述信息结构体包括存在字段、范围字段和长度字段。其中,存在字段用于标识一个与子序列等长的样本序列是否在参考序列中,范围字段用于标识样本序列或样本序列以该样本序列的第一个字符为起点的最大精确匹配的范围,长度字段用于标识样本序列或样本序列以该样本序列的第一个字符为起点的最大精确匹配的长度。
[0112]
存在字段的值可以为布尔(bool)值。该布尔值可以为true或者false。在一些实施例中,字段值也可以为数值1、0,用于表征true或者false。范围标识具体可以包括起始标识和结束标识,起始标识和结束标识可以通过start和end表征。长度字段可以通过length表征。
[0113]
样本序列可以对序列中的每一个字符在取值空间中随机采样生成。以基因测序场景为例,每一个字符的取值空间为{a、c、g、t}。假设样本序列长度为4,则样本序列可以包括aact、gatt、cagg等等。
[0114]
处理设备200可以针对至少一个样本序列,在参考序列中查找该样本序列,获得查找结果。该查找结果用于表征所述样本序列或所述样本序列以第一个字符为起点的最大精确匹配的位置。然后处理设备200可以根据上述查找结果构建加速库,以便后续查找子序列时,能够直接返回子序列或子序列以第一个字符为起点的最大精确匹配在参考序列中的位置。
[0115]
在一些可能的实现方式中,处理设备200可以通过哈希(hash)查找法或者bwt-fm法,在参考序列中查找样本序列,获得查找结果。为了便于理解,下面以基因测序场景中通过bwt-fm法查找样本序列进行示例说明。
[0116]
具体地,处理设备200根据参考序列的索引bwt、后缀数组sa和二维数组occ,通过bwt算法在所述参考序列中查找样本序列,获得查找结果。该查找结果用于表征所述样本序列是否存在于所述参考序列中,以及所述样本序列或所述样本序列以第一个字符为起点的最大精确匹配在所述二维数组occ的范围(该范围可以用于确定在参考序列中的位置),以及所述样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的长度值。如此,处理设备可以根据查找结果获得针对至少一个样本序列的信息结构体,基于上述信息结构体可以构建加速库。
[0117]
在一些可能的实现方式中,处理设备200还可以建立序列与存储地址的映射关系。例如,基因序列可以按照四进制进行计数,其中,碱基acgt分别表征0、1、2、3,则aact代表四进制数值0013,该四进制数值可以被换算为0 0 1*4 3=7。假设一个基因序列对应的信息结构体占用k个字节,则0-6这7个数值占用字节为7*k,acgt的存储地址(具体是起始地址)
可以为0x00 7*k。处理设备200可以根据该映射关系将序列的信息结构体存储在对应存储地址。
[0118]
如此,处理设备200在查找子序列时,可以根据序列与存储地址的对应关系确定子序列对应的存储地址,然后根据所述存储地址访问所述加速库,得到所述子序列或者所述子序列以所述一个字符为起点的最大精确匹配在参考序列中的位置。由此可以进一步提高序列查找效率。
[0119]
进一步地,加速库可以存储在内存和/或外存中,以便查找序列时使用。其中,内存的大小通常小于外存,因此,存储在内存中的加速库的规模一般小于存储在外存中的加速库。为了便于描述,本技术实施例将存储在内存中的加速库称之为第一加速库,存储在外存中的加速库称之为第二加速库。
[0120]
在一些可能的实现方式中,处理设备200可以通过第一加速库查找子序列,以提高查找效率。具体地,第一加速库包括至少一个第一信息结构体。每个第一信息结构体的存在字段用于表征一个长度为所述第一长度值的样本序列是否存在于参考序列中。范围字段用于表征所述样本序列或者所述样本序列以所述样本序列的第一个字符为起点的最大精确匹配的范围。长度字段用于表征所述样本序列或者所述样本序列以所述样本序列的第一个字符为起点的最大精确匹配的长度值。
[0121]
处理设备200从第一加速库中确定与子序列匹配的样本序列,获得该样本序列的第一信息结构体,根据该第一信息结构体中的存在字段确定该子序列是否存在于参考序列中。若存在字段的值为true或者1,则表明该子序列存在于参考序列中。处理设备200根据范围字段的值确定子序列在参考序列的范围,以及根据长度字段的值确定子序列的长度。若存在字段的值为false或者0,则表明该子序列不存在于参考序列中。处理设备200根据范围字段的值确定子序列以该子序列的第一个字符为起点的最大精确匹配在参考序列的范围,以及根据长度字段的值确定该子序列以其第一个字符为起点的最大精确匹配的长度。
[0122]
上述采用第一加速库查找序列的方法也可以称之为内存断点查找法。采用内存断点查找法时,子序列的长度为第一长度值,该第一长度值可以记作lenc,由于子序列的长度与样本序列的长度相等,因此,lenc满足如下公式:
[0123][0124]
其中,p表示内存的大小。m表示目标序列中每个字符的取值空间包括的、可能的取值的数量,例如在基因测序场景中,m可以为4。w表示每个信息结构体占用的空间大小,例如存在字段占用1个字节,范围字段占用8 8个字节,长度字段占用8个字节,则w取值为25。
[0125]
基于此,第一长度值可以通过内存的大小确定。具体地,处理设备200将内存的大小代入上述公式(1),然后求解lenc。
[0126]
在内存断点查找法中,针对参考序列r和目标序列s,处理设备200从目标序列中确定以c为起点,长度为lenc的子序列s[c:c lenc],然后在第一加速库中查找该s[c:c lenc],如果s[c:c lenc]在r中,返回s[c:c lenc]在r中的位置,如果s[c:c lenc]不在r中,返回s中以c为起点在r中的最大精确匹配以及该精确匹配在r中的位置。
[0127]
当处理设备200采用内存断点查找法时,若最大精确匹配长度小于lenc,则查询仅需随机访问内存仅1次,查询成本可以忽略不计,极大地提高了查询效率,提升了查询性能。
[0128]
在另一些可能的实现方式中,处理设备200可以通过第二加速库查找序列,以提高
查找效率。具体地,第二加速库包括至少一个第二信息结构体。每个第二信息结构体的存在字段用于表征一个长度为所述第二长度值的样本序列是否存在于参考序列中。范围字段用于表征所述样本序列或者所述样本序列以所述样本序列的第一个字符为起点的最大精确匹配的范围。长度字段用于表征所述样本序列或者所述样本序列以所述样本序列的第一个字符为起点的最大精确匹配的长度值。
[0129]
处理设备200从第二加速库中确定与子序列匹配的样本序列,获得该样本序列的第二信息结构体,根据该第二信息结构体中的存在字段确定该子序列是否存在于参考序列中。若存在字段的值为true或者1,则表明该子序列存在于参考序列中。处理设备200根据范围字段的值确定子序列在参考序列的范围,以及根据长度字段的值确定子序列的长度。若存在字段的值为false或者0,则表明该子序列不存在于参考序列中。处理设备200根据范围字段的值确定子序列以该子序列的第一个字符为起点的最大精确匹配在参考序列的范围,以及根据长度字段的值确定该子序列以其第一个字符为起点的最大精确匹配的长度。
[0130]
上述采用第二加速库查找序列的方法也可以称之为外存断点查找法。其中,第二加速库存储在外存的磁盘中时,则可以称之为磁盘断点查找法。采用外存断点查找法时,子序列的长度为第二长度值,该第二长度值可以大于上述第一长度值。为了便于描述,该第二长度值可以记作len

,由于子序列的长度与样本序列的长度相等,因此,len

满足如下公式:
[0131]mlen

*w≤q
ꢀꢀ
(2)
[0132]
其中,q表示外存的大小,例如磁盘的大小。m表示目标序列中每个字符的取值空间包括的、可能的取值的数量。w表示每个信息结构体占用的空间大小。
[0133]
基于此,第二长度值的大小可以根据外存(例如磁盘)的大小而确定。具体地,处理设备200将外存的大小代入上述公式(2),然后求解len


[0134]
其中,处理设备200随机访问外存一次的时间是随机访问内存一次的时间的δ倍,即外存内存访问耗时比为δ,可以设置第三长度值lene,其满足如下公式:
[0135][0136]
当子序列长度为lene时,访问内存查找子序列和访问外存查找子序列所耗费的时间相当。而针对长度为lenc的子序列,访问内存的时间可以忽略。因此,子序列长度为lenc lene时,访问内存查找子序列和访问外存查找子序列所耗费的时间相当。为此,处理设备200可以设置len

大于lenc lene。具体地,len

可以设置为:
[0137]
len

=lenc lene lenfꢀꢀ
(4)
[0138]
其中,lenf为第四长度值,第二长度值等于第一长度值、第三长度值以及第四长度值之和。具体地,处理设备200可以将上述公式(4)代入上述公式(2),从而求解得到lenf。
[0139]
在外存断点查找法中,针对参考序列r和目标序列s,处理设备200从目标序列s中确定以c为起点,长度为lenc lene lenf的子序列s[c:c lenc lene lenf],然后在第一加速库中查找该s[c:c lenc lene lenf],如果s[c:c lenc lene lenf]在r中,返回s[c:c lenc lene lenf]在r中的位置,如果s[c:c lenc lene lenf]不在r中,返回s中以c为起点在r中的最大精确匹配以及该精确匹配在r中的位置。
[0140]
需要说明的是,第二信息结构体还可以包括比较字段。所述比较字段用于表征最
大精确匹配的长度值是否大于预设长度阈值。其中,预设长度阈值根据内存的大小以及外存内存访问耗时比确定。在一个示例中预设长度阈值可以为lenc lene。
[0141]
基于此,第一信息结构体可以包括b1、start1、end1和length1,第二信息结构体可以包括b2、b3、start2、end2和length2。其中,b1、b2分别表示第一信息结构体、第二信息结构体中存在字段的值,b3表示第二信息结构体中比较字段的值,start1、end1以及start2、end2分别表示第一信息结构体、第二信息结构体中范围字段的值,length1、length2分别表示第一信息结构体、第二信息结构体中长度字段的值。
[0142]
以上对内存断点查找法和外存断点查找法进行了详细说明,在一些可能的实现方式中,处理设备200还可以将内存断点查找法和外存断点查找法组合,以发挥各个断点查找法的优势,进一步提高查找效率。进一步地,处理设备200还可以将内存断点查找法、外存断点查找法与bwt-fm法结合,用于查找序列,提高查找效率。
[0143]
参见图4所示的序列查找方法的流程图,该方法包括:
[0144]
s402:处理设备200获取目标序列。
[0145]
具体地,处理设备200可以接收用户终端300发送的目标序列,以便在参考序列中查找该目标序列,确定目标序列或者目标序列的最大精确匹配在参考序列中的位置。在一些可能的实现方式中,处理设备200也可以直接接收检测设备100发送的目标序列,以便在参考序列中查找目标序列。
[0146]
s404:处理设备200从目标序列中确定至少一个第一子序列。
[0147]
第一子序列以目标序列中的一个字符为起点。第一子序列的长度可以为lenc。针对目标序列s,处理设备200从目标序列中确定的第一子序列可以为s[c:c lenc]。需要说明的是,当s[c:c lenc]中包括特殊字符时,处理设备200可以跳过该特殊字符,以特殊字符之后的位置为c,重新确定第一子序列s[c:c lenc]。
[0148]
s406:处理设备200从目标序列中确定至少一个第二子序列。
[0149]
第二子序列以目标序列中的一个字符为起点。其中,第二子序列的起点可以和第一子序列的起点相同。第二子序列的长度可以为lenc lene lenf。针对目标序列s,处理设备200从目标序列中确定的第二子序列可以为s[c:c lenc lene lenf]。需要说明的是,当s[c:c lenc lene lenf]中包括特殊字符时,处理设备200可以跳过该特殊字符,以特殊字符之后的位置为c,重新确定第一子序列s[c:c lenc lene lenf]。
[0150]
s408:处理设备200在第一加速库中查找第一子序列。当第一子序列在参考序列中时,处理设备200执行s410。当第一子序列不在参考序列中时,处理设备200执行s414。
[0151]
s410:处理设备200获得第一子序列在参考序列中的位置。
[0152]
处理设备200可以根据第一加速库中与第一子序列匹配的样本序列的第一信息结构体,具体是该第一信息结构体的范围字段,获得第一子序列在二维数组occ中的范围。然后,处理设备200可以基于该范围确定第一子序列在参考序列中的位置。
[0153]
s412:处理设备200使用bwt-fm法查找第一子序列之后长度为第三长度值的字符。
[0154]
具体地,处理设备200使用bwt-fm算法顺序查找s[c:c lenc]以后的lene长度,若在c lenc与c lenc lene位置之间查找到最大精确匹配,则返回目标序列以c为起始位置(即以子序列的第一个字符为起点)的最大精确匹配以及该最大精确匹配在参考序列r中的位置。该最大精确匹配的长度大于或等于lenc,且小于或等于lenc lene。
[0155]
s414:处理设备200获得第一子序列以第一个字符为起点的最大精确匹配,以及最大精确匹配在参考序列中的位置。
[0156]
其中,s[c:c lenc]不在参考序列中,故s[c:c lenc]以第一个字符为起点的最大精确匹配也是目标序列以c为起始位置的最大精确匹配。处理设备200根据第一加速库中与第一子序列s[c:c lenc]匹配的样本序列的第一信息结构体,具体是第一信息结构体的范围字段,获得第一子序列的最大精确匹配(目标序列以c为起始位置的最大精确匹配)在二维数组occ中的范围。然后,处理设备200基于该范围确定第一子序列在参考序列中的位置。
[0157]
s416:处理设备200在第二加速库中查找第二子序列。当第二子序列在参考序列中时,处理设备200执行s418。当第二子序列不在参考序列中时,处理设备200执行s422。
[0158]
s418:处理设备200获得第二子序列在参考序列中的位置。
[0159]
与s410类似,处理设备200可以根据第二加速库中与第二子序列匹配的样本序列的第二信息结构体,具体是该第二信息结构体的范围字段,获得第二子序列在二维数组occ中的范围。然后,处理设备200可以基于该范围确定第二子序列在参考序列中的位置。
[0160]
s420:处理设备200使用bwt-fm法查找第二子序列之后的字符。
[0161]
具体地,处理设备200使用bwt-fm算法顺序查找s[c:c lenc lene lenf]之后的字符,直至查找到目标序列的最大精确匹配,返回该最大精确匹配以及最大精确匹配在参考序列中的位置。其中,最大精确匹配的长度大于或等于lenc lene lenf。
[0162]
s422:处理设备200获得第二子序列以第一个字符为起点的最大精确匹配以及最大精确匹配在参考序列中的位置。
[0163]
与s414类似,s[c:c lenc lene lenf]不在参考序列中,故s[c:c lenc lene lenf]以第一个字符为起点的最大精确匹配也是目标序列以c为起始位置的最大精确匹配。处理设备200根据第二加速库中与第二子序列s[c:c lenc lene lenf]匹配的样本序列的第二信息结构体,具体是第二信息结构体的范围字段,获得第二子序列的最大精确匹配(目标序列以c为起始位置的最大精确匹配)在二维数组occ中的范围。然后,处理设备200基于该范围确定第二子序列在参考序列中的位置。
[0164]
其中,第二信息结构体中还包括比较字段时,处理设备200还可以获取比较字段的值。比较字段的值为true或1时,表明目标序列以c为起始位置的最大精确匹配的长度大于预设长度阈值,例如大于lenc lene,处理设备200可以返回目标序列s以c为起点在参考序列r中的最大精确匹配以及该最大精确匹配在参考序列r中的位置。比较字段的值为false或0时,表明目标序列以c为起始位置的最大精确匹配的长度小于或等于预设长度阈值,例如,小于或等于lenc lene,处理设备200可以结束当前操作,通过s412返回最大精确匹配以及最大精确匹配在参考序列中的位置。
[0165]
在上述实施例中,s404、s408可以和s406、s416可以并行执行,也可以按照设定的顺序先后执行。当s408和s416并行执行时,如果处理设备200先在所述第二加速库中查找到所述第二子序列以所述一个字符为起点的最大精确匹配(s422先执行完成)时,停止在所述第一加速库中查找所述第一子序列(s408)。类似地,处理设备200先在所述第一加速库中查找到所述第一子序列以所述一个字符为起点的最大精确匹配(s414先执行完成)时,停止在所述第二加速库中查找所述第二子序列(s416)。
[0166]
如果s410、s414、s418、s422中s410先执行完成,则处理设备200继续执行s412。在
执行s412过程中,若s422先执行完成,则停止执行s412,若s422未执行完成,则继续执行s412、s418。如果s410、s414、s418、s422中s418先执行完成,则处理设备200继续执行s420。在执行s410、s414、s418、s422中s422先执行完成,若最大精确匹配的长度大于lenc lene,则可以停止执行s410、s412、s414、s418。通过多个分支并行查找,可以实现以较短的时间获得查找结果。当一个分支先查找到结果,与该分支并行的分支可以停止查找,如此可以避免资源浪费。
[0167]
在执行s412时,如果在lenc和lene之间找到最大精确匹配,则停止执行s422,如果s[c lenc:c lenc lene]也在参考序列中,则继续执行s422,获得目标序列以c为起始位置的最大精确匹配以及该最大精确匹配在参考序列中的位置。
[0168]
在执行s422时,如果最大精确匹配的长度小于或等于lenc lene,则停止执行s422,继续执行s412,获得目标序列以c为起始位置的最大精确匹配以及该最大精确匹配在参考序列中的位置。如果最大精确匹配的长度大于lenc lene,则停止执行s412,通过s422获得目标序列以c为起始位置的最大精确匹配以及该最大精确匹配在参考序列中的位置。
[0169]
在图4所示实施例中,最大精确匹配长度小于lene时,为了保障查找效率,还可以设置内存断点查找法中第一子序列的长度等于lene。其中,lene<lenc。对应地,第一加速库中样本序列的长度也等于lene,如此可以保障查找时间至少不多于bwt-fm法,进而保障了序列查找效率。
[0170]
基于上述内容描述,本技术实施例将内存断点查找法、外存断点查找法以及bwt-fm结合,可以查询任意长度的最大精确匹配,不局限于有限长度内的最大精确匹配。而且,该方法可以实现多个分支异步并行查找,提高了查找效率。
[0171]
与二维数组全部存储在内存进行查找相比,该方法能够大幅提升查找性能。基于最大精确匹配长度不同,查找性能提升幅度存在一定差异,具体如下:
[0172]
(1)当最大精确匹配的长度小于lenc时,查询时间可以忽略;
[0173]
(2)当最大精确匹配的长度小于lenc lene时,随机访存减少了2*lenc次,平均性能至少提升2.5倍;
[0174]
(3)当最大精确匹配的长度在lenc lene与lenc lene lenf时,查询时间是个定值(对应bwt-fm算法查询lenc长度的时间),平均性能至少提升4倍;
[0175]
(4)当精确匹配长度大于lenc lene lenf时,减少了随机访问内存次数约为2*(lenc lenf)次,在基因测序场景平均性能可以提升3倍。
[0176]
下面以基因测序场景对本技术实施例提供的序列查找方法进行详细说明。参见图5所示的序列查找方法的流程图,该方法包括:
[0177]
s501:标记read中特殊字符的位置,设置c=0,然后跳转至s502。
[0178]
s502:设置read的c位置为起始位置,跳转至s503。
[0179]
s503:c位置是否在read的范围内。若c位置超过read的长度范围,则跳转至步骤end,结束查询,否则分别跳转至s604和s704;
[0180]
s604:判断以c位置为起点,长度为lenc的碱基串中是否有特殊字符,若是,则跳转至s6041,否则跳转至s605。
[0181]
s6041:将c位置更新为特殊字符后的位置。
[0182]
s605:以c为起始位置,长度为lenc的碱基串为索引查询第一加速库,获取该碱基
串对应的第一信息结构体。然后跳转至s606。
[0183]
第一信息结构体包括布尔值b1、occ查询范围start1、end1以及长度length1。
[0184]
s606:判断第一信息结构体中b1是否为true,若是,则跳转至s607,否则跳转至s6061。
[0185]
s6061:根据第一信息结构体确定最大精确匹配的相关信息;令c =length1,然后跳转至s502。
[0186]
最大精确匹配的相关信息包括最大精确匹配在reference中的位置以及最大精确匹配的长度length1。其中,最大精确匹配在reference中的位置可以根据在最大精确匹配在occ的范围start1和end1确定。具体地,根据区间[start1,end1]查找后缀数组sa,获得区间内每个整数在sa中的匹配值,该匹配值即为最大精确匹配在reference中的起始位置。基于起始位置和最大精确匹配长度可以确定最大精确匹配在reference中的位置。
[0187]
s607:判断以c位置为起点,长度为lenc lene的碱基串中是否有特殊字符,若是,则跳转至s6071;否则跳转至s608。
[0188]
s6071:将c位置更新为特殊字符后的位置。
[0189]
s608:使用bwt-fm法,利用occ和sa继续查询,直至长度达到lenc lene,或者在长度达到lenc lene之前确定最大精确匹配。
[0190]
s609:是否在长度达到lenc lene之前确定最大精确匹配。若是,则跳转至s6091。
[0191]
s6091:确定最大精确匹配的相关信息,令c =len
max
1,然后跳转至s502。
[0192]
其中,len
max
表征最大精确匹配的长度。
[0193]
s704:判断位置c为起点,长度为lenc lene lenf的碱基串中是否含有特殊字符,若是,则跳转至s7041;否则跳转至s705。
[0194]
s7041:将c位置更新为特殊字符后的位置。
[0195]
s705:以c位置为起始位置,长度为lenc lene lenf的碱基串为索引,查找第二加速库,获得该碱基串对应的第二信息结构体。然后跳转至s706。
[0196]
第二信息结构体包括布尔值b2、b3和occ查询范围start2、end2以及长度length2。
[0197]
s706:判断第二信息结构体中的b2是否为true;若是,则跳转至s708,否则跳转至s707。
[0198]
s707:判断第二信息结构体中的b3是否为true,若是,则跳转至s7071,否则结束当前流程。
[0199]
s7071:根据第二信息结构体确定最大精确匹配的相关信息;令c =length2,然后跳转至s502。
[0200]
s708:使用bwt-fm法,利用occ和sa继续查询至确定最大精确匹配。然后跳转至s7081。
[0201]
s7081:确定最大精确匹配的相关信息。令c =len
max
1。然后跳转至s502。
[0202]
在上述实施例中,s6041、s6071以及s7041中将c位置更新为特殊字符后的位置时,还可以确定原起始位置和更新后的起始位置之间最大精确匹配的相关信息。例如,在s6071中,c到c lenc已匹配,可以通过bwt-fm继续查找最大精确匹配,直至查找到更新后起始位置。
[0203]
本技术实施例提供的上述序列查找方法可以以云服务的形式提供给用户使用。具
体地,云服务提供商可以在云环境中运行序列查找方法对应的代码,从而实现以云服务方式提供序列查找服务。具体地,云服务提供商提供的云服务器可以向用户呈现序列查找界面,如用于序列查找的图形用户界面(graphical user interface,gui),然后云服务器接收用户通过gui输入的、待查找的目标序列。后台的云服务器可以从目标序列中确定至少一个子序列,该子序列以所述目标序列中的一个字符为起点。然后云服务器在加速库中查找所述子序列,得到所述子序列或者所述子序列以所述一个字符为起点的最大精确匹配在参考序列中的位置。
[0204]
在一些可能的实现方式中,上述序列查找方法可以通过代码实现,该代码可以被封装为软件包。台式机、笔记本、智能手机等终端计算设备(可以简称为终端),或者服务器可以获取软件包,并安装上述软件包。当软件包运行时,该终端或服务器可以执行上述序列查找方法。
[0205]
在另一些可能的实现方式中,硬件商在发布硬件如cpu或gpu时,还可以发布(例如开源)针对该硬件的加速包。该加速包具体用于在加速在参考序列中查找目标序列的过程。cpu或gpu可以接收用户的选择信息,该选择信息指示是否启用加速包,若是,则执行本技术实施例所示的序列查找方法,提高查找效率。
[0206]
上文结合图1至图5对本技术实施例提供的序列查找方法进行了详细介绍,下面将结合附图对本技术实施例提供的装置、设备进行介绍。
[0207]
参见图6所示的序列查找装置的结构示意图,该装置600包括:
[0208]
确定模块602,用于从目标序列中确定至少一个子序列,所述子序列以所述目标序列中的一个字符为起点;
[0209]
查找模块604,用于在加速库中查找所述子序列,得到所述子序列或者所述子序列以所述一个字符为起点的最大精确匹配在参考序列中的位置,所述加速库用于加速查找设定长度值的序列,所述子序列的长度为所述设定长度值。
[0210]
在一些可能的实现方式中,所述加速库包括至少一个信息结构体,所述信息结构体用于指示样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的范围。
[0211]
在一些可能的实现方式中,所述信息结构体包括存在字段和长度字段中的至少一个字段以及范围字段,所述存在字段用于表征一个样本序列是否存在于所述参考序列中,所述范围字段用于表征所述样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的范围,所述长度字段用于表征所述样本序列或者所述样本序列的最大精确匹配的长度。
[0212]
在一些可能的实现方式中,所述查找模块604具体用于:
[0213]
根据序列与存储地址的映射关系确定所述子序列对应的存储地址;
[0214]
根据所述存储地址访问所述加速库,得到所述子序列或者所述子序列以所述一个字符为起点的最大精确匹配在参考序列中的位置。
[0215]
在一些可能的实现方式中,所述加速库包括位于内存的第一加速库,所述设定长度值为第一长度值。
[0216]
在一些可能的实现方式中,所述第一长度值根据所述内存的大小确定。
[0217]
在一些可能的实现方式中,所述加速库包括位于外存的第二加速库,所述设定长度值为第二长度值。
[0218]
在一些可能的实现方式中,所述第二长度值根据所述外存的大小确定。
[0219]
在一些可能的实现方式中,所述第二信息结构体还包括比较字段,所述比较字段用于表征最大精确匹配的长度值是否大于预设长度阈值,所述预设长度阈值根据内存的大小以及外存内存访问耗时比确定。
[0220]
在一些可能的实现方式中,所述确定模块602具体用于:
[0221]
从目标序列中确定至少一个第一子序列和至少一个第二子序列,所述至少一个第一子序列和所述至少一个第二子序列以所述目标序列中的一个字符为起点,所述第二子序列长于所述第一子序列;
[0222]
所述加速库包括位于内存的第一加速库和位于外存的第二加速库;
[0223]
所述查找模块604具体用于:
[0224]
在所述第一加速库中查找所述第一子序列,以及在所述第二加速库中查找所述第二子序列。
[0225]
在一些可能的实现方式中,所述查找模块604具体用于:
[0226]
当在所述第二加速库中查找到所述第二子序列以所述一个字符为起点的最大精确匹配时,停止在所述第一加速库中查找所述第一子序列,当在所述第一加速库中查找到所述第一子序列以所述一个字符为起点的最大精确匹配时,停止在所述第二加速库中查找所述第二子序列。
[0227]
在一些可能的实现方式中,所述第一长度值根据所述内存的大小确定,或者根据外存内存访问耗时比确定。
[0228]
在一些可能的实现方式中,所述装置600还包括:
[0229]
构建模块,用于在所述参考序列中查找样本序列,获得查找结果,所述查找结果用于表征所述样本序列或所述样本序列以第一个字符为起点的最大精确匹配在所述参考序列中的位置,根据所述查找结果构建所述加速库。
[0230]
在一些可能的实现方式中,所述构建模块具体用于:
[0231]
根据所述参考序列的索引bwt、后缀数组sa和二维数组occ,通过bwt算法在所述参考序列中查找样本序列,获得查找结果,所述查找结果用于表征所述样本序列是否存在于所述参考序列中,以及所述样本序列或所述样本序列以第一个字符为起点的最大精确匹配在所述二维数组的范围,以及所述样本序列或者所述样本序列以第一个字符为起点的最大精确匹配的长度值。
[0232]
在一些可能的实现方式中,所述序列为基因序列。
[0233]
根据本技术实施例的序列查找装置600可对应于执行本技术实施例中描述的方法,并且序列查找装置600的各个模块/单元的上述和其它操作和/或功能分别为了实现图3、图4、图5所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
[0234]
本技术实施例还提供了一种处理设备200,用于实现图6所示实施例中序列查找装置600的功能。其中,处理设备200的具体实现可以参见图2相关内容描述,在此不再赘述。
[0235]
本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质包括指令,所述指令指示计算机执行上述应用于序列查找装置600的序列查找方法。
[0236]
本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质包括指令,所述指令指示计算机执行上述应用于序列查找装置600的序列查找方法。
[0237]
本技术实施例还提供了一种计算机程序产品,所述计算机程序产品被计算机执行时,所述计算机执行前述序列查找方法的任一方法。该计算机程序产品可以为一个软件安装包,在需要使用前述序列查找方法的任一方法的情况下,可以下载该计算机程序产品并在计算机上执行该计算机程序产品。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献