生信刷题之ROSALIND——Part 3

2023-05-16

目录

  • 1、Mortal Fibonacci Rabbits
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output
  • 2、Overlap Graphs
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output
  • 3、Calculating Expected Offspring
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output
  • 4、Finding a Shared Motif
    • Problem
    • Sample Dataset
    • Sample Output
    • Code
    • Output
  • 5、Independent Alleles
    • Problem
    • Sample Dataset
    • Sample Output
    • example
    • Code
    • Output

1、Mortal Fibonacci Rabbits

Problem

回想一下Part 1“Rabbits and Recurrence Relations”中的斐波那契数的定义,它遵循循环关系F(n)=F(n-1)+F(n-2)。每对兔子在一个月内达到成熟,并在随后的每个月产生一对后代(一公一母)。现在假设所有兔子在m月后死亡,如图所示,当m=3时,意味着一对兔子在死亡之前只繁殖两次。

A figure illustrating the propagation of Fibonacci's rabbits if they die after three months.

Given: n,m为正整数,n≤100,m≤20

Return: 如果所有兔子都活了m个月,那么第n个月后剩下的兔子总数

Sample Dataset

6 3

Sample Output

4

Code

# Mortal Fibonacci Rabbits

def rabbits_number(n, m):
    # 前两个月兔子均为1对
    # python索引从0开始,列表第一个设置为0是为了让索引从1开始
    number_list = [0, 1, 1]
    for i in range(3, n+1):
        # m+1月之前,F(n)=F(n-1)+F(n-2)
        if i < m+1:
            number_list.append(number_list[i - 1] + number_list[i - 2])
        # m+1月时,F(n)=F(n-1)+F(n-2)-1
        elif i == m+1:
            number_list.append(number_list[i - 1] + number_list[i - 2] - 1)
        # m+1月之后,F(n)=F(n-1)+F(n-2)-F(n-m-1)
        elif i > m+1:
            number_list.append(number_list[i - 1] + number_list[i - 2] - number_list[i - m - 1])
    return number_list[n]


print(rabbits_number(6, 3))

with open("rosalind_fibd.txt", "r") as f:
    text = f.read().split()
    n = int(text[0])
    m = int(text[1])
    print(rabbits_number(n, m))

Output

4
2870048561233731259

2、Overlap Graphs

Problem

重叠图(overlap graph)是一个有向图(directed graph),其中集合中的每个字符串都由一个节点表示,如果s的某个后缀等于t的前缀,则节点s通过有向边连接到t。

Given: FASTA格式的DNA字符串集合,其总长度最多为10kbp

Return: The adjacency list corresponding to O3(计算一条序列最后3个碱基的与另一条序列的前面3个碱基是否相同,如果相同就将两条序列名称输出)

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

Code

# Overlap Graphs

def read_fasta(file):
    sequences = {}
    with open(file, "r") as f:
        for line in f:
            line = line.strip()
            if line[0] == ">":
                name = line[1:]
                sequences[name] = ""
            else:
                sequences[name] += line
    return sequences


def overlap_graph(dictionary, k=3):
    edges = []
    for name1 in dictionary:
        for name2 in dictionary:
            if name1 != name2 and dictionary[name1][-k:] == dictionary[name2][:k]:
                edges.append((name1, name2))
    return edges


dna_strings = read_fasta("code2_example.txt")
edges = overlap_graph(dna_strings)
for edge in edges:
    print(edge[0], edge[1])

print("------")

dna_strings = read_fasta("rosalind_grph.txt")
edges = overlap_graph(dna_strings)
for edge in edges:
    print(edge[0], edge[1])

Output

Rosalind_0498 Rosalind_2391
Rosalind_0498 Rosalind_0442
Rosalind_2391 Rosalind_2323
------
Rosalind_3127 Rosalind_7657
..........(省略)..........
Rosalind_3675 Rosalind_1200

3、Calculating Expected Offspring

Problem

在概率论和统计学中,一个离散性随机变量的期望值(或数学期望,亦简称期望,物理学中称为期待值)是试验中每次可能的结果乘以其结果概率的总和。换句话说,期望值像是随机试验在同样的机会下重复多次,所有那些可能状态平均的结果,便基本上等同“期望值”所期望的数。

例如,掷一枚公平的六面骰子,其每次“点数”的期望值是3.5,计算如下:

不过如上所说明的,3.5虽是“点数”的期望值,但却不属于可能结果中的任一个,没有可能掷出此点数。

Given: 六个非负整数,每个都不超过20000。按照顺序,六个给定的整数代表具有以下基因型的夫妇的数量:1.AA-AA 2.AA-Aa 3.AA-aa 4.Aa-Aa 5.Aa-aa 6.aa-aa

Return: 在假定每对夫妇正好有两个后代的情况下,在下一代中拥有显性表型的后代的期望数目。

Sample Dataset

1 0 0 1 0 1

Sample Output

3.5

Code

# Calculating Expected Offspring

def expected_offspring(str):
    lists = [int(i) for i in str.strip().split(" ")]
    # 每个基因型的夫妇生育带有显性基因孩子的概率
    prob = [1, 1, 1, 0.75, 0.5, 0]
    expected = 0
    for i in range(len(lists)):
        expected += lists[i] * prob[i]
    # 两个孩子
    expected = expected * 2
    return expected


example = "1 0 0 1 0 1"
print(expected_offspring(example))

with open("rosalind_iev.txt", "r") as f:
    given = f.read()
    print(expected_offspring(given))

Output

3.5
165791.0

4、Finding a Shared Motif

Problem

字符串集合的公共子字符串是集合中所有字符串的子字符串。例如,“CG”是“ACGTACGT”和“AACCGTATA”的公共子串,但它不是最长的公共子串;“CGTA”才是“ACGTACGT”和“AACCGTATA”最长的公共子串。注意,最长公共子串不一定是唯一的;举个简单的例子,“AA”和“CC”都是“AACC”和“CCAA”的最长公共子串。

Given: k(k≤100)个长度不超过1 kbp的FASTA格式的DNA串的集合。

Return: 集合中最长的公共子字符串。(如果存在多个,可以返回任意一个)

Sample Dataset

>Rosalind_1
GATTACA
>Rosalind_2
TAGACCA
>Rosalind_3
ATACA

Sample Output

AC

Code

# Finding a Shared Motif

def read_fasta(file):
    sequences = {}
    with open(file, "r") as f:
        for line in f.readlines():
            line = line.strip()
            if line[0] == ">":
                name = line[1:]
                sequences[name] = ""
            else:
                sequences[name] += line
    return sequences


def find_shared_motif(sequences):
    # 寻找最短的序列
    min_len = 100000
    shortest_seq = ""
    for seq in sequences.values():
        if len(seq) < min_len:
            min_len = len(seq)
            shortest_seq = seq
    # print(shortest_seq)

    # 将最短的序列所有非重复的子字符串存储到集合中
    # 集合中,重复的元素只保留一个
    shared_motif = set()
    for i in range(len(shortest_seq)):
        for j in range(i + 1, len(shortest_seq) + 1):
            shared_motif.add(shortest_seq[i:j])
    # print(shared_motif)

    # 将最短序列的子字符串分别与其余序列比较
    # 剔除集合中与其余序列没有重合的子字符串
    for seq in sequences.values():
        new_shared_motif = list(shared_motif)
        for fragment in new_shared_motif:
            if fragment not in seq:
                shared_motif.remove(fragment)
    # print(shared_motif)

    # 随机输出一个最长的公共子字符串
    max_len = 0
    longest_motif = ""
    for fragment in shared_motif:
        if len(fragment) >= max_len:
            max_len = len(fragment)
            longest_motif = fragment

    return longest_motif


example = read_fasta("code4_example.txt")
print(find_shared_motif(example))

seqs = read_fasta("rosalind_lcsm.txt")
print(find_shared_motif(seqs))

Output

CA
TAGGCTCCCTGTGGCTCCCATCAATGTGCCTCGTAATACT

5、Independent Alleles

Problem

自由组合定律和独立分配律(孟德尔第二定律)

从孟德尔的碗豆杂交实验可以得出以下结论: ①亲代父本与母本体内各有一成对因子(基因)可决定遗传特征。 ②此一成对因子在杂交的过程中会分开,重新进行组合。(第一定律) ③不同遗传特征的基因独立而不互相干扰。(第二定律)

Given: k , N 为正整数, k ≤ 7 , N ≤ 2 k k,N为正整数,k≤7,N≤2^k kN为正整数,k7N2k 亲代基因型为AaBb,有两个子一代,每个子一代又各产生两个子二代,以此类推,每代都与基因型为AaBb的个体交配。

Return: 在满足自由组合定律的前提下,第k代有至少N个AaBb基因型个体的概率。

Sample Dataset

2 1

Sample Output

0.684

example

当k=2,N=1时

亲代:AaBb × AaBb
子代基因型为AaBb的概率:
P(AaBb)=P(Aa)×P(Bb)=0.5×0.5=0.25

以x表达在n次试验中事件A出现的次数。x是一个离散型随机变量,例如0,1,2,…,n,其概率分布函数为
P ( x ) = C n x P x q n − x P(x) = C^x_nP^xq^{n-x} P(x)=CnxPxqnx
其中,
C n x = n ! x ! ( n − x ) ! C^x_n = \frac{n!}{x!(n-x)!} Cnx=x!(nx)!n!
我们称P(x)为随机变量x的二项分布,记作B(n,p)

所以,第2代一共有4个孩子,至少有1个AaBb基因型的概率为:
P = P ( 1 ) + P ( 2 ) + P ( 3 ) + P ( 4 ) = 0.684 P = P(1)+P(2)+P(3)+P(4) = 0.684 P=P(1)+P(2)+P(3)+P(4)=0.684
其中:
P ( 1 ) = C 4 1 p 1 ( 1 − p ) 3 = 4 × 0.25 × 0.7 5 3 = 0.4219 \begin{align*} P(1)&=C^1_4p^1(1-p)^3\\ &=4×0.25×0.75^3=0.4219 \end{align*} P(1)=C41p1(1p)3=4×0.25×0.753=0.4219
P ( 2 ) = C 4 2 p 2 ( 1 − p ) 2 = 6 × 0.2 5 2 × 0.7 5 2 = 0.2109 \begin{align*} P(2)&=C^2_4p^2(1-p)^2\\ &=6×0.25^2×0.75^2=0.2109 \end{align*} P(2)=C42p2(1p)2=6×0.252×0.752=0.2109
P ( 3 ) = C 4 3 p 3 ( 1 − p ) 1 = 4 × 0.2 5 3 × 0.75 = 0.0469 \begin{align*} P(3)&=C^3_4p^3(1-p)^1\\ &=4×0.25^3×0.75=0.0469 \end{align*} P(3)=C43p3(1p)1=4×0.253×0.75=0.0469
P ( 4 ) = C 4 4 p 4 ( 1 − p ) 0 = 1 × 0.2 5 4 × 0.7 5 0 = 0.0039 \begin{align*} P(4)&=C^4_4p^4(1-p)^0\\ &=1×0.25^4×0.75^0=0.0039 \end{align*} P(4)=C44p4(1p)0=1×0.254×0.750=0.0039

Code

# Independent Alleles


def factorial(n):
    """阶乘"""
    f = 1
    for i in range(1, n + 1):
        f = f * i
    return f


def combination(i, j):
    """二项式系数"""
    return factorial(i) / (factorial(j) * factorial(i - j))


def independent_alleles(k, n):
    p = 0
    # count 为第k代人数
    # pow(x,y) x的y次方的值
    count = pow(2, k)
    for i in range(n, count + 1):
        p += combination(count, i) * pow(0.25, i) * pow(0.75, count - i)
    return p


p = independent_alleles(2, 1)
print('%.3f' % p)

