首页 > 其他分享 >关于斜率优化的一些杂谈

关于斜率优化的一些杂谈

时间:2023-10-24 21:33:10浏览次数:33  
标签:杂谈 斜率 凸壳 维护 优化 转移 李超树

这里并不是在详细地介绍斜率优化,只是一些瞎扯,想真正系统学习斜率优化的话请去阅读其他文章。

斜率优化是众多 dp 优化方式中较为常见的一种,让我们不妨回忆一下它的形式:

\[dp(i)=\min/\max(a(i)\times b(j)+c(i)+d(j)+C) \]

上式中,\(a,b,c,d\) 分别为只跟 \(i\) 或 \(j\) 相关的函数,\(C\) 是一个与 \(i\) 和 \(j\) 都无关的常量。

对于此类转移,传统的优化方式通常是将每个决策点看作二维平面上的一个点,维护一个上/下凸壳,将每次转移看作是一条直线去切这个凸壳,求出第一个切点并转移。

而维护的方式也需要根据题目的不同来改变,比如:

  • 当每次转移对应的直线斜率 \(k\) 和每次加入点的横坐标 \(x_i\) 都是单调递增的时,我们可以直接使用一个单调队列维护凸壳,每次转移直接踢掉不优的决策点后取出队头即可。
  • 当每次转移对应的直线斜率 \(k\) 不再单调,但是每次加入点的横坐标 \(x_i\) 还是单调的时,我们还是可以使用单调队列维护凸壳,但是转移时我们需要通过二分找出最优决策点。
  • 如果两者都不单调,那么我们需要使用平衡树或 CDQ 分治的方式来维护凸壳,每次转移也需要二分来寻找切点。

这么多种情况,使得我们在实现的时候需要仔细考虑凸壳的维护方式,并且维护凸壳过程的本身就需要很多的讨论与细节,而且凸壳的具体形状也是我们必须要考虑的。

事实上,我们有一个更普遍的做法——使用李超树,不再去维护凸包,转而将每个决策点看作一个一次函数。

具体地,回到上面的式子,我们将只和 \(i\) 相关的项和常量分离出来,写成下面这样:

\[dp(i)=\min/\max(b(j)\times a(i)+d(j))+c(i)+C \]

发现了没有?每个决策点 \(j\) 都可以看作是一条斜率为 \(b(j)\),截距为 \(d(j)\) 的一次函数,转移相当于是求多个一次函数在某点上的最值。

使用李超树的优势还是很多的,不需要动脑子考虑那么多的东西,实现起来比较简单粗暴,也少了很多繁杂的推式子的过程。而且对于斜率优化问题,我们使用李超树一般直接维护直线即可,因此复杂度是一个 \(\log\) 的,代码难度和细节比平衡树和 CDQ 分治大概也要低很多。综上所述,对于斜率优化问题直接无脑上李超树维护也是一个很好的选择。

于是我直接尝试使用李超树写了两道之前做过的斜率优化题,表现很好,有空立马来补上。

标签:杂谈,斜率,凸壳,维护,优化,转移,李超树
From: https://www.cnblogs.com/los114514/p/17785792.html

相关文章

  • pjsip内存优化及提升视频呼叫并发数
      工作上的一个上层调度台应用(Windows7),业务功能上有并发调取多个视频的需求,发现调取30左右路D1视频后会导致崩溃,日志提示:except.c !!!FATAL:unhandledexceptionPJLIB/Nomemory!,内存不足,在开发环境下验证发现内存占用已经达到2G以上(32位程序默认最高给2G内存,通过配置能......
  • 关于 React 性能优化和数栈产品中的实践
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:的卢引入在日常开发过程中,我们会使用很多性能优化的API,比如像使用memo、useMemo优化组件或者值,再比如使用shouldComponentUpdate减......
  • 数据集与模型的优化策略
    随着人工智能技术的快速发展,神经网络作为其核心组成部分,已经在各个领域取得了显著的成果。而神经网络的性能优劣,往往取决于其训练数据集和训练模型的选择与设计。本文将围绕这一主题,对神经网络训练数据集和神经网络训练模型进行详细阐述。神经网络训练数据集神经网络训练数据集是神......
  • WPF ItemsControl 卡顿 数据量大 虚拟化 优化
    <ItemsControlItemsSource="{BindingMemberInfos}"VirtualizingStackPanel.IsVirtualizing="True"VirtualizingStackPanel.VirtualizationMode="Recycling"VirtualizingPanel.CacheLength="50">......
  • MySQL中大量数据优化方案
    目录1大量数据优化1.1引言1.2评估表数据体量1.2.1表容量1.2.2磁盘空间1.2.3实例容量1.3出现问题的原因1.4解决问题1.4.1数据表分区1.4.1.1简介1.4.1.2优缺点1.4.1.2操作1.4.2数据库分表1.4.2.1简介1.4.2.2分库分表方案1.4.2.2.1取模方案1.4.2.2.2range范围方案1......
  • 安防视频监控平台EasyCVR查询告警后,无法自动清除记录该如何优化?
    视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控平台EasyCVR支持多种播放协议,包括:HLS、HTT......
  • 你是如何做好Unity项目性能优化的
    在面试中,我们经常会被问各种”莫名奇妙”的问题, 比如这道:”你是如何做好Unity项目性能优化的?”。“这个问题也太泛了吧,没有具体的优化点,这怎么回答?”瞬间跃入脑海。做面试复盘的时候,你可能会想这个面试官是不是什么都不懂,是个”青铜”啊。没错,能问这道问题的面试官要么是个......
  • 关于移动跳跃进一步优化
    ......
  • 昇腾CANN 7.0 黑科技:大模型训练性能优化之道
    本文分享自华为云社区《昇腾CANN7.0黑科技:大模型训练性能优化之道》,作者:昇腾CANN。目前,大模型凭借超强的学习能力,已经在搜索、推荐、智能交互、AIGC、生产流程变革、产业提效等场景表现出巨大的潜力。大模型经过海量数据的预训练,通常具有良好的通用性和泛化性。用户基于“大......
  • 轻松合并Excel工作表:Java批量操作优化技巧
    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言在Excel中设计表单时,我们经常需要对收集的信息进行统计分析。例如,学校给老师统计课时,医院给医护人员统计班次等。传统的手工方式需要......