首页 > 其他分享 >关于势能分析

关于势能分析

时间:2024-08-13 13:49:03浏览次数:5  
标签:分析 势能 align phi 关于 操作 复杂度 mathrm

可能有不少不严谨之处,太菜了请谅解。

之前对于 \(\text{splay}\) 的复杂度一直不是很懂,今天进行了一个势能分析的学习。

势能分析,就是借助势能函数,将中间过程用势能函数来刻画以得到发杂度的一个上界,这样分析出来的一般是均摊复杂度。

例如,第 \(i\) 此操作的代价是 \(c_i\),那么设第 \(i\) 次操作的复杂度 \(C_i\) 是:

\[C_i = c_i + \phi(i) - \phi(i-1) \]

\[\sum {C_i} = \sum {c_i} + \phi(n) - \phi(0) \]

若 \(\sum{c_i}\) 和 $ \phi(n) - \phi(0) $ 存在一个上界,那么我们就算出了一个复杂度的上界。

一些例子:

1. 栈

维护一个栈,支持 \(\mathrm{push}\),\(\mathrm{pop}\),\(\mathrm{multipop}\) 三种操作,\(\mathrm{push}\) 和单次 \(\mathrm{pop}\) 的复杂度都是 \(O(1)\),进行 \(n\) 次操作,分析其复杂度。

直觉来看,复杂度是 \(O(n)\) 的,怎么证明呢?现定义势能函数 \(\phi(i)\) 为第 \(i\) 次操作后栈内元素个数。那么:

  • \(\mathrm{push}\):\(C_i = c_i + \phi(i) - \phi(i-1) = 1 + 1 =2\)
  • \(\mathrm{pop}\):\(C_i = c_i + \phi(i) - \phi(i-1) = 1 - 1 =0\)
  • \(\mathrm{multipop(k)}\):\(C_i = c_i + \phi(i) - \phi(i-1) = k - k =0\)

\(n\) 次操作,因此复杂度 \(O(n)\)。

2. 二进制加法

一个二进制数,从 \(1\) 加到 \(n\)。证明时间复杂度。

定义 \(\phi(i)\) 为第 \(i\) 次操作后 \(1\) 的个数。

一次加 \(1\) 相当于 \(k\) 次 \(1 \rightarrow 0\) 和一次 \(0 \rightarrow 1\),则:

\[C_i = c_i + \phi(i) - \phi(i-1) = k + 1 + \phi(i-1) - k + 1 - \phi(i-1) = 2 \]

一次操作均摊 \(O(1)\),总的就是 \(O(\log n)\)。

2.5 一些理解

  • 势能分析的作用,就在于通过设计函数,把时间长的操作拼到时间短的上面。
  • 由上一条的启发,我们得到一个设计函数的思路:执行时间长的操作时,势能一般是降低的,时间短的操作时反之。
  • \(C_i = c_i + \phi(i) - \phi(i-1)\),中间的代价和势能之间的相加有什么意义吗?其实这没有任何实际意义,只是我们利用其来进行一个平衡。

3. Splay

现在要设计一个势能函数,根据我们的直觉,势能函数理应与 \(\mathtt{Splay}\) 的平衡有关。

下面记 \(\left|x\right|\) 为 \(x\) 子树的大小。

若一 \(n\) 个点的 \(\mathtt{Splay}\) 进行了 \(m\) 次 \(\mathtt{Splay}\) 操作。
记 \(\phi(i) = \log(size(i))\),整棵 \(\mathtt{Splay}\) 的势能函数 \(\Phi(T) = \sum{\phi(x)}\)。

则一次旋转的代价为 \(C_i = O(1) + \Delta\Phi(T)\)。

设要旋转的节点为 \(x\),其父亲和父亲的父亲分别为 \(y\) 和 \(z\),那么:

  • 进行一次 \(\text{zig}\) 操作时:

\[\begin{align*} C_i & = 1 - \phi(x) - \phi(y) + \phi'(x) + \phi'(y)\\ & = 1 + \phi'(y) - \phi(x)\\ & \le 1 + \phi'(x) - \phi(x)\\ \end{align*} \]

  • 进行 \(\text{zig-zag}\) 操作时:

\[\begin{align*} C_i & = 1 - \phi(x) - \phi(y) -\phi(z) + \phi'(x) + \phi'(y) +\phi'(z)\\ & = 1 + \phi'(y) + \phi'(z) - \phi(x) -\phi(y) \end{align*} \]

然后进行一个神秘的放缩:

因为旋转后

\[\left|x'\right| > \left|y'\right| + \left|z'\right| \]

因此

\[\phi'(z) + \phi'(y) - 2\phi'(x) < -1 \]

所以

\[\begin{align*} C_i & = 1 + \phi'(y) + \phi'(z) - \phi(x) -\phi(y)\\ & \le \phi'(y) + \phi'(z) - \phi(x) -\phi(y) - (\phi'(z) + \phi'(y) - 2\phi'(x))\\ & = 2\phi'(x) - \phi(x) - \phi(y)\\ & \le 2(\phi'(x) - \phi(x)) \end{align*} \]

  • 进行 \(\text{zig-zig}\) 操作时:

\[\begin{align*} C_i & = 1 - \phi(x) - \phi(y) -\phi(z) + \phi'(x) + \phi'(y) +\phi'(z)\\ & = 1 + \phi'(y) + \phi'(z) - \phi(x) -\phi(y) \end{align*} \]

又因为

\[\begin{equation} \left|x'\right| = \left|x\right| + \left|z'\right| + 1 \end{equation}\]

因此

\[\phi(x) + \phi(z') - 2\phi'(x) = \log \frac{|x||z'|}{|x'|} < \log \frac{|x'|}{4|x'|} = -2 < -1 \]

代换得:

\[\begin{align*} C_i & = 1 + \phi'(y) + \phi'(z) - \phi(x) -\phi(y) \\ & = \phi'(y) + \phi'(z) - \phi(x) -\phi(y) - (\phi(x) + \phi(z') - 2\phi'(x)) \\ & \le \phi'(x) + \phi'(z) - \phi(x) -\phi(x) - (\phi(x) + \phi(z') - 2\phi'(x)) \\ & = 3(\phi'(x) -\phi(x)) \end{align*} \]

  • 如果 \(\text{zig-zig}\) 操作两次都转的是 \(x\) 的话,\((1)\) 式就不在成立,我们也很难通过放缩把那个 \(O(1)\) 消掉,那复杂度就不对了。

综上,除了最后一次旋转外,其余的常数都被我们消掉了。因此一次 \(Splay\) 复杂度为 \(O(1) + 3(\phi(root) - \phi(x_0)) < 3\log n\)。

\(m\) 次操作,总复杂度为 \(m\log n + \Delta \Phi(T) = (m+n)\log n\)。

4. LCT

咕咕咕~

标签:分析,势能,align,phi,关于,操作,复杂度,mathrm
From: https://www.cnblogs.com/11-twentythree/p/18355623

相关文章

  • 关于小程序使用OCR进行身份证识别
    1.第三方插件安装 2.搜索并安装 3.购买免费次数1天100次  https://fuwu.weixin.qq.com/service/detail/000ce4cec24ca026d37900ed551415 4.选中使用的账号 5.支付完成愉快使用 6.正式使用  文档位置:https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx44......
  • dyMEAN代码分析
    这段代码的作用是生成一个cmask列表,用于指示在模型的预测过程中,哪些残基的坐标需要被生成(预测),哪些残基的坐标是固定的(不需要预测)。以下是对这行代码的详细解读:1.背景信息cmask:这是一个掩码(mask),用于指定哪些坐标需要生成(由模型预测),哪些坐标保持固定(不变)。0表示坐标是固......
  • 【笔记】传统势能线段树
    1引入传统线段树能够通过打标记实现区间修改的条件有两个:能够快速处理标记对区间询问结果的影响;能够快速实现标记的合并。有的区间修改不满足上面两个条件。但存在一些奇妙的性质,使得序列每个元素被修改的次数有一个上限。如果我们保证每暴力\(O(\logn)\)修改一次的时......
  • 图数据库在社交网络分析中的应用
    图数据库在社交网络分析中的应用随着互联网的飞速发展,社交网络已成为人们日常生活中不可或缺的一部分。这些平台不仅连接了数以亿计的用户,还生成了海量的、高度互连的数据。如何有效地处理和分析这些数据,以理解用户行为、优化用户体验、提升平台价值,成为了一个重要的研究课题......
  • 易基因:儿童和成人实体瘤共有微小差异甲基化区域(mDMR)的全面分析 | 表观研究
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。癌症是美国1~14岁儿童第二大常见死因,每年约有11000例新发病例和1200例死亡病例。与成人癌症相比,儿童肿瘤通常突变负荷较低。然而儿童肿瘤的表观基因组发生显著变化,尤其具有广泛的DNA甲基化变化。儿童肿瘤的罕见性对开......
  • 游戏安全入门-扫雷分析&远程线程注入
    前言无论学习什么,首先,我们应该有个目标,那么入门windows游戏安全,脑海中浮现出来的一个游戏--扫雷,一款家喻户晓的游戏,虽然已经被大家分析的不能再透了,但是我觉得自己去分析一下还是极好的,把它作为一个小目标再好不过了。我们编写一个妙妙小工具,工具要求实现以下功能:时间暂停、修......
  • 大气热力学(16)——风矢端图的分析方法(上篇)
    注:本篇涉及超级单体的概念,因此在学习本篇教程前,建议先看《雷达气象学(9)——反射率因子图分析(强对流篇)》!目录16.1风矢端图的画法16.2整体风切变(BulkShear)16.3风矢端线的典型形状16.4平均风切变(MeanWindShear)16.5使用Bunkers技术预测风暴的移动方向参考文献16.1风矢端图......
  • 关于LED电源芯片,你了解多少?
    相较于白炽灯、紧凑型荧光灯等传统光源,发光二极管(LED)具有发光效率高、寿命长、指向性高等诸多优势,日益受到业界青睐而被用于通用照明(GeneralLighting)市场。LED照明应用要加速普及,短期内仍有来自成本、技术、标准等层面的问题必须克服,技术方面,包括色温、显色性和效率提升等问题......
  • Java中class文件结构分析一
    一:源代码packagecom.tuling.smlz.jvm.classbyatecode;/***Createdbysmlzon2019/11/5.*/publicclassTulingByteCode{privateStringuserName;publicStringgetUserName(){returnuserName;}publicvoidsetUserName(Strin......
  • Java中class文件结构分析二
    第17个常量池:010015284C6A6176612F6C616E672F537472696E673B295601:tag位表示的是utf8类型的字面量常量0015二个字节表示的是字面量常量的长度为21接下来21个字节:284C6A6176612F6C616E672F537472696E673B2956表示字符串(......