with open("rosalind_lia.txt", "r") as f:
    text = f.read().strip().split()
    k = int(text[0])
    n = int(text[1])
    p = independent_alleles(k, n)
    print('%.3f' % p)

Output

0.684
0.453

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生信刷题之ROSALIND——Part 3 的相关文章

  • Linux生产者消费者模型实现

    转载请注明出处 xff1a https blog csdn net mymottoissh article details 84181224 任何语言提及到多线程同步都离不开生产者 消费者模型 这也是针对许多现实问题建模用到的基础模型 这一
  • 使用CMD启动JAR后,出现定时器不执行问题

    SpringBoot项目中 使用了 64 Scheduled注解开启一个定时任务 在windows系统启动时 开始输出正常 当执行到输出控制台日志时 有时候会直接卡住线程不执行了 查了一圈发现是CMD的快速编辑引起的线程阻塞 解决办法 1
  • Flink开发中遇到的问题及解法

    1 当Source是Kafka的时候 xff0c 如何设置Source Operator的并发度 xff1f 如果没有指定 xff0c Source Operator的个数与集群中的TaskManager的个数相等 如果手动设置 xff0c
  • vue初学者代码格式报错

    报错内容 xff1a Do not use built in or reserved HTML elements as component id header
  • Ubuntu 设置su密码

    在使用su命令获取超级权限的时候提示输入密码 xff0c 在安装ubuntu的时候只设置了用户密码 xff0c 没记得有其他密码 这里需要给root用户重新设置密码 xff1a sudo passwd 然后输入密码即可
  • Spark MLlib学习(二)——分类和回归

    MLlib支持多种分类方法 xff0c 如二分类 多分类和回归分析等 问题类型 支持的方法 二分类 线性SVM 逻辑回归 xff0c 决策树 xff0c 随机森林 xff0c GBDT xff0c 朴素贝叶斯 多分类 决策树 xff0c 随
  • 关于onNewIntent你应该知道的

    一 API描述如下 大概意思是当Activity被设以singleTop模式启动 xff0c 当需要再次响应此Activity启动需求时 xff0c 会复用栈顶的已有Activity xff0c 还会调用onNewIntent方法 并且 x
  • 程序猿的情话

    世界上最遥远的距离 xff0c 是我在if里你在else里 xff0c 似乎一直相伴又永远分离 xff1b 世界上最痴心的等待 xff0c 是我当case你是switch xff0c 或许永远都选不上自己 xff1b 世界上最真情的相依 x
  • SpringBoot JPA实践之EntityManage查询返回自定义DTO

    在很多时候我更喜欢随意组合查询出来返回一个DTO对象的实现 xff0c JPA提供的多数查询均以返回Entity居多 xff0c 它提供的EntityManager对象可以实现将SQL语句查询的结果转换为自定义DTO对象 xff08 这与
  • 经典编程书籍(C++, 网络, Windows, Linux)【转载】

    书单中列举的都是相关领域的经典书籍 xff0c 必读之作 此书单的编辑参考了很多网站 xff0c 包括一些名家的推荐 xff0c 例如侯捷 xff0c 孟岩 xff0c 荣耀 xff0c 潘爱民等等 xff0c 在此也向这些前辈表示感谢 1
  • SpringBoot微服务框架概述

    SpringBoot微服务框架 2 Spring Boot 微服务框架的特点3 Spring Boot 应用场景4 SpringBoot的第一个应用5 Springboot引导类的main方法有什么作用 xff1f 6 SpringBoot
  • 使用Spring的注解方式实现AOP

    Spring对AOP的实现提供了很好的支持 下面我们就使用Spring的注解来完成AOP做一个例子 首先 xff0c 为了使用Spring的AOP注解功能 xff0c 必须导入如下几个包 aspectjrt jar aspectjweave
  • 如何正确有效的学习一门计算机语言?

    在这个互联网高速发展的社会 xff0c 越来越多的人喜欢上了IT行业 xff0c 认为计算机行业是一个高科技的 高薪的行业 的确如此 xff0c 但是系统的学习一门计算机语言 xff0c 并且把它用运用到真正的开发中去还真不是一件简单的事情
  • (二)为AI和机器学习创建Docker容器

    目录 介绍 基本镜像 创建Dockerfile 构建镜像 运行容器 总结 下载源文件 154 4 KB 介绍 Docker 等容器技术显着简化了软件的依赖管理和可移植性 在本系列文章中 xff0c 我们探讨了 Docker 在机器学习 ML
  • 自定义EF Core迁移历史记录表

    目录 背景 更改表名称和架构 更改列名称 添加具有默认值的列 添加必填列 关于代码示例 引用 下载源代码 13 9 KB 背景 实体框架核心通过在名为 EFMigrationsHistory 和架构 dbo 的表中添加日志来跟踪应用的迁移
  • 使用EF Core 6执行原始SQL查询

    目录 背景 现有选项 ExecuteSqlRaw 插入 更新 删除 FromSqlRaw FromSqlInterpolated 自定义数据库上下文扩展方法 ExecuteScalar ExecuteNonQuery FromSqlQuer
  • 仓库更新了,git pull拉取远端失败

    仓库更新了 span class token punctuation span git pull拉取远端失败 span class token operator span error span class token operator sp
  • xPath 用法总结整理

    最近在研究kafka xff0c 看了一堆理论的东西 xff0c 想动手实践一些东西 xff0c 奈何手上的数据比较少 xff0c 突发奇想就打算写个爬虫去抓一些数据来玩 xff0c 顺便把深入一下爬虫技术 之前写过一些小爬虫 xff0c
  • vi编辑器

    目录 简介 基本操作 1 移动光标 2 定位 3 删除 4 复制 5 查找
  • 使用libevent搭建简单http服务器

    64 使用libevent搭建简单http服务器 一 libevent 的下载 可通过官网直接进行下载libevent库 xff1b 例子使用的是V2 1 1版本 xff0c 下载完成后 xff0c 解压 xff1b 可以再解压目录下获取

