掌中之物,未必在掌握之中。|

2021hych

园龄:2年7个月粉丝:2关注:2

总结与归纳之数据结构

(开一个大坑)

前言

数据结构,顾名思义,是用来高效维护数据的工具,数据之间的内在联系只有在合适数据结构下才能得到高效的处理,作为 OI 界的核心,必然要有所总结与归纳。

总论

总论数据结构,便是理解什么时候要用数据结构,也就是数据结构题的特征。

第一个:元素。也就是我们要维护的信息集合中的元素,对于序列、矩阵这一类的线性结构,元素是每一位的数字及其附带的各种信息。对于树、图这一类非线性结构,元素是点和边及其附带的各种信息。

第二个:元素的集合。也就是我们要维护的信息集合,对于序列、矩阵这一类的线性结构,元素的集合是区间。对于树、图这一类非线性结构,元素的集合是子树,树链,联通分量。

第三个:操作。当然这个不是数据结构题的必要特征,但是却频繁出现。一般来说有两类,修改和查询,两者是相提并论的,要思考的问题有:修改是怎么影响查询的?查询是否具有可合并性?查询需要维护哪些信息?修改是否会破坏某些性质?

第四个:操作的拓扑序。这是针对离线算法的,将操作的集合看成一个整体,我们考虑操作之间的继承关系、传递关系,按照某一种顺序对集合排序,然后根据继承关系和传递关系,优化复杂度。具体方式有两类,一个是按某一维度排序,另一个是按某种分治的结构处理。

数据结构题和别的题型一个很大的区别是:只关注如何高效维护信息,而不关注解决问题的决策。

正文

基础数据结构

队列

链表

数据哈希(这也基础?)

并查集

传统+基础变种并查集

可持久化并查集

单调栈/队列

ST 表

树状数组

线段树

传统线段树

线段树的基本思路,就是把区间当作节点的二叉树,将操作区间沿树边分解,从而在树高的对数量级下高效完成区间上的问题。所以一般的线段树复杂度为 O(nlogn)

那么线段树适合什么样的题型呢?从区间信息上说:区间信息和查询结果可快速合并。例如区间和可看作左右两个子区间的区间和,区间加可看作左右两个子区间的区间加。从修改上说:修改标记可与区间信息和其他修改标记快速合并,但是如果不能在一定情况下我们有基于势能分析和期望概率分析(目前不会)下,可以保证复杂度的线段树暴力。

对于基于势能分析的区间维护,如果难以进行区间修改,但当整个区间满足某种特性时可快速剪枝,并且对于区间查询很容易,那么也可使用线段数。(但是由于这个部分目前学的不是很严谨,所以留个坑)

线段树的思考步骤如下:第一步:定义区间信息(我们要维护什么?)。第二步:定义标记(修改要留下哪些整体标记?)。第三步:定义标记的优先级(标记之间会相互影响,有一定次序)。第四步:定义区间加区间(pushup)。第五步:定义标记加区间和标记加标记(pushdown,注意第三步里的优先级)。

传统线段树的典型例子叫扫描线,是一种重要的思想,对于面积并问题和周长并问题都可以快速求解,基本思想就是假设有一条扫描线从左到右扫过,进入一个矩形扫过的边为入边,出去一个矩形扫过的边为出边,那么我们得到一个有标类型的边集,每经过一条边我们对扫描线在这条边上的权值加或减 1,区间加减操作,表示被矩形覆盖了几次,然后维护,区间被覆盖的长度,将整条扫描线被覆盖的长度乘上到下一条边的横向距离,就得到了这一段距离内所有矩形的面积并,每一段都这样处理和统计,即可得到区间并和类似的周长并。

李超线段树

李超线段树可以维护的问题是:给定 n 条线段,求直线 x=j 与这 n 条线段的交点中纵坐标的最值(在线且动态)。这个数据结构的具体思想在解题中没有什么必要,只要知道他是用标记永久化的权值线段树来实现,并且在插入线段时比传统线段数多了一个递归下传,插入的时间复杂度是 O(log2n) 的,查询的时间复杂度是 O(logn) 的。

李超线段树的常见应用是斜率优化。具体的我们可能会得到一个式子,形如:

yi=min(kjxi+bj)+wi

一种方法是用斜率优化,使求解的复杂度变为 O(logn) 的。另一种方法是看成若干条线段与直线 x=xi 的交点中的纵坐标的最值,大部分时候我们不需要传统线段树的区间拆分过程,只需要李超线段树特有的拆分过程即可,求解的复杂度降到 O(logn)

segbeats

主席树

动态开点与标记永久化

线段树分裂与合并

线段树分治

平衡树

传统平衡树

可持久化平衡树

左偏树

传统左偏树

可持久化左偏树

k-d tree

树链剖分/dsu on tree

LCT

珂朵莉树

cdq 分治

整体二分

点/边分治/树

虚树

分块

莫队

普通莫队

带修莫队

树上莫队

回滚莫队

树套树(排列组合?)

总结

本文作者:2021hych

本文链接:https://www.cnblogs.com/2021hych/p/17319663.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   2021hych  阅读(22)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起