- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数学建模校预赛.doc
序号:
上海工程技术大学
2015年大学生数学建模竞赛学校预赛
参赛队信息 姓名 学院 班级 完整学号 手机号 是否参加过2014年全国竞赛 队长 石皓程 电子电气工程 0211122 021112218是 队员1 石皓程 电子电气工程 0211122 021112218 是 队员2 杜晶 电子电气工程 0211122 021112219 是 队员3 陈杨 电子电气工程 0211122 是
DNA序列的k-mer index 问题
摘要
系列只含有4个字母A T C G,假设给定一个序列,并给定一个整数值,从S的第一个位置开始,取一连续k个字母的短串,称之为, 然后从S的第二个位置, 取另一,这样直至S的末端,就得一个集合,包含全部 。
通常这些需一种数据索引方法,可被后面的操作快速访问。例如,对5-来说,通过这种数据索引方法,可返回其在序列S中的位置。
首先我们需要对附件中给出的序列进行处理,采用C语言中的文件操作语句对序列进行循环读取,利用结构体存储每条序列的信息并将结构体存放在文件当中便于读取,以每条序列的分隔符作为每次循环结束的标志,这样就将百万条序列变成了一个有序的整体,变的利于我们进行操作。
接下来的处理 本文给出了建立索引和不建立索引两种方法:
在选择建立索引时,索引我们可以分为不同的8种情况:
分别是取(1,2,3,4,5,6,7,=8)这8种情况(大于8时索引仍作8看待),当取1时,有4种不同的索引情况(A,T,C,G);当取2时,有16种不同的索引情况(AA,AT,AC,AG,TA,TT,TC,TG,CA,CT,CC,CG,GA,GT,GC,GG);当取3时……依次类推。要确定的值,遍历百万条序列,将每个碱基片段作为一个出现的组合情况(序列号和出现的位置)存入相应的链表中。
索引的建立耗费时间较长,占用内存量较大。
一旦索引建立完成,确定的排列,在查找的时候,只需要在相应的链表中进行遍历则完成查询工作,耗费时间极短,几乎可以忽略。
在选择不建立索引时:
要确定的值,以及的排列。查询过程中我们运用了KMP算法。传统查询算法有一个弊端,二重循环时一旦发现与给定的有不匹配的字母时,还会继续循环查询下去,是一种无用功,这就导致了查询时间的浪费。所以我们对传统算法进行了改进,在此基础上采用KMP算法的思想,在发现与给定的有不匹配的字母时,直接跳出二重循环,将一重循环的位置直接跳到前一个二重循环不匹配的位置之后,这样就避免了重复做无用功,提高了算法效率。
此方法的优点是不用为建立索引耗费大量的时间和内存量,缺点则在于查询速度缓慢。
关键字:C语言 文件操作 建立索引 数据结构:链表 KMP算法
一、问题重述
快速和准确的查询和获取片段对生命科学技术的研究具有重要意义,对于生物界的每个生物来说,基因组包含了生物全部的遗传信息,这些信息由DNA分子中碱基的排列顺序所决定。如何快速的查询片段所在的序列组,进而比较全面的揭示基因组的复杂性和多样性,是生命科学领域重要的研究课题。
现在的问题是给定一种数据索引方法,利用查询百万条序列中是否存在相应的片段,如果存在,则输出相应片段所在的位置。但面向的查询对象数据非常庞大且排列不利于查找,而且在查询过程中需要优化传统的查询算法,使得时间复杂素尽可能的缩短。
问题一:文件处理,设计算法并编制程序,将附件中所给出的百万条序列进行有效的分割,将每条序列的碱基进行有效的截取并存储,避免两条DNA序列相接出现错误的结果。
问题二:若建立索引,设计算法并编制程序,确定值,遍历百万条序列,将每个碱基片段作为一个出现的组合情况(DNA序列号和出现的位置)存入相应的链表中。一旦索引建立完成,确定的排列,遍历链表完成查询。
问题三:若不建立索引,直接进行查询,设计算法并编制程序,在每条100个碱基长度的序列中查询给定的片段,要对传统查找算法进行改进,避免无用的查询步骤,使之具有良好的查询效果,如果存在,则输出给定片段的位置。
问题的分析
查询片段的首要前提是完成文件处理,将所给出的海量序列先进行有效的分割和截取,附件中给出的百万条DNA序列首尾相接,两条序列以一个‘’字符作为分界线,我们可以利用‘’字符作为一个循环终结的标志,在每次循环中如果读取的字符为“ATCG”中的任何一个,则作为具体的碱基序列存入字符数组中,如果是非“ATCG”中的任何一个,则作为序列的编号存入字符数组中。
在文件处理完成以后,就需要建立索引了,确定值,遍历百万条序列,将每个碱基片段作为一个出现的组合情况(序列号和出现的位置)存入相应的链表中。
这两个问题的关键都在于需要设计一个高效且稳
文档评论(0)