1D/1D动态规划

news/2024/11/23 2:40:31/

介绍

1 D / 1 D 1D/1D 1D/1D动态规划,就是指状态数为 O ( n ) O(n) O(n),转移为 O ( n ) O(n) O(n)的动态规划方程。一般的情况下求解的时间复杂度为 O ( n 2 ) O(n^2) O(n2),但是,通过优化可以使时间复杂度降到 O ( n l o g n ) O(nlogn) O(nlogn)甚至 O ( n ) O(n) O(n)。下面来讲一讲 1 D / 1 D 1D/1D 1D/1D动态规划中的决策单调性优化。

讲解

在做DP题的时候,我们经常会遇到形如这样的DP式:

f ( i ) = min ⁡ j = 1 i − 1 f ( j ) + w j , i f(i)=\min\limits_{j=1}^{i-1}f(j)+w_{j,i} f(i)=j=1mini1f(j)+wj,i

关于决策单调性,有一下这样一个性质:

k ( i ) k(i) k(i)表示状态 i i i取到最优值时的决策,则

∀ i ≤ j , k ( i ) ≤ k ( j ) \forall i\leq j,k(i)\leq k(j) ij,k(i)k(j)当且仅当:

∀ i ≤ j , w i , j + w i + 1 , j + 1 ≤ w i + 1 , j + w i , j + 1 \forall i\leq j,w_{i,j}+w_{i+1,j+1}\leq w_{i+1,j}+w_{i,j+1} ij,wi,j+wi+1,j+1wi+1,j+wi,j+1

其中有涉及到四边形不等式的知识,大家可以自行学习,这里不再赘述。

如果 w w w数组满足这个性质,则我们可以用决策单调性优化来降低其时间复杂度。

首先,我们可以从性质入手。显然满足 k ( i − 1 ) ≤ k ( i ) k(i-1)\leq k(i) k(i1)k(i),所以在枚举 i i i的时候,可以从 k ( i − 1 ) k(i-1) k(i1)开始枚举。虽然这样能减少枚举次数,但在最坏情况下,时间复杂的还是会达到 o ( n 2 ) o(n^2) o(n2)

怎么办呢?我们换一种角度思考。在每次求出一个 f ( i ) f(i) f(i)时,可以考虑它能够更新的状态有哪些。即使中途更新后的决策有可能不是最优的,但整个过程结束后,最终的结果肯定是最优的。

因为满足单调性, f ( i ) f(i) f(i)能够更新的第一个状态到全部状态的最后一个状态这个区间内 f ( i ) f(i) f(i)都能更新。所以,我们可以用栈来维护数据。栈中的每个元素保存一个决策能更新到的起始位置和终止位置。当插入一个新位置时从栈中最后一个元素扫描,如果新决策能更新栈尾的决策的起始点,则将栈尾的元素删除出栈;如果不能更新,则在栈尾元素的起始位置和终止位置中二分查找第一个点 t t t,使该点能够被新决策更新。栈尾决策的终止点改为 t t t前一个点,新元素的起始点为 t t t,终止点为最后一个点。

于是,DP式求解的时间复杂度就从 O ( n 2 ) O(n^2) O(n2)优化到了 O ( n l o g n ) O(nlogn) O(nlogn)

例题[HNOI2008]玩具装箱(附题解)


http://www.ppmy.cn/news/149123.html

相关文章

深度学习之3D卷积神经网络

一、概述 3D CNN主要运用在视频分类、动作识别等领域,它是在2D CNN的基础上改变而来。由于2D CNN不能很好的捕获时序上的信息,因此我们采用3D CNN,这样就能将视频中时序信息进行很好的利用。首先我们介绍一下2D CNN与3D CNN的区别。如图1所示…

【一】1D测量 Measuring——meature_pairs()算子

😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 Halcon算子太多,学习查找都没有系统的学习查找路径,本专栏主要分享Halcon各类算子含义及用法,有…

【一】1D测量 Measuring——measure_pos()算子

😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 Halcon算子太多,学习查找都没有系统的学习查找路径,本专栏主要分享Halcon各类算子含义及用法,有…

基于卡尔曼滤波实现线性目标跟踪

文章目录 前言卡尔曼滤波基本推导运算 实现目标检测卡尔曼预测器ID分配器(跟踪器) 完整代码代码总结 前言 一个需求,在一个稳定的场景当中,实现目标检测计数算法。 任务点: 实现目标检测完成对不同类别的物品进行计数…

用于函数优化的一维 (1D) 测试函数

【翻译自 : One-Dimensional (1D) Test Functions for Function Optimization】 【说明:Jason Brownlee PhD大神的文章个人很喜欢,所以闲暇时间里会做一点翻译和学习实践的工作,这里是相应工作的实践记录,希望能帮到有…

数据结构—链表的相关理论点

链表(linked list)是一种常见的数据结构,用于实现电脑的动态内存分配。链表通过指针相互连接节点(Node),而该节点内保存了数据。 链表通常由头节点(head)和尾节点&#xff0…

vue 单点登录的方法

vue 单点登录的方法 当我们在使用 vue开发项目时,一般都是只有一个用户帐号,如果要实现多个帐号的单点登录,可以使用 Session和 LocalStorage这两个技术。这两个技术在实现单点登录时,都需要有一个用户名和一个密码,而…

【Web服务器集群】基于Nginx搭建LNMP架构

文章目录 一、安装 MySQL 数据库1. 安装Mysql环境依赖包2. 创建运行用户3. 编译安装4. 修改mysql 配置文件5. 更改mysql安装目录和配置文件的属主属组6. 设置路径环境变量7. 初始化数据库8. 添加mysqld系统服务9. 修改mysql 的登录密码10. 授权远程登录 二、编译安装 nginx 服务…