一种基于位图的基因序列片段快速定位方法

文档序号:9579512阅读:539来源:国知局
一种基于位图的基因序列片段快速定位方法
【技术领域】
[0001] 本发明涉及基因测序技术,具体涉及一种基于位图的基因序列片段快速定位方 法。
【背景技术】
[0002] 基因片段定位技术是当前高通量基因测序的基础。通过对高通量测序,可以产生 大量基因序列片段,实际实验发现,其中大部分基因序列片段在较长参考基因序列中能够 找到精确的完全匹配。参考基因序列可以看作是由A、C、G、T4个字母组成的一个连续的字 符串,其长度通常能够远超过1〇9个字符,从这样长的参考基因序列中的每一个字符开始, 截取η个字符作为Key-Value数据库中的Key,其所在参考链上的位置及其它附带信息作为 Value,可以组织成一个庞大的Key-Value数据库。
[0003] 通常来说,Key-Value存储与查询采用哈希并分桶的方式是效率较高的。但在一 个109个字符以上的Key-Value对中进行存储与查询,其操作的计算量仍旧非常巨大,尤其 若查询的Key根本不在Key-Value数据库中时,Key-Value数据库为此需要查询遍历对应 桶内的所有元素,其操作完成时间被最大化,导致大量计算与查询浪费。若能在查询前,通 过简单计算,快速地判定一个待查询Key-定不在数据库中,并能给出对应桶内的较为精 确地数据位置,则可以大大降低不必要的桶内遍历查询操作。
[0004] BloomFilter(布隆过滤器)技术则用于通过简单计算,快速地判定一个待查询 Key-定不在数据库中。BloomFilter技术是一种空间效率很高的随机数据结构,它利用 位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。BloomFilter通过 极少的错误换取了存储空间的极大节省。BloomFilter使用k个相互独立的哈希函数(哈 希Function),它们分别将集合中的每个元素映射到{1,的范围中。对任意一个元素 X,第i个哈希函数映射的位置h(X)就会被置为1 (1 <i<k)。在判断y是否属于这个集 合时,我们对y应用k次哈希函数,如果所有(y)的位置都是1 (1 <i<k),那么我们就 认为y是集合中的元素,否则就认为y不是集合中的元素。综上可知,BloomFilter的设 计的目的主要是面向绝大部分查询数据都不命中数据库中数据的情形,其缺点是:它经过 k个复杂哈希函数的运算,只能给出一个简单的"可能在"或者"一定不在"的结果,实际查 询过程中,若绝大多数数据可以命中集合,那么BloomFilter的计算可能反而成为负担。

【发明内容】

[0005] 本发明要解决的技术问题:针对现有技术的上述问题,提供一种既能够快速滤除 不命中的查询数据,又能够给出哈希桶内较为精确地数据位置、大大加速哈希分桶方式组 织数据查询过程,空间效率高、定位速度快、定位精确的基于位图的基因序列片段快速定位 方法。
[0006] 为了解决上述技术问题,本发明采用的技术方案为:
[0007] -种基于位图的基因序列片段快速定位方法,步骤包括:
[0008] 1)构造用于存储基因序列片段信息的位图,位图的每一个数据位被初始化为0;
[0009] 2)将基因参考链中各基因序列片段按位循环偏移生成多个基因序列片段向量,将 基因序列片段向量采用哈希函数映射到位图中的唯一数据位并将数据位由〇置1,统计数 据位所在行R从第0列开始到数据位所在列之间所有数据位的出现1的次数t,将基因序列 片段向量及其附带信息构成的键值对<Keyt,Valuet>存放在数据库中以该数据位的行号R 对应的哈希桶的第t个位置;如果某个基因序列片段的多个基因序列片段向量的所有数据 位全已被置1,则将该基因序列片段加入冲突集合ConflictSet中;
[0010] 3)将需要进行基因序列片段定位时,将待定位基因序列片段按位循环偏移生 成多个基因序列片段向量,将基因序列片段向量采用哈希函数映射到位图中的唯一数据 位,如果数据位为1则统计数据位所在行R从第0列开始到数据位所在列之间所有数据 位的出现1的次数t,从数据库中取出行号R对应的哈希桶的第t个位置存放的键值对 <Keyt,Valuet>,如果键值对<Keyt,Valuet>的键Keyt和待定位基因序列片段相同,如果相同 则返回键值对<Keyt,Valuet>的值Valuet,如果所有基因序列片段向量的数据位为0,则在 冲突集合ConflictSet中查找当前基因序列片段的键值对<Keyt,Valuet>,如果查找成功则 返回键值对<Keyt,Valuet>的值Valuet,否则判定当前基因序列片段一定不在基因参考链 中。
[0011] 优选地,所述步骤2)的详细步骤包括:
[0012] 2. 1)从基因参考链中取出一个基因序列片段作为当前基因序列片段;
[0013] 2. 2)将当前基因序列片段按位循环偏移生成多个基因序列片段向量,取出一个基 因序列片段向量作为当前基因序列片段向量;
[0014] 2. 3)通过哈希函数映射将当前基因序列片段向量的第一区间内的数据映射至位 图行范围内的整数空间,将哈希函数映射的结果为当前基因序列片段向量的行号;根据当 前基因序列片段向量的第二区间内的数据计算当前基因序列片段向量的列号;
[0015] 2.4)读取当前基因序列片段向量的行号、列号在位图中对应的数据位,如果该数 据位的值为〇则将数据位置1 ;否则,判定当前基因序列片段向量无法索引到〇 ;
[0016] 2. 5)判断当前基因序列片段的所有基因序列片段向量是否已经处理完毕,如果尚 未处理完毕,则选择下一个基因序列片段向量作为当前基因序列片段向量,跳转执行步骤 2.3);如果已经处理完毕,则判断当前基因序列片段的所有当前基因序列片段向量是否均 无法索引到〇,如果是均无法索引到〇,则将当前基因序列片段的键值对<Keyt,Valuet>加入 冲突集合ConflictSet中;
[0017] 2.6)判断基因参考链是否已经处理完毕,如果尚未处理完毕,则跳转执行步骤 2. 1);否则,扫描位图,针对位图中每一个被置1的数据位,统计位图中数据位所在行R从第 〇列开始到数据位所在列之间所有数据位的出现1的次数t,将该数据位唯一对应的基因序 列片段向量及其附带信息构成的键值对<Keyt,Valuet>存放在数据库中以该数据位的行号 R对应的哈希桶的第t个位置,在位图全部扫描完毕后,位图与键值对数据库构建完毕。
[0018] 优选地,所述步骤3)的详细步骤包括:
[0019] 3. 1)将需要进行基因序列片段定位时,将待定位基因序列片段按位循环偏移生成 多个基因序列片段向量;
[0020] 3. 2)取出一个基因序列片段向量作为当前基因序列片段向量;
[0021] 3. 3)通过哈希函数映射将当前基因序列片段向量的第一区间内的数据映射至位 图行范围的整数空间,将哈希函数映射的结果为当前基因序列片段向量的行号;根据当前 基因序列片段向量的第二区间内的数据计算当前基因序列片段向量的列号;
[0022] 3.4)读取当前基因序列片段向量的行号、列号在位图中对应的数据位,如果该数 据位的值为〇,则判断定位失败;如果该数据位的值为1,则统计位图中数据位所在行R从第 〇列开始到数据位所在列之间所有数据位的出现1的次数t,在数据库中以该数据位的行号 R对应的哈希桶的第t个位置读出键值对<Keyt,Valuet>,判断键值对<Keyt,Valuet>的键 Keyt和待定位基因序列片段相同,如果相同则返回键值对〈Keyt,Valuet>的值Valuet,如果 和待定位基因序列片段不同,则跳转执行下一步;
[0023] 3. 5)判断是否所有基因序列片段向量
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1