`
bachelor007
  • 浏览: 55968 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

美妙的夜晚(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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics