当前位置 博文首页 > 文章内容

    可持久/可回退化数据结构

    作者: 栏目:未分类 时间:2020-09-12 15:01:57

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    可持久化数据结构用来解决这个问题:
    1.在某个版本的基础上修改,同时生成新的版本
    2.查询某个版本的值。
    直接复制版本十分浪费。
    为了查询以前的信息,可以不动以前的节点,只建新节点。
    这就是可持久化数据结构的思想。
    可回退化数据结构比上面的更弱。它用来解决这个问题:
    1.在当前版本上进行修改
    2.回退一步
    这个数据结构的要求比普通数据结构更强,但是比可持久化数据结构更弱。
    可以使用一个栈,存储被修改的位置,回退的时候再撤销。
    但是很多时候,不能直接这么做。
    比如可回退化单调栈,上面这么做时间复杂度是错的。
    因为每次插入以后可能删除很多元素。
    可以使用二分。由于栈中的元素是单调的,可以二分到需要弹栈的位置,然后把栈顶设为这个位置。
    这样子时间复杂度就是正确的。
    此外,上面两个数据结构都需要保证无论输入数据怎么样,操作时间复杂度都是一个较低的值val。
    可持久化数据结构有这么一个转化:
    如果把这个点向生成它的版本连边,则形成一颗树。
    这棵树从某节点到根经过的操作就是这个版本经过的修改操作。
    dfs整颗树,在到一个节点时插入,离开一个节点的时候删除。
    则可持久化问题转化为更弱的可回退化问题。
    例题:
    可持久化数组
    可持久化并查集(没做)
    可持久化平衡树(没做)
    codechef WEASELSC(想出来了,没做)
    集训队互测 unknown
    动态半平面交
    七彩树(没做,上面一道题弱化版)
    异或粽子
    购票
    bzoj二分图
    bzoj城市建设
    (其实线段树分治,回滚莫队都需要可回退化数据结构,并且要求时间复杂度严格正确)