关于算法导论15.4的步骤2中为什么可以通过求两者的最大值来合并定理15.1

本文深入解析了《算法导论》中关于最长公共子序列(LCS)算法的细节,特别是当两个序列末尾元素不匹配时的处理逻辑。通过将定理15.1细化为三种情况,解释了为何取两个子问题LCS的较大值即可获得原问题的解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在算法导论(第三版)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,因为此时两者长度是相等的,因此取两者较大者仍然是两者中随机一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值