美妙的夜晚(Smith Waterman)

习惯了凌晨来敲那些复杂的代码

因为安静

因为此时的心里才被代码完全的占据,没有一丝的杂念

搞了两天多的递归,终于出结果了,

终于没把自己仍死循环里,否则还不知道谁来break out me呢!

----------------------------------------------------以下问题描述及解决方案---------------------------------------------

Q = catgt

S= acgctg

QuerySubject所得的得分矩阵为:

         1

初始化得分矩阵的条件:

Matrix(0,0) = 0; ( 矩阵(0,0)这个点,初始化为0 )

Matrix(0,j) = match(-,y)+ Matrix(0,j-1) (j>=1)

Matrix(i,0) = match(x,-)+ Matrix(i-1,0) (i>=1)

                                     Matrix(i-1,j-1) + match(Q[i], S[j]);

Matrix(i,j) = max     Matrix(i-1,j) + match(Q[i], -);

                                     Matrix(i,j-1) + match(-, S[j]);

2、

match(x,x) = 2   (两个字符相匹配得2)

match(x,y) = match(x,-) = match(-,y) = -1 (两个字符不匹配或与空格匹配得-1)

由以上条件,得到的得分矩阵为:

 

-

c

a

t

g

t

-

0

-1

-2

-3

-4

-5

a

-1

-1

1

0

-1

-2

c

-2

1

0

0

-1

-2

g

-3

0

0

-1

2

1

c

-4

-1

-1

-1

1

1

t

-5

-2

-2

1

0

3

g

6

-3

-3

0

3

2

 

回溯思想:

backTrace():

for( i=Q.length, j=S.length; i>0&&j>0; ) {

         if ( Matrix(i,j) == Matrix(i-1,j-1) + match(Q[i], S[j]) ){

         i--; j--;

}

else if ( Matrix(i,j) == Matrix(i-1,j) + match(Q[i], -) ){

         i--;

         //Q序列中的j位置插入一个空格 ‘-’

}

else if( Matrix(i,j) == Matrix(i,j-1) + match(-, S[j]) ){

         j--;

//S序列中的i位置插入一个空格 ‘-’

}

}

问题:需要把标红色箭头的三条路径都选出来。

如下图所示:

美妙的夜晚(Smith Waterman) - Sam - Bachelor的博客

 

所得结果为:

q = catg-t-                           q = -c-atgt                  q = -ca-tgt

s = -acgctg                          s = acgctg-                 s = acgctg-

 

debug的结果为:(这张图是这几天见到过的最漂亮的东西了,哈哈哈美妙的夜晚(Smith Waterman) - Sam - Bachelor的博客

美妙的夜晚(Smith Waterman) - Sam - Bachelor的博客
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值