1D1D动态规划 O(nlogn) 二分栈优化

本文介绍了如何使用二分栈优化1D1D动态规划问题,将复杂度从O(n^2)降低到O(nlogn)。通过决策的单调性证明和二分更新状态的方法,详细阐述了优化过程。
摘要由CSDN通过智能技术生成

虽然我所写的在《1D1D动态规划优化初步》已经讲的很详细了,但是因为最近又考到了一回,我还是写到这里来。

1D1D 方程,即所谓 f[i] = max or min {f[i '] + x[i '][i]} ,显然裸做是平方的复杂度。

首先的条件就是决策的单调性。这一点不多讲,若不能数学证明则打表或对拍证明。

然后就是决策集合的单调,这决定了可以二分,即将复杂度从 O(n * n) 降到 O(nlogn) 的关键。其实这也决定了可以用一种常数性的优化,即从上一个决策开始枚举状态转移,不过相较于 nlogn 的复杂度还是太慢,所以不多赘述。

首先将最初是决策加入决策集合(用一个队列表示),范围适用于全体状态。

接着用集合中的状态更新绝对可以更新的状态。接着,用当前所得到的状态去更新决策集合中的状态。因为决策集合是单调的,所以可以二分更新。

接着重复以上两步,直到所有的状态都被更新完。

总状态数为 n,每次二分的复杂度不超过 O(lo

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值