12 Overlap Graphs
Problem
A graph whose nodes have all been labeled can be represented by an adjacency list, in which each row of the list contains the two node labels corresponding to a unique edge.
A directed graph (or digraph) is a graph containing directed edges, each of which has an orientation. That is, a directed edge is represented by an arrow instead of a line segment; the starting and ending nodes of an edge form its tail and head, respectively. The directed edge with tail vv and head ww is represented by (v,w)(v,w) (but not by (w,v)(w,v)). A directed loop is a directed edge of the form (v,v)(v,v).
For a collection of strings and a positive integer kk, the overlap graph for the strings is a directed graph OkOk in which each string is represented by a node, and string ss is connected to string ttwith a directed edge when there is a length kk suffix of ss that matches a length kk prefix of tt, as long as s≠ts≠t; we demand s≠ts≠t to prevent directed loops in the overlap graph (although directed cycles may be present).
Given: A collection of DNA strings in FASTA format having total length at most 10 kbp.
Return: The adjacency list corresponding to O3O3. You may return edges in any order.
Sample Dataset
>Rosalind_0498
AAATAAA
>Rosalind_2391
AAATTTT
>Rosalind_2323
TTTTCCC
>Rosalind_0442
AAATCCC
>Rosalind_5013
GGGTGGG
Sample Output
Rosalind_0498 Rosalind_2391
Rosalind_0498 Rosalind_0442
Rosalind_2391 Rosalind_2323 方法一
# coding=utf-8 # method1
data ={'Rosalind_0442': 'AAATCCC',
'Rosalind_0498': 'AAATAAA',
'Rosalind_2323': 'TTTTCCC',
'Rosalind_2391': 'AAATTTT',
'Rosalind_5013': 'GGGTGGG'} def is_k_overlap(s1, s2, k):
return s1[-k:] == s2[:k] import itertools
def k_edges(data, k):
edges = []
for u,v in itertools.combinations(data, 2): # data 里面任意取两个比较
u_dna, v_dna = data[u], data[v]
print u_dna, v_dna
if is_k_overlap(u_dna, v_dna, k):
edges.append((u,v)) if is_k_overlap(v_dna, u_dna, k):
edges.append((v,u)) return edges print k_edges(data, 3)
方法二:
# coding=utf-8
### 12. Overlap Graphs ###
from collections import OrderedDict
import re def overlap_graph(dna, n):
edges = []
for ke1, val1 in dna:
for ke2, val2 in dna:
if ke1 != ke2 and val1[-n:] == val2[:n]:
edges.append(ke1 + '\t' + ke2)
return edges dna = OrderedDict()
with open('12.txt') as f:
for line in f:
line = line.rstrip()
if line.startswith('>'):
seqName = re.sub('>', '', line)
dna[seqName] = ''
continue
dna[seqName] += line.upper() fh = open('rosalind_grph_output.txt', 'wt')
for x in overlap_graph(dna.items(), 3):
fh.write(x + '\n') fh.close()
方法三
# coding=utf-8
seq_list = []
stseq = ''
for line in open('12.txt'):
if line[0] == '>':
if stseq != '':
seq_list.append([stname, stseq])
stseq = ''
stname = line[1:-1]
else:
stseq = stseq + line.strip('\n')
seq_list.append([stname, stseq])
l = len(seq_list) for i in range(0, l):
for j in range(0, i):
if seq_list[i][1] == seq_list[j][1]:
continue
if seq_list[i][1][0:3] == seq_list[j][1][-3:]:
print seq_list[j][0], seq_list[i][0]
if seq_list[i][1][-3:] == seq_list[j][1][0:3]:
print seq_list[i][0], seq_list[j][0]
12 Overlap Graphs的更多相关文章
- Mathematics for Computer Science (Eric Lehman / F Thomson Leighton / Albert R Meyer 著)
I Proofs1 What is a Proof?2 The Well Ordering Principle3 Logical Formulas4 Mathematical Data Types5 ...
- guava之cache
转自:http://ifeve.com/google-guava-cachesexplained/ 范例 01 LoadingCache<Key, Graph> graphs = Cach ...
- [Google Guava] 3-缓存
原文地址 译文地址 译者:许巧辉 校对:沈义扬 范例 01 LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() ...
- 迄今为止最硬核的「Java8时间系统」设计原理与使用方法
为了使本篇文章更容易让读者读懂,我特意写了上一篇<任何人都需要知道的「世界时间系统」构成原理,尤其开发人员>的科普文章.本文才是重点,绝对要读,走起! Java平台时间系统的设计方案 几乎 ...
- python 各模块
01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...
- Python Standard Library
Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...
- 在mybatis中写sql语句的一些体会
本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...
- 剖析虚幻渲染体系(12)- 移动端专题Part 2(GPU架构和机制)
目录 12.4 移动渲染技术要点 12.4.1 Tile-based (Deferred) Rendering 12.4.2 Hierarchical Tiling 12.4.3 Early-Z 12 ...
- The Daligner Overlap Library
/************************************************************************************\ * * * Copyrig ...
随机推荐
- ballerina 学习二十二 弹性服务
主要包含断路器模式,负载均衡模式,故障转移,重试 Circuit Breaker 参考代码 import ballerina/http; import ballerina/log; import ba ...
- Kotlin Android学习入门
1.基本语法 https://github.com/mcxiaoke/kotlin-notes/blob/master/kotlin-tutorial-basic.md 2.推荐两篇Kotlin An ...
- Java 权限框架 Shiro 实战一:理论基础
Apache Shiro 官网地址:http://shiro.apache.org/ Apache Shiro is a powerful and easy-to-use Java security ...
- 视频支持拖动进度条播放的实现(基于nginx)
http协议下的flv/mp4流式播放支持的三个要点: 1 服务器端要支持flv/mp4流式播放,现在nginx或者lighttpd都是支持这样的应用的,还支持mp4的流式播放(默认编译版本一般都是打 ...
- 安卓控件获取器uiautomatorviewer初体验:"unable to connect to the adb. check if adb is installed correctly"
解决方法:转自:https://plus.google.com/108487870030743970488/posts/2TrMqs1ZGQv Challenge Accepted:1. Screen ...
- python3.3.5x64+win2003x64+aliyun oss sdk安装步骤
参考文章:https://help.aliyun.com/document_detail/32026.html?spm=5176.doc31890.6.690.S6ZrRn 1.安装python3.3 ...
- VPS(Centos6)连ROS做GRE隧道完整版
国内徐庄1.1.1.1 内网地址192.168.0.0/16 gre隧道适配器地址 172.16.0.45 国外2.2.2.2内网地址无 gre隧道地址172.16.0.46 国外 cent ...
- Java之dom4j的简单解析和生成xml的应用
一.dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,它的性能超过sun公 ...
- FancyButtons一个漂亮按钮的库
一个功能强大且全面的按钮控件,是目前我见过的最好使的按钮. 支持给按钮添加图标,并且可通过属性设置手指按钮的效果,不需要在写<selector>文件. 项目地址:https://git ...
- django-渲染页面+locals
from django.shortcuts import render, redirect from django.views import View from django.http import ...