生信刷题之ROSALIND——Part 3

news2024/11/25 13:39:09

目录

  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TF卡目录显示文件夹变0字节的方法

关于电脑上的目录打不开是什么原因&#xff0c;电脑目录打不开是什么原因这个许多人还不清楚&#xff0c;今天小编来为大家解答目录打不开状况&#xff0c;此刻让好多人一起来瞧瞧吧&#xff01; TF卡目录显示文件夹变0字节的方法 工具/软件&#xff1a;sayRecy 步骤1&#xff…

ref的使用与数组中的最全的使用方法

目录 1.ref的使用 什么是 ref 引用&#xff1f; 使用ref引用组件实例 2. this.$nextTick(cd) 方法 数组中的方法 1.some方法 --- 查找到目标元素后就停止后面的查找 2.every----判断每一项是否都满足要求 3.reduce方法 4. filter()方法 5. map()方法 6. forEach()方法…

2023年第十二届数据技术嘉年华(DTC)资料分享

第十二届数据技术嘉年华&#xff08;DTC 2023&#xff09;已于4月8日在北京圆满落幕&#xff0c;大会围绕“开源融合数智化——引领数据技术发展&#xff0c;释放数据要素价值”这一主题&#xff0c;共设置有1场主论坛&#xff0c;12场专题论坛&#xff0c;68场主题演讲&#x…

低调且强大——JNPF低代码平台

前言 先说说很多人为什么要用低代码平台。大部分的反馈是“懒”&#xff0c;其次就是后台管理这东西吧&#xff0c;来来回回就那些东西&#xff0c;查询/表单/表格/弹窗之类的&#xff0c;加上一些增删改查的逻辑。很多人表示&#xff0c;呆过的公司好几家了&#xff0c;后管的…

《低代码PaaS驱动集团企业数字化创新白皮书》-未来展望

未来展望 低代码PaaS发展的机遇 低代码开发可以帮助企业灵活搭建数字化应用&#xff0c;满足企业各业务部门的个性化、碎片化需求。根据IDC调研结果显示&#xff0c;当前低代码开发主要应用于面向企业内部的应用&#xff0c;占该应用总量的比例达到 11.6%&#xff1b;其次是面…

debug的用法和方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言debug三种方式 1.按照条件输出 2.进入方法 3.回退到上一个方法 一、debug是什么&#xff1f;二、使用步骤1.方法debug 在条件输出的时候按照条件输出进入方法内…

idea好用插件分享——Bito-ChatGPT

文章目录 安装步骤&#xff1a;第一步&#xff1a;打开Setting第二步&#xff1a;选择Plugins&#xff0c;输入Bito&#xff0c;就可以搜索出来了&#xff0c;再点击安装第三步&#xff1a;安装完成回到IDEA主界面&#xff0c;右边区域可以看到Bito图标&#xff0c;点击展开&am…

Java---异常概述

&#xff08;一&#xff09;认识Java的异常 1、什么是异常 在使用计算机语言进行项目开发的过程中&#xff0c;即使程序员把代码写得尽善尽美&#xff0c;在系统的运行过程中仍然会遇到一些问题&#xff0c;因为很多问题不是靠代码能够避免的&#xff0c;比如&#xff1a;客户…

【软件工程】UML序列图

一.概述 序列图&#xff08;时序图&#xff09;是一种软件工程行化建模方法&#xff0c;用于可视化系统或应用程序中多个对象之间 的交互。在序列图中&#xff0c;每个对象都表示为竖直线&#xff0c;对象之间的消息则表示为水平箭头 从一个对象指向另一个对象。 序列图可以…

Canvas实现动态绘制圆周效果|实现奥运五环

步骤实现&#xff1a; 首先&#xff0c;创建一个 HTML 画布和一个 JavaScript 动画函数。 在画布上绘制一个圆。 定义一个变量来表示圆心的坐标和半径。 进行动画循环以更新圆心坐标&#xff0c;使其沿外圆周运动。 使用三角函数&#xff08;如 sin 和 cos&#xff09;来计…

