小的简约问题: 找到进化树中内部顶点的最简约标记。 输入:树T,每个叶子用m字符串标记。 输出:标记树T的内部顶点,最小化简约分数。
我指的是这篇文章底部的图片。我只是想按照提供的例子。我理解第一步是标记四个叶子A,C,T,G(因为我们提供了这个输入),我们这样做是通过将适当的一个字符设置为0而将字符的其余部分设置为无穷大在每片叶子的数组中。
在图像的下一步中,我们分析了不是根的两个内部节点。我也理解这个过程。例如,在左内部节点中,我们得到阵列A / 9,T / 7,G / 8,C / 9。这四个值中的每一个都计算为左孩子(A)和右孩子(C),加上分数罚分。例如,A / 9被视为0 + 0(左儿童得分为0 + A-> A的罚分),加上0 + 9(右儿童得分为0 + C-> A的惩罚)。 / p>
然而,我感到困惑的是如何计算根。这是一种不同于考虑具有无穷大值的叶子的情况(这样添加一个小的惩罚没有区别,甚至没有考虑无穷大分数。)
当我把它画出来时,似乎根的A / 14,T / 9,10 / G,15 / c是这样计算的:对于A / 14,我们采用最少四个可能的值。第一个值是左右儿童是A(9 + 7 + 2(0)= 16)的情况,第二个值是左右儿童为T的情况(7 + 2 + 2(3)= 14 ),第三个值是左右儿童是G的(8 + 2 + 2(4)= 18),第四个值是左右儿童是C的情况(9 + 8 + 2(9) = 35)。这四个值中的最小值是min(16,14,18,35)= 14,这意味着如果根是A,则左右子节点为T.
如果我以这种方式继续,我会获得与根(14,9,10,15)的书相同的值,其中最小值为9,表示根是T(并且它的两个孩子也是T)。
然而,这是正确的逻辑吗?我觉得可以有更多的组合,而不仅仅是探索根的每个字符的四个值。我特别感到奇怪的是,我只会考虑这四种情况,即儿童必须是同一个角色(A和A,T和T,G和G,C和C)。
所以我的问题是,这只是一个巧合,这可以解决这个问题吗?如果它是正确的,为什么我不需要考虑这两个孩子角色不同的情况?如果它不正确,在这个例子中计算根的正确方法是什么(我更喜欢看到与这个特定问题相关的数字,因为我仍然试图找出复杂的方程式。)
谢谢。
如果难以阅读,后序中的顶点数组为[0,inf,inf,inf],[inf,inf,inf,0],[9,7,8,9],[inf ,0,inf,inf],[inf,inf,0,inf],[7,2,2,8],[14,19,10,15]
答案 0 :(得分:3)
嗯,这个答案有点晚,但无论如何我都会说话。
是的,您的解决方案恰好可行,这只是巧合。要计算树中内部节点的A值,您应该考虑左分支中从A到{A,C,T,G}的最小成本,加上从A到{A,C的最小成本,T,G}在右侧分支。
因此对于根节点,要计算A:
的值LEFT RIGHT
0 3 4 9 0 3 4 9
9 7 8 9 7 2 2 8
------- ---------
9 10 12 18 7 5 6 17 min = 9+5 = 14 (A)
然后,对{C,T,G}重复此过程以获取其他值。
LEFT RIGHT
3 0 2 4 3 0 2 4
9 7 8 9 7 2 2 8
------- ---------
12 7 10 13 10 2 4 12 min = 7+2 = 9 (T)
4 2 0 4 4 2 0 4
9 7 8 9 7 2 2 8
------- ---------
13 9 8 13 11 4 2 12 min = 8+2 = 10 (G)
9 4 4 0 9 4 4 0
9 7 8 9 7 2 2 8
------- ---------
18 11 12 9 16 6 6 8 min = 9+6 = 15 (C)