可持久化可并堆
可持久化可并堆一般用于求解
如果一种可并堆的时间复杂度不是均摊的,那么它在可持久化后单次操作的时间复杂度就保证是
可持久化左偏树
在学习本内容前,请先了解 左偏树 的相关内容。
过程
回顾左偏树的合并过程,假设我们要合并分别以
-
如果
中有结点为空,返回 。 -
选择
两结点中权值更小的结点,作为合并后左偏树的根。 -
递归合并
的右子树与 ,将合并后的根节点作为 的右儿子。 -
维护当前合并后左偏树的左偏性质,维护
dist
值,返回选择的根节点。
由于每次递归都会使 dist[x]+dist[y]
减少一,而 dist[x]
是
可持久化要求保留历史信息,使得之后能够访问之前的版本。要将左偏树可持久化,就要将其沿途修改的路径复制一遍。
所以可持久化左偏树的合并过程是这样的:
-
如果
中有结点为空,返回 。 -
选择
两结点中权值更小的结点,新建该结点的一个复制 ,作为合并后左偏树的根。 -
递归合并
的右子树与 ,将合并后的根节点作为 的右儿子。 -
维护以
为根的左偏树的左偏性质,维护其dist
值,返回 。
由于左偏树一次最多只会修改并新建
参考实现
1 2 3 4 5 6 7 8 9 10 11 |
|
本页面最近更新:2023/2/18 07:57:07,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:Enter-tainer, hsfzLZH1, iamtwz, ouuan
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用