小简约问题:在进化树中找到内部顶点的最简约标签。输入:树 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 的惩罚)。
然而,我感到困惑的是如何计算根。这是与考虑具有无穷大值的叶子不同的情况(这样添加一个小的惩罚没有区别,甚至不考虑无穷大分数)。
当我把它画出来时,似乎根的 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, 9, 10, 15]