给定一个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为! \% o$ h; ]; b' H
6 v( F6 M% f A3 Y7 r1 n) M. W% C{CTGTA,TGTAC,GTACT,TACTG,ACTGT,TGTAT}# I+ q# P3 ]0 E& m
& [, Q2 M& h! _
通常这些k-mer需一种数据索引方法,可被后面的操作快速访问。例如,对5-mer来说,当查询CTGTA,通过这种数据索引方法,可返回其在DNA序列S中的位置为{1,6}。, M' r3 N3 P8 y$ D
4 h- O0 n1 m! F# ~问题1 n' b& c6 R y3 o. U6 w
; s C0 l3 I/ |2 o' Z
现在以文件形式给定 100万个 DNA序列,序列编号为1-1000000,每个基因序列长度为100 。 8 ]! I/ z( j" ~ , r8 l0 B& A L" i6 {(1)要求对给定k, 给出并实现一种数据索引方法,可返回任意一个k-mer所在的DNA序列编号和相应序列中出现的位置。每次建立索引,只需支持一个k值即可,不需要支持全部k值。 R) N) g# X6 d8 k" R( G$ c0 ?5 c& h1 l5 {" m; p$ y3 I
(2)要求索引一旦建立,查询速度尽量快,所用内存尽量小。4 d' z! d9 ~7 n0 y
( q& J( x% P, t3 j' e( K
(3)给出建立索引所用的计算复杂度,和空间复杂度分析。 7 w; w% u' l2 r. q, x o+ }, N8 N3 ]- n" N(4)给出使用索引查询的计算复杂度,和空间复杂度分析。* @+ o K$ Z5 M* {, i: X