如何带领小微企业在软件开发行业生存

文章目录 前言一、企业急需的技术人才需要掌握的技能二、人工智能开发者技能三、领导者需要掌握的知识和技能四、具备敏锐的技术视野的方法和途径五、人工智能技术论坛及组织六、机器学习相关论坛和组织七、新技术如何应用和落地1、了解新技术2、确定应用场景3、进行实践验证4、…

Pinia与Vuex区别、Pinia安装与使用

目录 一、Pinia和Vuex区别 二、Pinia使用state、getters、actions 1、安装使用Pinia 2、State 3、actions 4、getters 三、Pinia划分模块 1、目录结构 2、store/user.js 3、某组件使用 四、Pinia持久化存储 1、安装插件 2、store/index.js 3、store/user.js 4、…

Linux 内核设计与实现

文章目录 一、前言二、进程管理1、task_struct2、thread_info 三、调度四、系统调用五、内核数据结构1、kfifo2、映射3、二叉树 六、中断1、软中断2、tasklet3、工作队列4、下半部机制的选择5、下半部禁止与使能 七、内核同步方法1、原子操作2、自旋锁&#xff08;1&#xff09…

辛弃疾最经典的10首词

他&#xff0c;文能挥笔填词&#xff0c;武能上马杀敌&#xff1b; 他&#xff0c;被称为“词中之龙”&#xff0c; 他&#xff0c;一生赤子&#xff0c;追求收复山河&#xff1b; 他&#xff0c;是与苏轼齐名的豪放派词人&#xff1b; 他是辛弃疾。 辛弃疾一生怀着赤子之…

Bito:一款 iead/webstorm 神级插件,由 ChatGPT 团队开发,堪称辅助神器

前言&#xff1a; idea(后端)&#xff0c;webstorm(前端)中可以用的一款辅助插件&#xff1a;Bito 个人尝试体验效果&#xff1a; 优点是&#xff1a;可以自动完成一些场景代码。 缺点&#xff1a;太慢了&#xff0c;大部分时间一直转圈 摘取文档&#xff1a; 什么是Bito&…

UE4 架构初识(一)

UE引擎学习 一、基础框架 UObject: ​ UE创世&#xff0c;万物皆UObject&#xff0c;接着有Actor。UObject提供的元数据、反射生成、GC垃圾回收、序列化、编辑器可见&#xff0c;Class Default Object等&#xff0c;UE可以构建一个Object运行的世界。 Actor: 脱胎自Object的…

问题解决 | Failed to initialize NVML: Driver/library version mismatch

问题描述&#xff1a; Ubuntu20.04服务器上&#xff0c;一个docker容器正在训练模型&#xff0c;打开另外一个docker容器时&#xff0c;出现以下错误 Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to st…

数字设计小思 - 谈谈Latch:组合与时序逻辑的桥梁

前言 本系列整理数字系统设计的相关知识体系架构&#xff0c;为了方便后续自己查阅与求职准备。对于FPGA和ASIC设计中&#xff0c;避免使用Latch&#xff08;锁存器&#xff09;一直是个绕不开的话题&#xff0c;本文结合网上的文章&#xff0c;并根据示例介绍如何在实际设计中…

学习如何通过构建一个简单的JavaScript颜色游戏来操作DOM

学习如何通过构建一个简单的JavaScript颜色游戏来操作DOM 题目要求 我们将构建一个简单的颜色猜谜游戏。每次游戏启动时&#xff0c;都会选择一个随机的RGB颜色代码。根据游戏模式&#xff0c;我们将在屏幕上提供三个&#xff08;简单&#xff09;或六个&#xff08;困难&…

基于 SpringBoot + Vue 的智能停车场项目。

一、开源项目简介 基于 SpringBoot Vue 的智能停车场项目。 智能停车场管理平台&#xff01;科学计费 多种计费方案灵活切换&#xff0c;商场、小区、停车场等场景均适用&#xff01;无人值守 云端控制实现无岗亭模式下的车辆自主进出&#xff0c;降低人工成本&#xff01; …