- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北航软件技术基础作业2
软件技术基础作业院(系)名称计算机学院学生姓名杨立群学号BY16061442016年11月目录目录1概述11.1 作业内容及目标11.2 思路与方案12原示例程序分析22.1 原示例程序处理流程22.2 原示例程序不能处理的情况22.2.1 substr与H9N2-2009匹配的位置不止一个22.2.2 substr的子串与H9N2-2009后续位置匹配33算法设计53.1 MutantKMPmatching53.2 主程序流程6结论8概述作业内容及目标比较DNA字符串DNA2009和DNA2010。找出两者之间所有相同长度大于16的基因段,相同的段尽可能取最长的长度显示出相同的段以及在两个DNA中的位置。思路与方案主要采用一种变异的KMP算法(MutantMKPmatching,MKMP)。该算法在主要的字符串比对部分于KMP算法相同,但针对本次作业的实际情况做出了一定的优化。具体比对过程为:从H9N1-2010首个字符开始,逐个选取以第一个、第二个、第三个… …字符开始且长度为16的子串,使用MKMP算法比较该字串与H9N2-2009,获取能够匹配的H9N2-2009中的全部位置(而非初次匹配的位置)。最后从这些位置开始,先输出16个字符,再从第17个字符开始逐个比对两个序列对应位置,相同则输出,直到不相同为止。原示例程序分析原示例程序处理流程作业给出了一个示例程序,该程序实现了KMP算法,并通过调用该算法,进行DNA序列比对,其流程为:2010[j+offset]=2009[i+offset] NONO YESjlength(2010)-16 YES取j=0;取出长度为16个字符的字符串:substr=H9N1-2010[j:j+16],利用KMP算法,比较H9N2-2009与substr,返回首次匹配的位置i;取offset=16;substr+=H9N2-2009[i+offset],offset++;若H9N1-2010[j+offset]==H9N2-2009[i+offset],返回(4),否则进入(6)输出i、j、substr,取j=j+offset,若jlen(H9N1-2010)-16,结束,否则返回(2)。原示例程序不能处理的情况substr与H9N2-2009匹配的位置不止一个由于示例程序中调用KMP算法只返回substr与H9N1-2010匹配的首个位置,因此若H9N1-2010后续部分仍有与substr匹配的部分不会被发现。一个实例如下:H9N2-2009: ATGGAAACAATAGCACTATGGAAACAATAGCACH9N1-2010: ATGGAAACAATAGCACTAATAGCTATACTATTA上例中,程序开始时所取substr为前16个字符(黄色部分)。N9N2-2009中于substr匹配的子串有两个(红色部分),而示例程序只发现第一个。运行结果如下:substr的子串与H9N2-2009后续位置匹配由于执行完一次匹配后,原示例程序执行j=j+offset,因此若substr的某个字串与H9N2-2009后续的某个为止匹配,原示例程序无法发现。考虑如下实例:H9N2-2009: ATGGAAACAATAGCACTAATAGCTATACTATTATTTGGAAACAATAGCACTAH9N1-2010: ATGGAAACAATAGCACTAATAGCTATACTATTATTAAATTTTGGGAAAATTG上例中,H9N2-2009红色部分与H9N1-2010黄色部分相匹配,而黄色部分中的字串(绿色部分)与H9N2-2009绿色部分匹配。在第一轮匹配输出完毕后,substr为黄色部分,执行j=j+offset后,substr取为蓝色部分,再次执行匹配后没有发现匹配,程序结束。而绿色部分则被略过。运行结果如下:算法设计MutantKMPmatching由于KMP算法每次只返回目标串首次匹配到的位置,因此需要对其做出修正,同时针对本次作业做出相应优化。因此提出MutantKMPmatching(s,p,pindex,pre)。其中s为目标串,p为模式串,pindex为p首字符在原串(H9N1-2010)中的位置,pre将在下文中说明。MutanKMPmatching维护了两个重要的数据结构,FirstMatchedIndex和pre。FirstMatchedIndex为一个dict对象,其中每一个item对应一个完全匹配(两个序列共有)的16字符子串,其键值key对应该子串在H9N2-2009中首次出现的位置,FirstMatchedIndex[key]是一个拥有两个元素的list对象。FirstMatchedIndex[key][0]表示字串在H9N2-2009后续出现的位置的集
文档评论(0)