首页 > 其他分享 >斜率优化

斜率优化

时间:2024-07-31 15:20:49浏览次数:8  
标签:截距 min times 斜率 凸壳 优化 underline

P5785 [SDOI2012] 任务安排

快进到 DP 式子:

\[f(i) = \min\{f(j) + T(i) \times (C(i) - C(j)) + m \times (C(n) - C(j))\} \]

把 \(\min\) 去掉,然后拆括号:

\[f(i) = f(j) + T(i) \times C(i) - T(i) \times C(j) + m \times C(n) - m \times C(j) \]

移项:

\[\underline{f(j)}_y = \underline{(T(i) + m)}_k \times \underline{C(j)}_x + \underline{f(i) - T(i) \times C(i) -m \times C(n)}_b \]

这是直线解析式 \(y = kx + b\) 的形式。

我们的目标是让 \(f(i)\) 最小。这是因为我们刚才将 \(\min\) 去掉了,让 \(f(i)\) 最小就是为了体现这个 \(\min\)。

因为我们正在枚举 \(i\),所以与 \(i\) 有关的信息在这个式子中都是常数。不妨将上式写成:

\[\underline{f(j)}_y = k \times \underline{C(j)}_x + \underline{f(i) + c}_b \]

其中 \(k = T(i) + m\),\(c = -T(i) \times C(i) - m \times C(n)\)。这两个值只与 \(i\) 有关,


我们希望最小化 \(f(i)\),可以进一步退化为最小化 \(f(i) + c\)(即截距 \(b\))。因为 \(c\) 是固定的。

想象有一条直线。它的截距 \(b\) 暂未确定,但是方向 \(k\) 确定了。我们希望让这条线经过某一个点 \((C(j), f(j))\),且截距最小。

显然这张图中,点 \(D\) 是最好的选择。因为:

此时 \(b = 0\)(啊?随手画的图这么巧?),最小。

但是不一定对于任意的 \(k\) 都是 \(D\) 最好。当 \(k\) 更大或 \(k\) 更小时:

但是不难发现 \(k\) 取何值时,点 \(B\) 都不可能被取到。这提示我们可以只维护 \((C(j), f(j))\) 这些点的下凸壳。


我们考虑动态维护这个凸壳上的点。

我们每次判断最后加入的两个点 \(A, B\)(\(B\) 为最后一个,\(A\) 为倒数第二个),以及即将加入的点 \(C\)。那么将这个新点加入后,如果 \(B\) 将要从凸壳中删除,就意味着 \(BC\) 的斜率小于 \(AC\) 的斜率。

若将 \(B\) 删除后,接下来的两个点仍满足上述条件,可以继续循环删除。


那么我们已经用队列维护当前凸壳中的点了。那么那个点是转移 \(f(i)\) 时用的呢?

换言之,我们需要找到这个凸壳上的所有点中,被斜率为 \(k\) 的直线从下往上扫描的过程中,第一个接触的点。例如:

其中绿色线斜率为 \(k\)。

不难发现若答案为 \(B\),那么一定有 \(AB\) 的斜率比 \(k\) 小,\(BC\) 斜率比 \(k\) 大。而这个下凸包相邻两点的斜率是单调递增的,所以我们可以二分找到这个决策点。

标签:截距,min,times,斜率,凸壳,优化,underline
From: https://www.cnblogs.com/2huk/p/18334716

相关文章

  • 【第二篇章】优秀的机器学习策略 超参数优化之决策树
    在机器学习的浩瀚星空中,决策树作为一颗璀璨的星辰,以其直观易懂、解释性强以及高效处理分类与回归任务的能力,赢得了众多数据科学家与工程师的青睐。随着大数据时代的到来,如何从海量数据中提炼出有价值的信息,构建出既准确又可靠的预测模型,成为了机器学习领域不断探索的热点。......
  • 优化数据处理效率,解读 EasyMR 大数据组件升级
    EasyMR作为袋鼠云基于云原生技术和Hadoop、Hive、Spark、Flink、Hbase、Presto等开源大数据组件构建的弹性计算引擎。此前,我们已就其展开了多方位、多角度的详尽介绍。而此次,我们成功接入了大数据组件的升级和回滚功能,能够借助EasyMR来掌控大数据组件的升级与回滚流程。在本......
  • golang对遍历目录操作的优化
    一转眼go1.23都快发布了,时间过得真快。不过今天我们把时间倒流回三年半之前,来关注一个在go1.16引入的关于处理目录时的优化。对于go1.16的新变化,大家印象最深的可能是io包的大规模重构,但这个重构实际上还引进了一个优化,这篇文章要说的就是这个优化。本文默认Linux环境,不过这个......
  • MySQL入门学习-设计优化.范式设计
        以下是关于MySQL入门学习中设计优化和范式设计的一些基本信息:一、设计优化:1.索引优化:  -选择合适的列创建索引,通常在经常用于查询、连接、排序的列上创建索引。  -避免在过多的列上创建索引,以免影响插入、更新和删除操作的性能。  -对于大型......
  • MySQL入门学习-设计优化.生成列
        在MySQL中,生成列(GeneratedColumn)是一种特殊的列类型,它的值是根据其他列的值或表达式计算得到的。生成列可以分为两种类型:存储生成列(StoredGeneratedColumn)和虚拟生成列(VirtualGeneratedColumn)。一、特点和使用方法:1.存储生成列:  -特点:    ......
  • 一种优化 01 可行背包的方法
    source:abc221g有\(n\)个物品,体积分别为\(a_{1,2,\dots,n}\),要求从中选出若干个物品使得体积和为\(V\)。令\(A=\maxa_i\),\(V\lenA\)。一般的01背包做法是\(O(n^2A)\)的,但存在一种相对简单的做法可以做到复杂度\(O(nA)\)。下面描述这个做法。首先任意排列这个物......
  • ElasticSearch的优化
    1、硬件选择Elasticsearch的基础是Lucene,所有的索引和文档数据是存储在本地的磁盘中,具体存储的路径可在ES的配置文件../config/elasticsearch.yml中配置,如下:#-----------------------------------Paths------------------------------------##Pathtodirectorywhe......
  • 深度模型中的优化 - 优化策略和元算法篇
    序言在人工智能与机器学习的快速发展中,深度模型作为核心技术之一,其优化问题至关重要。深度模型通过构建多层神经网络来模拟人脑的学习与推理过程,处理复杂数据模式与任务。然而,这些强大能力的背后,离不开高效的优化策略与元算法的支撑。优化旨在通过调整模型参数,最小化预设的......
  • ofd轻阅读超大文件优化方案
    本人使用Typescript开发了一款ofd阅读器,参见文章《ofd轻阅读》。web端实现阅读功能有两种方案: ofd转svg;使用h5canvas。两种方案各有优劣,本人采用了canvas方案,劣势:开发难点较大,需要处理更多的细节(比如:文字选中)。优势:对细节掌控能力更强,能满足用户更苛刻的需求。打开超大文件......
  • Jmeter+Ant生成优化HTML的接口测试报告
    为什么要这么做?在实际测试场景遇到这样一种情况,开发重构了接口实现逻辑,该接口主要用于查询操作,接口的入参有上千种可能,查询出来的内容很多,需要与原来接口比对,检查是否一致那此时,单纯用jmeter跑一遍的话,很难直观的看到测试之后的结果,所以就需要这样一种报告来展示,供开发修改在这......