首页 > 其他分享 >速通单位蒙日乘

速通单位蒙日乘

时间:2024-11-05 21:19:30浏览次数:2  
标签:... 速通 renewcommand 蒙日 mid 海草 newcommand 单位 circ

\[[header] \renewcommand{\rar}{\rightarrow} \renewcommand{\les}{\leqslant} \renewcommand{\ges}{\geqslant} \renewcommand{\dsp}{\displaystyle} \renewcommand{\mb}{\mathbb} \renewcommand{\bs}{\backslash} \renewcommand{\ep}{\varepsilon} \renewcommand{\eqs}{\Leftrightarrow} \renewcommand{\ex}{\exist} \renewcommand{\dt}{\delta} \renewcommand{\al}{\alpha} \renewcommand{\be}{\beta} \renewcommand{\ga}{\gamma} \renewcommand{\bal}{\begin{align*} } \renewcommand{\eal}{\end{align*} } \renewcommand{\Dt}{\Delta} \renewcommand{\d}{\mathrm{d} } \renewcommand{\sg}{\sigma} \renewcommand{\th}{\theta} \renewcommand{\|}{ {\bigg{|}} } \renewcommand{\lam}{\lambda} \renewcommand{\pa}{\partial} \newcommand\pw[2]{\frac{\pa #1}{\pa #2}} \renewcommand{\bd}{\bold} \renewcommand{\nb}{\nabla} \renewcommand{\mrm}{\mathrm} \renewcommand{\Ga}{\Gamma} \renewcommand{\wg}{\wedge} \renewcommand{\mscr}{\mathscr} \renewcommand{\aecvg}{\stackrel{a.e.}{\longrightarrow}} \renewcommand{\aucvg}{\stackrel{a.u.}{\longrightarrow}} \renewcommand{\mucvg}{\stackrel{\mu}{\longrightarrow}} \renewcommand{\deq}{\xlongequal{\ \ _{_d}\ \ }} \newcommand\cvg[1]{\stackrel{#1}{\longrightarrow}} \newcommand\ffm[3]{#1 \d y\wg\d z+#2\d z\wg \d x+#3\d x\wg \d y} \renewcommand{\dv}{\nabla\cdot} \renewcommand{\cl}{\nabla\times} \renewcommand{\vp}{\varphi} \renewcommand{\fa}{\forall} \renewcommand{\tx}{\text} \newcommand{\(}{\left(} \newcommand{\)}{\right)} \newcommand{\Mn}{\mathfrak M} \newcommand{\la}{\langle} \newcommand{\ra}{\rangle} \newcommand{\og}{\omega} \newcommand{\[}{\left[} \newcommand{\]}{\right]} \newcommand{\sea}{\searrow} \newcommand{\nea}{\nearrow} \renewcommand\thm[2]{ \colorbox{rgb(255,127,127)} {$ \colorbox{rgb(80,150,255)}{#1}\\ \begin{align*}#2\end{align*} $} } \newcommand{\mcal}{\mathcal}\]

虽然海草有了, 蒙日乘也有了, 但是还没有结果用海草去解释蒙日乘的, 所以现在蒙日乘算法的理论相对于选手较为复杂, 不容易写出

对于tcs角度, 使用蒙日乘看上去有望得到LCS相关问题更内在的结果, 可是对于一个只有理论而没有intuition的工具也不便使用

在本学期探索算法设计的project时, 笔者找到了海草解释的对应, 完全排除了理论的推导, 只剩海草没有细节的几何意义(没有形式上的半下标和边界条件)

因为结果十分简单, 所以本文十分简单, 目标是考场上可以10min写出蒙日乘

前置可见海草基础(待更), 学会之后自然是得心应手

下面是本文草稿(图片待补)


假设我们现在需要乘两个海草\(p,q\), 下标为\([n]\)

我们可以把\(p,q\)各分解为一堆海草的乘积

第一步自然是对应于蒙日乘的二分, 我们取一\(mid\)

将\(p\)中海草按终点在\([1,mid],[mid+1,n]\)分为两部分, 将起点各自保持相对顺序分离在左右, 这样我们得到从\([1,mid]\)到\([1,mid]\)的海草\(p_1\), 以及\([mid+1,n]\)上的海草\(p_2\)

同理将\(q\)按起点所在区间分为\(q_1,q_2\)

我们发现\(p=A\circ (p1,p2)\),其中\((p_1,p_2)\)表示海草按下标拼接, \(A\)是一个移位海草, 向前复合表示将\((p_1,p_2)\)的海草起始点冒泡至\(p\)的顺序

同理\(q=(q_1,q_2)\circ B\), \(B\)表示将终点移位的海草

那么\(p\circ q=A\circ(p_1\circ q_1,p_2\circ q_2)\circ B\), \(C=(p_1\circ q_1,p_2\circ q_2)\)递归下去算

那么考虑计算这个\(A\circ C\circ B\)

\(A\circ C\)是容易的, 因为\(C\)此时终点相当有序, \(A\circ C\)就相当于把\(C\)的起点冒泡至\(p\)的顺序

但是这个时候在末尾复合\(B\)就不一样了, 考虑\(B\)由哪些邻交换构成, 我们发现这是试图将 在\([mid+1,n]\)结尾 的海草挪到左边去

记录\(A\circ C\)终点到\(1,...,n\)对应的起点\(a_1,a_2,...,a_n\), 这操作相当于是在把\(a_{mid+1}\)向左移到原位(\(q\)中的原位), 接着\(a_{mid+2},...\)

交换的过程是冒泡排序, 遇到比当前手上拿的更大的就交换

$ $ 此处应有伪代码

而且目标停止位置是单增的

我们将其考虑为一个数据结构问题, 我们预留出\(mid+1,...,n\)欲插入的目标位置, 视作白点, 将\(1,...,mid\)所在位置视为黑点

先看黑点\(i\), 这里\(1\le i\le mid\)对应插入空白之前的\(a_i\), 我们知道\([mid+1,n]\)有一段前缀在交换的时候会经过这个黑点

假如有\(k\)个\([mid+1,mid+k]\)中的点经过这里, 那这个黑点最终的值就是\(a_i\)与右边所有的\(a_{i+1},...,a_{mid+k}\)中第\(k\)大值求一个\(\min\)

再看白点, 假设其右第一个黑点是\(a_i\)(没有就是\(a_{mid+1}\)), 假设最终留在这个位置的白点是右边第\(k\)个\(a_{mid+k}\)

考虑\(a_{i},...,a_{i+k-1}\)中的前\(k-1\)已经被取走, 那么此时从\(a_{mid+k}\)开始向左取, 不断求最大

那么我们会发现如果\(a_i,...,a_{mid+k}\)中第\(k\)大没有\(a_{mid+k}\)大, 那最终值就是初始时手持的\(a_{mid+k}\), 而如果比其大, 那么就是第\(k\)大, 最终是比较了一个\(\max\)

如何维护这个set里的第\(k\)大呢, 我们发现这涉及到 在集合中加入一个数并将\(k\)加\(1\), 或者删除一个数, 而第\(k\)大总是单增的, 可以\(O(n)\)维护

加上分治一共\(O(n\log n)\), 可以发现没有边界条件和细节

最终实现以上算法只需要定义一些排列的操作(如求逆, 复合, 拆分), 将排列像操作torch张量一样即可

目前未决的问题是, 循环海草如何设计如上海草乘, 这也是笔者算法设计课程project的最终目标

标签:...,速通,renewcommand,蒙日,mid,海草,newcommand,单位,circ
From: https://www.cnblogs.com/C127/p/18528780

相关文章

  • 复变函数速通(精简版)
    复变函数是数学四大科里面最容易速通的,两三天就可以学完所有的知识,因为基本上都是高数下的迁移但是选择填空题好多小概念容易出错,大家一定要快速学完之后多做几套题才有用本人感觉最美的思维是发现把柯西积分定理、柯西积分公式、高阶导数公式、留数定理统一起来的时候 ......
  • 华为OD机试-E卷100分 -货币单位换算Java & Python& JS & C++ & C
    最新华为OD机试题目描述记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。要求将这些货币全部换算成人民币分(fen)后进行汇总,汇总结果仅保留整数,小数部分舍弃......
  • 来电显示单位名称怎么设置?
    在现代商务沟通中,来电显示单位名称已成为提升企业形象、增强客户信任的重要工具。想象一下,当拨打或接听电话时,如果对方的手机屏幕上能够显示出企业的单位名称和品牌标识,会有什么样的效果呢?毋庸置疑,这种通话展示企业真实信息的方式,不仅能够大幅提升号码的可信度和接听率,还能加深......
  • GESP一级真题分析-202303-选择题1-输入输出设备、存储单位、默认数据类型、标识符命名
    GESP一级真题分析-202303-选择题1-输入输出设备、存储单位、默认数据类型、标识符命名PDF文档公众号回复关键字:202410261相关知识点1)输入输出设备输入设备是外界向计算机传送信息的装置。在微型计算机系统中,最常用的输入设备是键盘和鼠标。此外还有电子光笔、数字化......
  • <Project-11 Calculator> 计算器 0.5 液体、长度、温度单位 转换器 liquid_measures HTM
    前言这是一个综合性的单位换算工具,提供了多种常用计量单位之间的转换功能。不断完善style各页面风格统一,格式一致。容量单位换算支持在公制单位(升、毫升、立方厘米)美制容量单位(加仑、夸脱、品脱、杯、液体盎司)厨房计量单位(汤匙、茶匙、米杯)之间相互转换长度单位换算公......
  • Python的京东探险记:揭秘商品详情的快速通道
    在一个充满无限可能的数字世界里,Python,这位编程界的多面手,正准备踏上一场刺激的探险之旅:快速获取京东商品的详情数据。这不仅是一次技术的挑战,更是一次与时间赛跑的较量。!Python先生,这位机智的代码探险家,打开了他的笔记本电脑,准备开始这场冒险。他知道,要快速获取京东的商品详情......
  • AtCoder DP Contest 速通指南
    题单链接这是AT之前办的一场DP专题,里面都是很经典的问题,可以帮助大家复习DP的套路,个人感觉对于巩固基础来说质量很高,建议大家去去联系一下,尽量不要看题解。本博客只讨论了绿色及以上难度的题目,下面是我的题解。ICoins设\(f_{i,j}\)表示扔到了第\(i\)个,有\(j\)个......
  • java锁的问题速通
     1.syncronized底层原理——悲观锁synchronized有对象锁和类锁两种,多个线程中只有一个线程可以获取对象锁,其他线程都会处于阻塞状态synchronized是底层是基于monitor实现的。monitor是C++编写的jvm对象,主要分为owner(这个只会存一个线程的信息,记录当前锁被哪个线程获取了)、ent......
  • 【C/C++】速通某站上的经典“笔试”编程题
    【C/C++】速通某站上的经典“笔试”编程题一.题目描述:解题思路:代码实现:二.题目描述:解题思路:代码实现:三.题目描述:解题思路:代码实现:一.题目描述:解题思路:将区间里面的数依次取模10(%)、除10,作用是大于等于10的数单独拆开(如123,依次拆开为3,2,1),判断是否等于2,如果......
  • C++面试速通宝典——27
    504.孤儿进程和僵尸进程是什么?怎么处理?孤儿进程:当一个父进程结束,而他的一个或多个子进程还在运行时,那些子进程将成为孤儿进程。孤儿进程会被init进程(进程ID为1)自动领养,init进程会负责调用wait()来收集他们的退出状态。僵尸进程:当一个子进程结束,在其父进程没有调用wait()......