随机推荐

  • C++动态链接库中的全局变量面试题

    其实主要问题是三个模块 xff1a 模块 a 静态库 a 模块 b 二进制 b 静态引用a 动态加载c 模块 c 动态链接库c 静态引用a 关键在于静态库a里有一个静态全局变量 xff0c 没错就是我们的日志模块 原先的这个静态的模块中的静
  • Linux 桌面修改文件mime类型图标

    在多数的Linux发行版中 xff0c 默认的桌面的文件类型图标着实不好看 xff0c 比如我常用的Linux之一Debian xff0c 默认文件类型图标就很不好看 如果我们自定义了一种mime类型的话肯定也是没有图标的啦 xff0c 下
  • 比 MyBatis 快了 100 倍

    比 MyBatis 效率快 100 倍的条件检索引擎 xff0c 天生支持联表 xff0c 使一行代码实现复杂列表检索成为可能 xff01 2开源协议 使用Apache 2 0开源协议 3界面展示 你的产品给你画了以上一张图 xff0c 还
  • 【GIT】GIT基础教程(新手必看)

    准备工作 1 首先要下载git xff0c git官网下载比较缓慢 xff0c 这里提供一个淘宝镜像的网站 https npm taobao org mirrors git for windows 里边有各种版本的git xff0c 选择与
  • Python常见内置类属性介绍

    文章目录 64 TOC 文章目录 什么是内置类属性一 dict 的用法二 name 的用法三 file 的用法 什么是内置类属性 当python创建一个类之后 xff0c 系统就自带了一些属性 xff0c 叫内置类属性 这些属性名用双下划线
  • win32应用程序和win32控制台应用程序

    win32应用程序是有窗体的 xff08 当然也可以没有 xff09 xff0c 有Windows消息循环机制的 而win32控制台应用程序只是在控制台下运行的程序 xff0c 类似以前dos的程序 Win32 Application和Wi
  • springBoot 启动指定配置文件环境多种方案

    springBoot 启动指定配置文件环境理论上是有多种方案的 xff0c 一般都是结合我们的实际业务选择不同的方案 xff0c 比如 xff0c 有pom xml文件指定 maven命令行指定 配置文件指定 启动jar包时指定等方案 xf
  • tigervnc黑屏及mate-session缺失

    1 项目信息 host os xff1a Kylin Server V10 arm64 2022 04 29 2 问题描述及原因分析 通过一下命令安装vnc server yum install tigervnc server 然后通过vn
  • (Java)集合工具类:Collections

    文章目录 一 Collections 简介二 Collections 操作实例1 实例操作一 xff1a 返回不可变的集合2 实例操作二 xff1a 为集合增加内容3 实例操作三 xff1a 反转集合中的内容4 实例操作四 xff1a 检索
  • Seata快速开始

    Seata分TC TM和RM三个角色 xff0c TC xff08 Server端 xff09 为单独服务端部署 xff0c TM和RM xff08 Client端 xff09 由业务系统集成 Seata Server 部署 步骤一 xff
  • 点击Anaconda中的Jupyter Notebook无法打开浏览器

    解决方法一 xff1a 通过修改配置文件来指定浏览器打开notebook 步骤 xff1a 打开anaconda promote 输入 xff1a jupyter notebook generate config 输出结果 xff1a Wr
  • 深度学习——入门经典案例《波士顿房价预测》深度解析

    一 深度学习 机器学习算法理论在上个世纪90年代发展成熟 xff0c 在许多领域都取得了成功应用 但平静的日子只延续到2010年左右 xff0c 随着大数据的涌现和计算机算力提升 xff0c 深度学习模型异军突起 xff0c 极大改变了机器
  • freemarker实现word文档模板动态生成

    携手创作 xff0c 共同成长 xff01 这是我参与 掘金日新计划 8 月更文挑战 的第29天 xff0c 点击查看活动详情 1 写在前面 很多时候 xff0c 我们可能需要根据一个word模板 xff0c 动态生成 xff0c 我们所需
  • 生信学习——R语言练习题-初级(附详细答案解读)

    题目目录 1 打开 Rstudio 告诉我它的工作目录 2 新建6个向量 xff0c 基于不同的数据类型 xff08 重点是字符串 xff0c 数值 xff0c 逻辑值 xff09 3 告诉我在你打开的rstudio里面 getwd 代码运
  • 生信学习——GEO数据挖掘

    步骤 STEP1 xff1a 表达矩阵ID转换STEP2 xff1a 差异分析STEP3 xff1a KEGG数据库注释完整代码 写在前面 按照生信技能树的学习路线 xff0c 学完R语言就该学习GEO数据挖掘了 有人说GEO数据挖掘可以快
  • 机器学习——基于python的鸢尾花SVM练习(包含超参数批量筛选、交叉验证)

    目录 1 最普通的SVM2 交叉验证 筛选超参数法一 xff1a cross val score法二 xff1a GridSearchCV xff08 推荐 xff09 3 完整代码 写在前面 虽然本人一直对机器学习感兴趣 xff0c 但是
  • python学习——tsv文件批量转为csv文件、csv文件列合并

    写在前面 近日在处理数据的时候发现有的文件为csv文件 xff0c 有的为tsv文件 xff0c 大概搜了一下了解到 xff1a TSV是用制表符 xff08 t xff09 作为字段值的分隔符 xff1b CSV是用半角逗号 xff08
  • PPI网络的构建与美化(String+Cytoscape)

    目录 写在前面一 使用string分析数据二 使用Cytoscape构建网络1 导入TSV文件2 Analyze Network3 Generate Style4 CytoNCA计算Betweenness 三 美化网络1 根据Between
  • 生信刷题之ROSALIND——Part 2

    目录 1 Counting Point MutationsProblemSample DatasetSample OutputCodeOutput 2 Mendel 39 s First LawProblemSample DatasetSa
  • 生信刷题之ROSALIND——Part 3

    目录 1 Mortal Fibonacci RabbitsProblemSample DatasetSample OutputCodeOutput 2 Overlap GraphsProblemSample DatasetSample Ou