二叉树问题,发表下看法!
二叉树问题,发表下看法.58.计算分子生物学(CMB)正在研究遗传基因的数据处理。对于两种链之间的金花关系,如果他们相差不大,我们就说他们有亲缘关系。我们可以用树形像地描述这种关系。组现在上面,他们的后裔依次排列。这样的树叫做进化树。
种系遗传学的一个任务就是从给出的生物链里推断出进化树。我们将问题简化一些,给出一个树形结构和树的n片叶子,他是一颗完全二叉树(n总是2的指数)。每片叶子都是含氨基酸的一个序列(如下面所示的单字符编码),所有序列的长度相等(l表示长度)。你的任务是找出拥有共同祖先的序列,且花费最少。
计算花费的方法:每一个树的内节点都标记为长度为l的一个序列。树每边的花费是指,该边两端的两个结点序列中,对应的位置氨基酸不相同的个数。总耗费就是每边的花费总和。树的根结点就是所有序列公共的祖先。但最佳的公共祖先是总花费最小的公共祖先。
输入格式:
输入有多组测试数据。对每组测试数据,第一行是两个整数n和l,分别表示树叶的序列数及序列的长度。输入n=l=0结束。另外,1≤n≤1024,1≤l≤1000。接下来是含有含氨基酸字母的n行长度为 l的字符串。从左边到右边,构成完全二叉树。
输出格式:
对每组测试数据,输出最佳的公共祖先和最小总花费。
输入样例:
4 3
AAG
AAA
GGA
AGA
4 3
AAG
GGA
AAA
AGA
2 1
W
W
1 1
Q
4 3
AAG
AGA
AAA
GGA
4 1
A
R
A
R
输出格式样例:
AGA 3
AGA 4
AGA 4
R 2
W 0
Y 1
Q 0