算法分析与设计PPT04-动态规划 - 9 Human Gene Functions.pptVIP

算法分析与设计PPT04-动态规划 - 9 Human Gene Functions.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * ZJU1027-HUMAN GENE FUNCTIONS 众所周知,人类基因可以认为是一个基因序列,包含四种核苷酸,分别用A,C,T和G四个字母简单地表示。生物学家对鉴别人类基因并确定他们的功能很感兴趣,因为这对诊断人类疾病和开发新药很有用。…… 你的任务是编写一个程序,按以下规则比较两个基因并确定它们的相似程度。 给出两个基因AGTGATG和GTTAG,他们有多相似呢?测量两个基因相似度的一种方法称为对齐。使用对齐方法,可以在基因的适当位置插进空格,让两个基因的长度相等,然后根据基因分值矩阵计算分数。 * ZJU1027-HUMAN GENE FUNCTIONS 例如,给AGTGATG插入一个空格,就得到AGTGAT-G;给GTTAG插入三个空格,就得到-GT--TAG。空格用减号(-)表示。现在两个基因一样长了,把这两个字符串对齐: AGTGAT-G -GT--TAG 对齐以后,有四个基因是相配的:第二位的G,第三位的T,第六位的T和第八位的G。根据下列基因分值矩阵,每对匹配的字符都有相应的分值。 * 表示空格对空格是不允许的。上面对齐的字符串分值是: (-3)+5+5+(-2)+(-3)+5+(-3)+5=9。 ? A C G T - A 5 -1 -2 -1 -3 C -1 5 -3 -2 -4 G -2 -3 5 -2 -2 T -1 -2 -2 5 -1 - -3 -4 -2 -1 * * ZJU1027-HUMAN GENE FUNCTIONS 当然,还有其它的对齐方式。下面是另一种对齐方式(不同数量的空格插进不同的位置): AGTGATG -GTTA-G 这种对齐方式的分值是(-3)+5+5+(-2)+5+(-1) +5=14,它比前一个要好。其实这种对齐方式是最优的,没有其他的方式能得到更高的分值了,所以这两个基因的相似度是14。 ? A C G T - A 5 -1 -2 -1 -3 C -1 5 -3 -2 -4 G -2 -3 5 -2 -2 T -1 -2 -2 5 -1 - -3 -4 -2 -1 * * ZJU1027-HUMAN GENE FUNCTIONS 在衡阳市第八中学信息学奥赛论坛中,管理员转载有LeeMars的算法。 数据结构 基因分值矩阵的表示: int score[5][5] = {{5, -1, -2, -1, -3}, {-1, 5, -3, -2, -4}, {-2, -3, 5, -2, -2}, {-1, -2, -2, 5, -1}, {-3, -4, -2, -1, 0}}; ? A C G T - A 5 -1 -2 -1 -3 C -1 5 -3 -2 -4 G -2 -3 5 -2 -2 T -1 -2 -2 5 -1 - -3 -4 -2 -1 * * ZJU1027-HUMAN GENE FUNCTIONS 原矩阵的下标是A,C,G,T和-,有很多程序采用switch语句转换,这里采用map数组转换: char map[128]; 只使用其中5个单元:map[A] = 0; map[C] = 1; map[G] = 2; map[T] = 3; map[-] = 4; 两个基因使用字符串表示: char str1[MaxN],str2[MaxN]; ? A C G T - A 5 -1 -2 -1 -3 C -1 5 -3 -2 -4 G -2 -3 5 -2 -2 T -1 -2 -2 5 -1 - -3 -4 -2 -1 * 输入样例 2 7 AGTGATG 5 GTTAG 7 AGCTATT 9 AGCTTTAAA first second * ZJU1027-HUMAN GENE FUNCTIONS (2) 动态规划算法的实现 本题类似于最长公共子序列(LCS)问题。 使用gene数组记录动态规划过程中产生的中间结果: int gene[MaxN][MaxN]; gene[i][j]表示基因子串str1[0…i-1]和str2[0…j-1]的分值: str1取第i-1个字母,str2取-: m1 = gene[i-1][j] + score[map[str1[i-1]]][4]; str1取-,str2取第j-1个字母: m2 = gene[i][j-1] + score[4][map[str2[j-1]]]; str1取第i-1个字母,str2取第j-1个字母: m3 = gene[i-1][j-1] + score[map[str1[i-1]]][map[str2[j-1]]]; 则gene[i][j] = max(m1, m2, m3)。 最终结果是gene[first][second

文档评论(0)

酱酱 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档