三胞胎的系统发育树构建

时间:2012-10-24 21:36:39

标签: algorithm tree phylogeny

我已经完成了编写一个简短程序来创建一个系统发育树(叶子节点中的所有数据)的任务,给出了三元组的数据集,形式为( b c a ),其中 a b c 的最不常见的祖先。

我有一份Aho,Sagiv,Szymanski和Ullman的论文“从最低共同祖先推断一棵树,应用于关系表达式的优化”(SIAM J. Computing vol 10 no.3,1981年8月)。我已经对算法的描述进行了中途处理,但我仍然坚持标记为“归纳”的部分,其中叶子是由它们共同的祖先选择的。在线查找信息发现我的页面往往会跳过这一部分。我认为这很明显,我错过了什么?

到目前为止我所拥有的(在perl中,尚未在子程序中分解):

use strict;
use warnings;
use Graph; 
use Tree::DAG_NODE;

my @triplets;
while (<>) {
    push @triplets, [ split ];
}

#
# In order to generate the G(L) extract the first two
# columns(edges) of @triplets to make the edges of the auxiliary
# graph. Then pass this array of edges to the Graph constructor.
#
my @auxiliary_edges = map { [@$_[0,1]] } @triplets;

my $graph = Graph->new(
    undirected => 1,
    edges => \@auxiliary_edges
);

my @components = $auxiliary_graph->connected_components;

die "No Tree!" if (@components == 1);     # No tree!

my $root = Tree::DAG_Node->new;
$root->name('_ROOT');

#
# Each connected component is a set of leaves.
#
for my $component (@components)
{
    print "Component (leaf set): [", join(", ", @$component), "]\n";

    #
    # To be written: induced(), which is the heart of my problem,
    # and add_phylo_tree(), which isn't.
    #
    my @matches = induced(\@triplets, $component);
    add_phylo_tree($root, @matches);
}

print_tree($root);    # To be written. I'm using Data::Dumper right now.
exit(0);

数据文件:

b c a
a c d
d e b

搜索(https://www.google.com/search?q=phylogenetic+tree+from+triplets是典型的)到目前为止还没有获得有用的信息,尽管Triplet Methods(PDF)接近(我怀疑图中有错误)。

我还阅读了Snir和Rao撰写的“使用Max Cut来增强生根树的一致性”,IEEE / ACM Computedional Biology and Bioinformatics Transactions,vol 3 no。 2006年10月4日至12月),这有助于澄清一些问题,但不是那个阻止我的问题。

谢谢。

0 个答案:

没有答案