数学建模有关DNA序列k-mer index的问题

原问题是这样的:

给定一个DNA序列,这个系列只含有4个字母ATCG,如 S =“CTGTACTGTAT”。给定一个整数值k,从S的第一个位置开始,取一连续k个字母的短串,称之为k-mer(如k= 5,则此短串为CTGTA), 然后从S的第二个位置, 取另一k-mer(如k= 5,则此短串为TGTAC),这样直至S的末端,就得一个集合,包含全部k-mer 。 如对序列S来说,所有5-mer为{CTGTA,TGTAC,GTACT,TACTG,ACTGT,TGTAT}。

通常这些k-mer需一种数据索引方法,可被后面的操作快速访问。例如,对5-mer来说,当查询CTGTA,通过这种数据索引方法,可返回其在DNA序列S中的位置为{1,6}。

现在以文件形式给定 100万个 DNA序列,序列编号为1-1000000,每个基因序列长度为100 。

(1)要求对给定k, 给出并实现一种数据索引方法,可返回任意一个k-mer所在的DNA序列编号和相应序列中出现的位置。每次建立索引,只需支持一个k值即可,不需要支持全部k值。

(2)要求索引一旦建立,查询速度尽量快,所用内存尽量小。

(3)给出建立索引所用的计算复杂度,和空间复杂度分析。

(4)给出使用索引查询的计算复杂度,和空间复杂度分析。

(5)假设内存限制为8G,分析所设计索引方法所能支持的最大k值和相应数据查询效率。

(6)按重要性由高到低排列,将依据以下几点,来评价索引方法性能 

l 索引查询速度

l 索引内存使用

l 8G内存下,所能支持的k值范围

l 建立索引时间

本题主要是有关DNA序列的k-mer index查找问题,可将其转化为字符串的查找匹配模型问题,在处理字符串查找问题上,现在得到广泛认可的算法有适合处理字符串单模匹配的KMP算法,BM算法,以及适合处理字符串多模匹配的AC算法,WM算法等等。我们队以hash算法为基础,并作了几点优化和改进,使算法的内存占用有了一定程度的降低,查找效率也有很大提高。

本文中的算法和其它大多数算法一样,在建立索引时采用了hash算法,不同的是,我们利用一个hash函数(将DNA序列中的ATCG分别用二进制位的00,01,10,11来表示),这样做不但把DNA序列映射为一个整数,便于存储与查找,而且可以减少内存的使用,在k值取值较大时减耗尤其明显。在解决hash函数的地址冲突时,我们采用了拉链法,并且采用多级链表的形式,这样在确保查询效率较高的情况下,同样也可以减少内存的使用。

由于我们将DNA序列的ATCG分别表示为00,01,10,11,则我们可以将任意一个k-mer串映射为一个十进制整数。

假如我们的k-mer串长度为5,DNA序列ATCGA,则出于二进制左高位右低位的表示习惯考虑,我们也按照从左到右的顺序表示。则转化后如图所示。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值