首页 > 其他分享 >闵可夫斯基和学习笔记

闵可夫斯基和学习笔记

时间:2024-02-27 19:56:59浏览次数:26  
标签:vector min 卷积 凸函数 笔记 闵可 夫斯基 差分

闵可夫斯基和

  • 给定两个向量空间 \(A\) 和 \(B\),则闵可夫斯基和 \(A+B={a+b,a\in A,b\in B}\)。当 \(A\) 和 \(B\) 都是凸包时,他们的闵可夫斯基和也是凸包。

  • 考虑当 \(A\) 的轮廓是凸函数 \((i,f_i)\),\(B\) 的轮廓是凸函数 \((j,g_j)\) 时,\(A+B\) 的轮廓就是 \((k,\max_{i+j=k}f_i+g_j)\)。这也说明了为什么这里的 \(\max/\min\) 加法卷积能保持函数的凸性。

  • 当 \(f\) 和 \(g\) 都是凸函数时,他们的 \(\min\) 加法卷积 \(h_k=\min_{i+j=k}f_i+g_j\) 有如下的快速计算方式:

  • 考虑对 \(f\) 和 \(g\) 做差分,有 \(a_i=f_i-f_{i-1}\) 和 \(b_i=g_i-g_{i-1}\)。那么 \(h_k\) 本质上就是取 \(a\) 的一个前缀的 \(b\) 的一个前缀,使得取得的元素个数为 \(k\) 且元素和最小。因为 \(a\) 和 \(b\) 递增,因此本质上就是对 \(a\) 和 \(b\) 两个数组进行归并排序,\(h_k\) 就是前 \(k\) 个元素的和。也就是说,卷积后函数的斜率,等于卷积前两个函数的斜率做归并排序,这让我们可以快速对凸函数完成卷积转移。

例题

  • 2023ICPC 亚洲南京站 D

  • 这道题和使用 Slope trick 的烟火表演很像但不一样,因为 \(i\) 和 \(fa[i]\) 之间的距离 \(l\in\{0,1\}\),所以 DP 函数右侧的拐点个数不等于儿子个数,无法直接维护最小值区间。

  • 先列出 DP 方程,设 \(f(u,x)\) 表示以 \(u\) 为根的子树满足红黑树性质,且从 \(u\) 到任意后代叶子结点路径上都有 \(x\) 个黑色点需要的最少修改次数,\(g(u,0/1)\) 是让节点 \(u\) 变红/黑的代价。于是有了一个 naive 的方程:

\[f(u,x)=\min_{i\in\{0,1\}}(g(u,i)+\sum_{v\in son(u)}f(v,x-i)) \]

  • 可以证明 \(f(u,x)\) 关于 \(x\) 是凸的,因为 \(g(u,0/1)\) 是凸的(仅有两个点),两个凸序列的 \(\min\) 加法卷积的结果还是凸的。

  • 我们像烟火表演中那样维护差分数组。由于 \(f(u,x)\) 中的 \(x\) 的取值范围是子树深度的 \(\min\),因此 \(\sum\) 部分可以直接把子树合并起来,复杂度是 \(O(n)\) 的(可以用长链剖分证明)。而 \(g\) 的差分是 \(\pm1\),因此我们还需要支持往差分数组里插入 \(1\) 或者 \(-1\),并维持数组的单调性,这一步就对应了我们快速维护闵可夫斯基和转移。

  • 可以使用两个 vector,一个 vector 存所有负数,一个存所有整数,再开一个变量表示有几个 \(0\)。这时插入 \(1\) 就是在正数 vector 的开头插入,插入 \(-1\) 就是往负数 vector 的末尾插入。\(u\) 的答案就是 \(f(u,0)\) 加上差分数组的最小前缀和,也就是负数 vector 的元素之和。这样做复杂度是 \(O(n)\) 的。

