Rosalind 040 Distances in Trees

2024-01-05 06:20
文章标签 trees 040 rosalind distances

本文主要是介绍Rosalind 040 Distances in Trees,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个问题涉及到图论中的树结构以及如何使用Newick格式来表示树。下面是关键概念的解释和解决问题的方法:

图论中的树理解

  1. 树中的唯一路径:在树这种图结构中,任意两个节点之间总是存在一条唯一的路径。这种唯一性是因为树是一个连通的、无循环的图。如果两个节点之间存在多条路径,就会形成一个循环,这在树中是不允许的。

  2. 在系统发育学中的应用:在系统发育学中,树用来表示物种或群体之间的进化关系。两个分类群(物种或群体)之间的距离通常被定义为树中连接它们的唯一路径上的边的数量。这对于理解进化距离非常重要。

Newick格式

Newick格式是一种表示树结构(特别是在系统发育学中)的简洁文本形式。它特别适用于未标记的树或内部节点未标记的树。

  • 有根树:在有根树中,连接到同一内部节点的叶子(外部节点)是邻居。Newick格式通过迭代地将这些节点合并为一个单一的节点来表示,合并节点的标签代表合并的叶子。
  • 无根树:对于无根树,可以选择任何一个内部节点作为树的根来表示。
  • 格式变化:根据节点是否被标记以及树是有根还是无根,格式可能会有所不同。

问题描述

给定一系列以Newick格式表示的树。每棵树后面跟着一对节点。我们的任务是找出每棵树中这两个节点之间的距离。距离定义为连接它们的唯一路径上的边的数量。

https://rosalind.info/problems/nwck/

解决方法

  1. 解析Newick格式:首先,你需要解析Newick格式来构建树。这涉及到根据文本表示创建节点和边。

  2. 查找距离:一旦树被构建,就在每棵树中找出指定节点之间的距离。这可以通过简单的深度优先搜索(DFS)或广度优先搜索(BFS)算法来完成,因为在树中任意两个节点之间都有唯一的路径。

  3. 返回距离:对每对节点在每棵树中计算并返回距离。

样本数据集解析

  1. 第一棵树: (cat)dog;dog cat

    • 这个Newick格式表示一个有两个节点(dogcat)的树,其中 catdog 的邻居(或子节点)。
    • 结构可以视为 dog 是根节点,cat 是它的直接子节点。
    • 查询的节点对是 dogcat
  2. 第二棵树: (dog,cat);dog cat

    • 这个Newick格式表示一个有两个叶子节点(dogcat)的树,这两个节点都是同一个未命名的内部节点的邻居。
    • 结构可以看作是一个根节点(未命名),它有两个子节点 dogcat
    • 查询的节点对同样是 dogcat

计算距离

在树中,两个节点之间的距离是连接这两个节点的唯一路径上的边的数量。

  1. 第一棵树的距离:

    • dogcat 的路径只有一条边,因此距离是 1。
  2. 第二棵树的距离:

    • dogcat 需要经过根节点,因此路径上有两条边(dog 到根节点,根节点到 cat),所以距离是 2。

代码:

这段代码是用于解析Newick格式的树,并计算其中两个指定节点之间的距离。这段代码使用了BioPython库中的Phylo模块,这是一个专门用于解析和操作生物信息学中的树结构(如系统发育树)的工具。

关键代码:

  • ancestor = tree.common_ancestor(x, y): 找到节点xy的最近公共祖先。
  • out.append(len(ancestor.get_path(x)) + len(ancestor.get_path(y))): 计算从最近公共祖先到节点xy的路径长度,并将它们的和添加到out列表中。
from io import StringIO
from Bio import Phylo
c = open(r'').read().rstrip().split('\n\n')
out = []
for i in c:t, x, y = i.split()tree = Phylo.read(StringIO(t), 'newick')ancestor = tree.common_ancestor(x, y)out.append(len(ancestor.get_path(x)) + len(ancestor.get_path(y)))
print(out)

这篇关于Rosalind 040 Distances in Trees的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571922

相关文章

E - Xor Distances

树和 xor 有些地方 很契合🔥。。 比如树上距离。。很容易想到减去lca公共的那段。 而xor 他异或 刚好也是会抵消公共部分的。。。 题目链接 #include <bits/stdc++.h>using namespace std;#define int long long#define ll __int128_t#define ar array<int, 2>#define a

【LeetCode】Unique Binary Search Trees I II

1、Unique Binary Search Trees  Total Accepted: 11405 Total Submissions: 32197 My Submissions Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example

leetcode-Unique Binary Search Trees

Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For example, Given n = 3, there are a total of 5 unique BST's. 去网上搜n个二叉搜索树的递推公式或者Catalan数,可以由h(n)=C(

Unique Binary Search Trees II问题及解法

问题描述: Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n. 示例: Given n = 3, your program should return all 5 unique BST's shown below. 1

Unique Binary Search Trees问题及解法

问题描述: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? 示例: Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1\

Codeforces Round #236 (Div. 2) B. Trees in a Row

B. Trees in a Row time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output The Queen of England has n trees growing in a row i

HDU 2841 Visible Trees 容斥

题意(一开始也没怎么看懂): 一个人站在(0,0)处,树从(1,1)点开始排,共有m*n棵。如果两棵树在同一视线上(意思是两个点和(0,0)的斜率相同),则只看到前面一棵树,问你那个人能看到几棵树。 思路: 容斥。 简单分析之后,其实本质就是让你求gcd(x,y)=1有几组。(x,y)和(y,x)算两种。 这题和HDU 1695差不多,只不过那题(x,y)和(y,x)算一种。

Bio-Info每日一题:Rosalind-05-Computing GC Content

🎉 进入生物信息学的世界,与Rosalind一起探索吧!🧬 Rosalind是一个在线平台,专为学习和实践生物信息学而设计。该平台提供了一系列循序渐进的编程挑战,帮助用户从基础到高级掌握生物信息学知识。无论你是初学者还是专业人士,Rosalind都能为你提供适合的学习资源和实践机会。 网址:https://rosalind.info 你是否想像专业人士一样分析DNA序列?这里有一个简单的任务来

Bio-Info 每日一题:Rosalind-04-Rabbits and Recurrence Relations

🎉 进入生物信息学的世界,与Rosalind一起探索吧!🧬 Rosalind是一个在线平台,专为学习和实践生物信息学而设计。该平台提供了一系列循序渐进的编程挑战,帮助用户从基础到高级掌握生物信息学知识。无论你是初学者还是专业人士,Rosalind都能为你提供适合的学习资源和实践机会。网址:https://rosalind.info 你是否想像专业人士一样分析DNA序列?这里有一个简单的任务来帮

UVA 10303 How Many Trees?

题意:设f[i]表示一共有i个元素时二叉搜索树的个数,那么依次取1~n-1作为根节点,那么左右子树元素的个数就分别是(0,n-1),......,所以f[n] = f[0]*f[n-1]+f[1]*f[n-2]...+f[n-1]f[0],其实也就是Catalan数,高精度的计算,递推公式是f[n]=(4n-2)/(n+1)*f[n-1] #include <iostream>#include