三维偏序下求最长“上升”序列的分治做法讲解

本文通过三维箱子模型解释如何利用分治和归并算法求解最长“上升”序列问题。首先从dp角度出发,然后将问题放入分治结构,通过中序遍历和树状数组加速,将复杂度优化到O(nlog2n)。
摘要由CSDN通过智能技术生成

Part 0

​ 用一个三维箱子最长套娃来具体化这个问题。
​ 首先,做一个人畜无害的假设:箱子之间的三维长度彼此不同。约定每个箱子的三维用 x y z xyz xyz 表示。

Part 1

​ 让我们从一个 d p dp dp 做法讲起:

​ 记 f [ i ] f[i] f[i] 表示第 i i i 个箱子最多能做几层套娃,那么假如能装进第 i i i 个箱子的那些箱子(记为 j j j)的 f [ j ] f[j] f[j] 都已经被正确计算了 [ 1 ] ^{[1]} [1],那么有 f [ i ] = max ⁡ ( f [ j ] ) + 1 f[i]=\max(f[j])+1 f[i]=max(f[j])+1 。这样 f [ i ] f[i] f[i] 也就被正确计算了。

​ 这条式子可以理解为为箱子 i i i 选择一个箱子 j j j ,使得箱子 i i i 直接套在 j j j 外面。

​ 如果按照 x x x 升序计算箱子的 f [ i ] f[i] f[i],遍历前面的所有箱子,看是否有能装进 i i i 的,就能满足上面这个条件 [ 1 ] [1]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
偏序集中,我们首先要理解上界和下界的概念。 在一个偏序集中,如果存在元素a,使得对于任意的元素b,如果b小于等于a,则可以说a是b的上界。换句话说,对于偏序集中的任意元素b,都有b≤a。同样地,如果存在元素c,使得对于任意的元素d,如果d大于等于c,则可以说c是d的下界。换句话说,对于偏序集中的任意元素d,都有d≥c。 偏序集中,如果元素a是b的上界,而元素c是d的下界,则我们可以说a是b和d的上界,c是b和d的下界。这里b和d可以是不同的元素。 最小上界指的是在所有的上界中,最小的那个上界。最大下界则指在所有的下界中,最大的那个下界。 对于给定元素b,在偏序集中求其上界和下界,我们首先要找到满足条件的元素a和c。然后从所有满足条件的a中找到最小的上界,记为min_s,再从所有满足条件的c中找到最大的下界,记为max_i。这样就得到了b的上界下界。 需要注意的是,在一个偏序集中,可能存在多个上界和下界。因此,我们要找到最小的上界和最大的下界,以确保它们能够覆盖所有的上界和下界。 总结起来,在偏序集中求解元素b的上界下界的步骤如下: 1. 找到满足条件的a和c,使得b≤a和d≥c。 2. 从所有满足条件的a中找到最小的上界,记为min_s。 3. 从所有满足条件的c中找到最大的下界,记为max_i。 4. 最小上界为min_s,最大下界为max_i。 这样就可以求得元素b的上界下界的最小上界和最大下界。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值