标签:vector,min,卷积,凸函数,笔记,闵可,夫斯基,差分
From: https://www.cnblogs.com/iloveoi/p/18037752

相关文章

  • Java面试题笔记-多线程篇
    创建线程的几种方式继承Thread类,重写run方法实现Runnable接口,实现run方法实现Callable,实现call方法,配合FutureTask获取线程返回结果通过ThreadPoolExecuter线程池获取线程资源这几种方法的底层都是Runnable,Thread是Runnable接口的实现类,Callable配合FutureTask使用......
  • 第十一章 硬件控制方法 笔记
    硬件是计算机系统的物理组成部分,包括CPU、内存、硬盘、外设等。它们负责执行具体的操作和存储数据。而硬件控制方法则是指通过软件来操控硬件的方式和技术。首先介绍了硬件的基本结构和工作原理。计算机硬件由许多不同的部件组成,每个部件都有其特定的功能和工作方式。例如,CPU负责......
  • 论文笔记 - Rank-detr
    1.前言这篇论文发表于neurips2023。这篇论文要解决什么问题?rank预测的类别和框体位置会发生错位,预测类别精度高,但是框体位置的定位不是最佳的,论文的改进目标就是将rank分数中类别和框体位置的分数进行统一这篇论文作出的贡献?对Dino中queryselection阶段,对Encoder输出的......
  • 我与计算机的读书笔记
    当我们深入探索这本《我与计算机》的奥秘时,第一章为我们开启了一段追溯个人与计算机相遇、相识、相知的历史长河。它不仅仅是一个技术性的指南,更是一段人类与科技进步共舞的生动叙述。首先,我被书中提到的张淑雅的故事深深吸引。她仿佛是一个时代的缩影,她的经历代表了那一代人对计......
  • 离散微积分学习笔记
    后向差分对于函数\(f(x)\)定义等距节点\(x_k=x_0+k\Deltax\)。有:\[\Deltaf(x_k)=f(x_{k})-f(x_{k-1})\]下文简称差分。高阶差分一般来说,\(k\)阶差分的定义如下:\[\Delta^ka_n=\Delta(\Delta^{k-1}a_n)\]易得\(k\)阶差分公式:\[\Delta^ka_n=\sum_......
  • Vue学习笔记18--列表渲染
    总结: <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>列表渲染</title>&l......
  • Vue学习笔记18--条件渲染
    条件渲染总结:v-if写法:v-if="表达式"v-else-if="表达式"v-else="表达式"适用于:切换频率较低的场景特点:不展示DOM元素直接被移除注意:v-if可以和v-else-if、v-else一起使用,但要求其结构不能被“打断”——即,中间不能有其他元素v-show写法:v-show="表达式"适用于:切......
  • PMGT论文阅读笔记
    Abstract​ 我们提出了一种预训练的策略,通过考虑项目侧信息及其关系来学习项目表示。我们通过共同的用户活动来关联项目,例如,共同购买,并构建一个同质的项目图。该图提供了在多模态中的项目关系及其关联的边信息的统一视图。我们开发了一种新的采样算法,名为MCN采样,以选择上下文的邻......
  • RabbitMQ 学习笔记
    为什么使用消息队列?以用户下单购买商品的行为举例,在使用微服务架构时,我们需要调用多个服务,传统的调用方式是同步调用,这会存在一定的性能问题使用消息队列可以实现异步的通信方式,相比于同步的通信方式,异步的方式可以让上游快速成功,极大提高系统的吞吐量消息队列的使用场景有如......
  • Semantic Kernel 学习笔记:初步体验用 Semantic Memory 生成 Embedding 并进行语义搜索
    SemanticKernel的Memory有两种实现,一个是SemanticKernel内置的SemanticMemory,一个是独立的KernelMemory,KernelMemory是从SemanticKernel进化而来。关于SemanticMemory的介绍(来源):SemanticMemory(SM)isalibraryforC#,Python,andJavathatwrapsdir......