生物信息学原理作业第四弹:DNA序列组装(非循环子图)

原理:生物信息学(孙啸)

大致思想:

      1. 这个算法理解细节理解比较困难,建议看孙啸的生物信息学相关章节。

      2. 算法要求所有序列覆盖整个目标DNA,并保证相邻片段有足够的覆盖连接(引自孙啸 生物信息学)。

      3. 最后推导出符合条件的序列构成的有向图没有回路,并有哈密顿路径。

      4. 利用拓扑排序,得到顶点的有序排列。

      5. 组装。

贴上Python代码,发现问题我会及时更正。

转载请保留出处!

简单DNA序列组装(非循环子图)

 # -*- coding: utf-8 -*-
"""
Created on Sat Dec 2 16:09:14 2017
@author: zxzhu
python3.6
"""
from functools import reduce def get_weight(s1,s2): #通过两条序列的overlap计算出权值
l = min(len(s1),len(s2))
while l>0:
if s2[:l] == s1[-l:]:
return l
else:
l-=1
return 0 def print_result(s1,s2): #将两条序列去除首尾overlap后合并
weight = get_weight(s1,s2)
s = s1 + s2[weight:]
#print(s)
return s def dir_graph(l,t=3): #得到满足条件的有向图(权值大于等于t)
graph = {}
for i in l:
VW = []
for j in l:
if i!=j:
weight = get_weight(i,j)
if weight >= t:
VW.append(j)
graph[i] = VW
#print(graph)
for i in graph.keys(): #不能有孤立顶点
if not graph[i]:
count = get_in_V(graph,i)
if count ==0:
graph.clear()
print('The sequence:\n"{0}"\n can\'t align with others!'.format(i))
break
return graph def get_in_V(graph,v): #得到某顶点入度
count = 0
all_in = reduce(lambda x,y:x+y,graph.values())
for i in all_in:
if i == v:
count+=1
return count def aligner(graph,topo=[]): #得出顶点顺序
while graph:
V = graph.keys()
for i in V:
flag = 1
in_num = get_in_V(graph,i)
if in_num ==0:
topo.append(i)
graph.pop(i)
flag = 0
break
if flag: #存在环
#print('The t score is too small!')
return None
else:
aligner(graph,topo)
return topo x = 'CCTTTTGG'
y = 'TTGGCAATCACT'
w = 'AGTATTGGCAATC'
u = 'ATGCAAACCT'
z = 'AATCGATG'
v = 'TCACTCCTTTT'
graph = dir_graph([x,y,z,w,u],t=3)
topo = aligner(graph)
if topo:
result = reduce(print_result,topo)
else:
result = topo
print(result)

简单DNA序列组装(非循环子图)的更多相关文章

  1. DNA序列组装(贪婪算法)

    生物信息学原理作业第四弹:DNA序列组装(贪婪算法) 原理:生物信息学(孙啸) 大致思想: 1. 找到权值最大的边: 2. 除去以最大权值边的起始顶点为起始顶点的边: 3. 除去以最大权值边为终点为终 ...

  2. DNA序列对齐问题

    问题描述: 该问题在算法导论中引申自求解两个DNA序列相似度的问题. 可以从很多角度定义两个DNA序列的相似度,其中有一种定义方法就是通过序列对齐的方式来定义其相似度. 给定两个DNA序列A和B,对齐 ...

  3. python实现DNA序列字符串转换,互补链,反向链,反向互补链

    在生物信息学分析中,经常对DNA序列进行一系列操作,包括子序列截取,互补序列获取,反向序列获取,反向互补序列获取.在python语言中,可编写如下函数完成这些简单功能. 子序列截取 python中对序 ...

  4. 短序列组装Sequence Assembly(转载)

    转载:http://blog.sina.com.cn/s/blog_4af3f0d20100fq5i.html 短序列组装(Sequence assembly)几乎是近年来next-generatio ...

  5. [LeetCode] Repeated DNA Sequences 求重复的DNA序列

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...

  6. C代码实现非循环单链表

    C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...

  7. 利用Python【Orange】结合DNA序列进行人种预测

    http://blog.csdn.net/jj12345jj198999/article/details/8951120 coursera上 web intelligence and big data ...

  8. 华为OJ平台——DNA序列

    题目描述: 一个DNA序列由A/C/G/T四个字母的排列组合组成.G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度).在基因工程中,这个比例非 ...

  9. 环状DNA序列

    大意: 一个DNA序列是环状的,这意味着有N个碱基的序列有N种表示方法(假设无重复).而这N个序列有一种最小的表示,这个最小表示的意思是这个序列的字典序最小(字典序的意思是在字典中的大小 比如ABC& ...

随机推荐

  1. 解决get乱码

    也可以在tomcat中修改,但是每次配置tomcat中都得修改.容易忘记,还是图片这个方法最好,推荐

  2. 把VueThink整合到已有ThinkPHP 5.0项目中

     享 关键字: VueThink ThinkPHP5.0 Vue2.x TP5 管理后台扩展 VueThink初认识 VueThink,是一个很不错的技术框架,由广州洪睿科技的技术团队2016年研发( ...

  3. 什么是A记录  域名

    A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录.用户可以将该域名下的网站服务器指向到自己的web server,FTP server等上面.同时也可以设置域名的子域名. 通俗 ...

  4. HTML <td> 标签的 rowspan 属性

    rowspan 属性规定单元格可横跨的行数. colspan  属性规定单元格可横跨的列数.

  5. Python实现简易Web服务器

     1.请自行了解HTTP协议 http://www.cnblogs.com/reboot51/p/8358129.html(点击跳转) 2.创建Socket服务,监听指定IP和端口 3.以阻塞方式等待 ...

  6. 解决 vmware workstations 14 开启虚拟机黑屏

    某些朋友在使用vmware workstations 14创建或者开启虚拟机时发现黑屏,但其实系统的正常启动的,只是无画面显示. 1.以管理员方式启动命令行 2.修复LSP 在CMD中输入 netsh ...

  7. Java 中的变量

    变量 Java 程序的变量大体可分为成员变量和局部变量. 局部变量 形参:在方法签名中定义的局部变量,由方法调用者负责为其赋值,随方法的结束而消亡. 方法内的局部变量:在方法内定义的局部变量,必须在方 ...

  8. python_print和input

    什么是输入? --用户从键盘.鼠标或其他终端 输入 的数据 -- input("提示信息") --python 2.7 rqw_input("提示信息") 如何 ...

  9. js 抛物线 笔记备份

    var funParabola = function(element, target, options) { /* * 网页模拟现实需要一个比例尺 * 如果按照1像素就是1米来算,显然不合适,因为页面 ...

  10. 译-BMC Remedy Action Request System权限控制概述

    原文链接:Access control overview 说明: BMC Remedy Action Request System是BMC ITSM产品平台,简称AR 或者Remedy,可实现基于IT ...