Ori paper: http://www.cse.unsw.edu.au/~wong/papers/www07.pdf


ISX Requirements

1 Space does matter for many applications
2 Generally reducing space improves cache locality
3 Indirection is expensive
4 Support fast navigations
5 Support fast insertion and deletion
6 Support efficient joins
7 Separate topology, text and schema

For mobile devices:

To find a space-efficient storage scheme for XML data without compromising both query and update performances.

Figure, the ISX Structure

Figure, Sample DBLP XML Fragment

压缩过程:

采用如下Balanced Parenthesis Encoding方法:(真是一个压缩 tree structure 的好办法!通过深度有限遍历搞定,DFS)

还原过程:

Node Navigations:

线段树+括号序列: (资料补充)

上述的算法其实就是这个问题,先看看这个算法。By the way, 博客可见,山东的高中计算机竞赛选手如今都达到这样的水准了?... 牛!

Idea: 化树为线性数列,从而解决问题。

它的括号序列就是 (A (B)( C(D)(E) )) 括号序列有着非常好的性质。

问一:C的兄弟有谁? 1) 距离为2;2) 向左瞧,直接看到 )(,然后找 ( 。

问二:C的长辈有谁? 在左边且距离为1. 因为只有一个长辈,所以找到即end。

问三:C的孩子有谁? 在右边且距离为1. 遇到右括号,匹配后value = 0,即end。

对于一个括号序列,两个点之间的距离就是:它们中间的括号成对消除之后剩余括号的数量。

对于一段括号编码,我们使用数对(a,b)来描述它,表示它在消除后有a个左括号,b个右括号。so,我们只需要设计一种数据结构支持单点修改,区间查询就好辣。

这让我们联想到线段树。那么下一步我们就是考虑:如何从两个字节点合并成一个父节点。这让我们想起最长连续和。

考察一个合法的序列,如果它有贡献,那么序列的左右两边一定都有一个黑点,那么,父节点的最长序列有这样几种情况:

    1. 子序列在左边
    2. 子序列在右边
    3. 子序列跨过中间

对于前两种情况,我们递归处理,第三种情况的话,分析一下: 也就是说,题目只需要动态维护:max{a+b | S’(a, b) 是 S 的一个子串,且 S’ 介于两个黑点之间}, 这里 S 是整棵树的括号编码。我们把这个量记为 dis(s)。

现在如果可以通过左边一半的统计信息和右边一半的统计信息,得到整段编码的统计,这道题就可以用熟悉的线段树解决了。

(其他部分,详见原文)

解释:

T10 = 4(左括号), 1(右括号), 0, 4, -1, 3, 1

  ( ( ( ( )  
0 1 2 3 4 3  
  3 2 1 0 -1 0

T11 = 2(左括号), 2(右括号), -1, 1, -1, 1, 1

  ) ( ( )    
0 -1 0 1 0    
  0 1 0 -1 0  

T12 = 3(左括号), 3(右括号), -1, 1, -1, 1, 1

  ) ( ( ) ) (  
0 -1 0 1 0 -1 0  
  0 1 0 -1 0 1 0

T10+T11 = 7(左括号), 3(右括号), 0(0-1+1), 4(4+1-1), -1(-1-1+1), 3(3+1-1), 2

  ( ( ( ( ) ) ( ( )    
0 1 2 3 4 3 2 3 4 3    
  3 2 1 0 -1 0 1 0 -1 0  

min的和再+1;max的和再-1

T10+T11+T12 = 9(左括号), 6(右括号), 0(0-1-1+2), 4(4+1+1-2), -1(-1-1-1+2), 3(3+1+1-2), 3

  ( ( ( ( ) ) ( ( ) ) ( ( ) ) (  
0 1 2 3 4 3 2 3 4 3 2 3 4 3 2 3  
  3 2 1 0 -1 0 1 0 -1 0 1 0 -1 0 1 0

min的和再+2;max的和再-2

Where is the close tag?

方法:匹配左右括号,使之匹配

最后不能忘了把算法的性能吹一吹,指标如下所示:

[IR] Advanced XML Compression - ISX的更多相关文章

  1. [IR] Advanced XML Compression - XBW

    思考:与ISX对比后能得出什么结论 原理解析: We proposed the XBW-transform that mimics on trees the nice structural prope ...

  2. [IR] XML Compression

    Ref: https://www.ibm.com/developerworks/cn/xml/x-datacompression/ Language-Equivalent (类似路径压缩 ) root ...

  3. 本人AI知识体系导航 - AI menu

    Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯   徐亦达老板 Dirichlet Process 学习 ...

  4. [Code] 烧脑之算法模型

    把博客的算法过一遍,我的天呐多得很,爱咋咋地! 未来可考虑下博弈算法. 基本的编程陷阱:[c++] 面试题之犄角旮旯 第壹章[有必要添加Python] 基本的算法思想:[Algorithm] 面试题之 ...

  5. [IR] BWT+MTF+AC

    BWT (Burrows–Wheeler_transform)数据转换算法 MTF(Move-to-front transform)数据转换 基于统计的压缩算法:游程编码 良心PPT: bwt_bas ...

  6. Data Block Compression

    The database can use table compression to eliminate duplicate values in a data block. This section d ...

  7. asp.net core 系列之Performance的 Response compression(响应压缩)

    本文,帮助了解响应压缩的一些知识及用法(大部分翻译于官网,英文水平有限,不准确之处,欢迎指正). 什么是响应压缩?响应压缩简单的说就是为了减少网络带宽,而把返回的响应压缩,使之体积缩小,从而加快响应的 ...

  8. Frontend Development

    原文链接: https://github.com/dypsilon/frontend-dev-bookmarks Frontend Development Looking for something ...

  9. Delphi资源大全

    A curated list of awesome Delphi frameworks, libraries, resources, and shiny things. Inspired by awe ...

随机推荐

  1. mongodb.mongoose维护内嵌数组元素

    运行环境: - Nodejs - MongoDB 文档实例名: ProjectJob 文档格式如下: { "_id" : ObjectId("5bc69eb0b298b3 ...

  2. ArcGIS10.6的新功能

    ArcMap 10.6 中引入了新的要素和功能,下面的章节将针对这些内容进行介绍. 要查看有关新特性的最新信息,请参阅 ArcMap web 帮助中的相关主题. 地理处理 3D Analyst 工具箱 ...

  3. WPF 实现阴影效果

    一.WPF最常见的一个阴影效果的类是DropShadowEffect.它有几种比较有用的属性比如:Color设置颜色Direction设置投影的方向ShadowDepth设置投影距纹理下方的距离Opa ...

  4. 机器学习算法中的偏差-方差权衡(Bias-Variance Tradeoff)

    简单的以下面曲线拟合例子来讲: 直线拟合后,相比原来的点偏差最大,最后一个图完全拟合了数据点偏差最小:但是拿第一个直线模型去预测未知数据,可能会相比最后一个模型更准确,因为最后一个模型过拟合了,即第一 ...

  5. CentOS7中ELK6.2.3安装

      一.配置主机名 hostnamectl set-hostname elk vim /etc/sysconfig/network修改HOSTNAME=elk 安装Java环境:yum install ...

  6. 疯狂Java学习笔记(75)-----------NIO.2第一篇

    Java 7引入了NIO.2.NIO.2是继承自NIO框架,并添加了新的功能(比如:处理软链接和硬链接的功能).这篇帖子包含三个部分,我将使用NIO.2的一些演示样例.由此向大家演示NIO.2的基本用 ...

  7. Mysql INSERT、REPLACE、UPDATE的区别

    用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句.言外之意,就是对数据进行修改.在标准的SQL中有3个语句,它们是INSE ...

  8. 实例展示elasticsearch集群生态,分片以及水平扩展.

    elasticsearch用于构建高可用和可扩展的系统.扩展的方式可以是购买更好的服务器(纵向扩展)或者购买更多的服务器(横向扩展),Elasticsearch能从更强大的硬件中获得更好的性能,但是纵 ...

  9. HTML5手机页面里面如何把长按复制避免

    在写HTML5手机页面的时候,有时候会写到一些标签是需要用户长按然后放开的 但是微信里面长按就会出现复制,大大影响了用户体验,那么如何可以避免呢? 我也是最近写到这样的页面,总结了一部分,大家可以作为 ...

  10. Spring与线程安全

    Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”.但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码. Spring对每个bean提 ...