有哪些数据结构可以可持久化

首页 / 常见问题 / 低代码开发 / 有哪些数据结构可以可持久化
作者:低代码开发工具 发布时间:10-25 13:58 浏览量:5864
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

可持久化的数据结构:1.可持久化线段树;2.可持久化块状数组;3. 可持久化并查集;4.可持久化字典树;5.可持久化分块。其中,维护历史版本的能力就叫可持久化。

一、可持久化的数据结构

1.可持久化线段树

对于实现可持久化的方法,我们最容易想到的就是开一个 O(N2) 的空间,把所有版本都存储下来。但这样显然会有很多空间是浪费的,因为相较于被修改的部分来说,两个版本之间完全相同的部分显然会更多。与线性结构相比,树型结构更擅长帮助我们分清楚这两个部分,而树形结构中最擅长处理这种修改查询问题的就是线段树。所以我们先介绍一下利用可持久化线段树实现可持久化数组。

2.可持久化块状数组

回忆线段树的修改流程,我们会发现所有的操作都只跟一条链有关 (下放lazytag是个例外,但也跟一条链差不多) ,因此我们在生成新版本的时候,对于未修改的点可以直接使用旧版本的节点,只有发生修改的点才需要新建一个新节点来代替旧节点,这样空间复杂度就可以降到 O(NlogN) ,而修改查询这些都不会收到影响。

3. 可持久化并查集

写作并查集,前置知识却是利用可持久化线段树实现可持久化数组,过分!回顾并查集,其实不过是一个 fa[a] = b,为了可持久化,我们就用可持久化数组来维护 fa[i]。注意这里不能再使用路径压缩了,道理很简单,可持久化要尽可能减少修改的次数。但是我们依然保留了一种优化方式:在维护 fa[i] 的同时维护一个 dep[i] ,表示这个节点的深度,保证在合并时是深度较小的点向深度较大的点合并即可。

4.可持久化字典树

依旧与可持久化线段树的思想类似,这里的可持久化主要体现在插入新串,这个插入过程影响的节点数量也是O(logN)的,因此插入时像线段树一样生成一个新的链即可。

5.可持久化分块

利用和可持久化线段树相似的思想,将每块都编好序号,用一个 O(√n) 的数组来记录一个版本的所有块。当一个块要被修改时,新建一个值为修改后的块的新块,用一个新数组保存新版本所有的块编号即可。

延伸阅读:

二、可持久化数据结构原理

可持久化:将数据结构的所有历史版本记录下来,称为可持久化。

不是所有的数据结构都是可以持久化的,可持久化的数据结构要求其结构稳定,比如堆(是一颗满二叉树,结构稳定)、树状数组、trie(字典树)、线段树等。平衡树就不可以进行持久化操作,因为其存在左旋、右旋的操作。

存下来所有的历史版本有两种方式,一种是每改动一次则全部备份下来;另一种是增量备份。名列前茅种方式时空复杂度都比较高,不使用这种方式,我们这里只讲解增量备份的方式(类似于git)。

增量备份的核心思想是:只记录每个版本与前一个版本不同的部分。

最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

什么是外向潜在客户开发
10-30 10:47
产品开发过程的阶段有哪些
10-30 10:47
开发编程团队介绍怎么写
10-30 10:47
开发团队如何组建
10-30 10:47
众筹筑屋开发费用怎么计算
10-30 10:47
产品开发费用怎么记账
10-30 10:47
开发团队如何协调资源
10-30 10:47
汽车系统开发能力包括哪些
10-30 10:47
团队软件开发为什么用git
10-30 10:47

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科技中一路大族激光科技中心909室
  • 座机:400-185-5850
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2024. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
400-185-5850
申请预约演示
立即与行业专家交流