在算法导论(第三版)15.4的步骤2中的第一段有语句“如果xm != yn,我们必须求解两个子问题:求Xm-1和Y的一个LCS与X和Yn-1的一个LCS。两个LCS较长者即为X与Y的一个LCS。”
读到这里,不知读者是否也存在疑惑:为什么两个的较大值可以代替对定理15.1中的2、3点呢?就是说如何由定理15.1中的2、3点推出两个LCS较长者即为X与Y的一个LCS呢?
为了回答此问题,首先列出定理15.1的2和3:
2.如果xm != yn,那么zk != xm 意味着Z是Xm-1和Y的一个LCS。
3.如果xm != yn,那么zk != yn意味着Z是X和Yn-1的一个LCS。
如果详细分析,我们会发现上面的两点其实可以细分为三点:
①zk = xm,zk != yn
②zk != xm,zk = yn
③zk != xm,zk != yn
②∪③ => Z是Xm-1和Y的一个LCS
①∪③ => Z是X和Yn-1的一个LCS
如果某次计算属于情况①,则X和Yn-1的LCS是Z,X和Yn-1的LCS即是X和Y的LCS。因此,取两个的较大者就会是X和Yn-1的一个LCS,也就是X和Y的LCS。
如果某次计算属于情况②,与①类似。
如果某次计算属于情况③,则Z可以是Xm-1和Y的一个LCS,也可以是X和Yn-1的一个LCS,因为此时两者长度是相等的,因此取两者较大者仍然是两者中随机一个。