C语言 输出重复序列的序号,如何在FASTA序列中找到反向重复模式?

这篇博客介绍了如何利用后缀树这一数据结构解决生物信息学中的序列比对问题。作者作为一个Python和生物信息学新手,通过rosalind.info网站学习,并分享了一个C语言实现的后缀树库(带有Python绑定)。示例代码展示了如何对两个DNA序列进行反向补码转换,然后构建后缀树,寻找它们之间的公共子串。尽管该实现可能不适用于非常大的序列,但对于较小的序列,它可以高效地找出共同的子串。
摘要由CSDN通过智能技术生成

我是Python和生物信息学的新手,但我正在通过rosalind.info网站学习两种方法.您可以使用后缀树执行此操作.后缀树(见

http://en.wikipedia.org/wiki/Suffix_tree)是神奇的数据结构,它使生物信息学中的所有事情成为可能.您可以快速找到多个长序列中的公共子串.后缀树只需要线性时间,因此长度10,000,000是可行的.

所以首先找到序列的反向补码.然后将两者放入后缀树中,找到它们之间的公共子串(最小长度).

下面的代码使用了这个后缀树实现:http://www.daimi.au.dk/~mailund/suffix_tree.html.它是用C语言编写的,带有Python绑定.它不会处理大量的序列,但是两个没有问题.但是我不能说这是否会处理长度10,000,000.

from suffix_tree import GeneralisedSuffixTree

baseComplement = { 'A' : 'T', 'C' : 'G', 'G' : 'C', 'T' : 'A' }

def revc(seq):

return "".join([baseComplement[base] for base in seq[::-1]])

data = "AGGGTTTCCCTGACCTTCACTGCAGGTCATGCA"

# revc TGCATGACCTGCAGTGAAGGTCAGGGAAACCCT

# 012345678901234567890123456789012

# 1 2 3

minlength = 6

n = len(data)

tree = GeneralisedSuffixTree([data, revc(data)])

for shared in tree.sharedSubstrings(minlength):

#print shared

_, start, stop = shared[0]

seq = data[start:stop]

_, rstart, rstop = shared[1]

rseq = data[n-rstop:n-rstart]

print "Match: {0} at [{1}:{2}] and {3} at [{4}:{5}]".format(seq, start, stop, rseq, n-rstop, n-rstart)

这会产生输出

Match: AGGTCA at [23:29] and TGACCT at [10:16]

Match: TGACCT at [10:16] and AGGTCA at [23:29]

Match: CTGCAG at [19:25] and CTGCAG at [19:25]

它每次匹配两次,每次一次.那里也有反向回文!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值