[IR] Advanced XML Compression - ISX
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,我们只需要设计一种数据结构支持单点修改,区间查询就好辣。
这让我们联想到线段树。那么下一步我们就是考虑:如何从两个字节点合并成一个父节点。这让我们想起最长连续和。
考察一个合法的序列,如果它有贡献,那么序列的左右两边一定都有一个黑点,那么,父节点的最长序列有这样几种情况:
- 子序列在左边
- 子序列在右边
- 子序列跨过中间
对于前两种情况,我们递归处理,第三种情况的话,分析一下: 也就是说,题目只需要动态维护: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的更多相关文章
- [IR] Advanced XML Compression - XBW
思考:与ISX对比后能得出什么结论 原理解析: We proposed the XBW-transform that mimics on trees the nice structural prope ...
- [IR] XML Compression
Ref: https://www.ibm.com/developerworks/cn/xml/x-datacompression/ Language-Equivalent (类似路径压缩 ) root ...
- 本人AI知识体系导航 - AI menu
Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯 徐亦达老板 Dirichlet Process 学习 ...
- [Code] 烧脑之算法模型
把博客的算法过一遍,我的天呐多得很,爱咋咋地! 未来可考虑下博弈算法. 基本的编程陷阱:[c++] 面试题之犄角旮旯 第壹章[有必要添加Python] 基本的算法思想:[Algorithm] 面试题之 ...
- [IR] BWT+MTF+AC
BWT (Burrows–Wheeler_transform)数据转换算法 MTF(Move-to-front transform)数据转换 基于统计的压缩算法:游程编码 良心PPT: bwt_bas ...
- Data Block Compression
The database can use table compression to eliminate duplicate values in a data block. This section d ...
- asp.net core 系列之Performance的 Response compression(响应压缩)
本文,帮助了解响应压缩的一些知识及用法(大部分翻译于官网,英文水平有限,不准确之处,欢迎指正). 什么是响应压缩?响应压缩简单的说就是为了减少网络带宽,而把返回的响应压缩,使之体积缩小,从而加快响应的 ...
- Frontend Development
原文链接: https://github.com/dypsilon/frontend-dev-bookmarks Frontend Development Looking for something ...
- Delphi资源大全
A curated list of awesome Delphi frameworks, libraries, resources, and shiny things. Inspired by awe ...
随机推荐
- .w调用action
有两种方法发送Action请求,分别是sendBizRequest和sendBizRequest2,前者返回xml格式的参数,后者提供了返回json或者xml格式的参数的能力. 1.sendBizRe ...
- [原创]zabbix工具介绍,安装及使用
[原创]zabbix工具介绍,安装及使用 http://waringid.blog.51cto.com/65148/955939/
- Spring 3.1 M1: Unified Property Management(转)
In the first two posts of this series, I described the bean definition profiles feature, and how it ...
- 什么是物理像素、虚拟像素、逻辑像素、设备像素,什么又是 PPI, DPI, DPR 和 DIP
什么是物理像素.虚拟像素.逻辑像素.设备像素,什么又是 PPI, DPI, DPR 和 DIP?有关 viewport 以及苹果安卓设备上的页面呈现为什么效果不一样,又有哪些方法去改变和统一呢?网络上 ...
- mysql从库Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'报错处理
年后回来查看mysql运行状况与备份情况,登录mysql从库查看主从同步状态 mysql> show slave status\G; *************************** . ...
- kubeadm安装kubernetes V1.11.1 集群
之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...
- (转)热空气扭曲效果shader
转自:http://blog.sina.com.cn/s/blog_89d90b7c0102vaqy.html 热空气扭曲在大自然中形成是比较复杂的,这里只是通过取屏幕纹理和移动UV来模拟热扭曲效果. ...
- [Spring Unit Testing] Spring Unit Testing with a Java Context
For example, we want to test against a implemataion: package com.example.in28minutes.basic; import o ...
- about the libiconv.2.dylib
https://stackoverflow.com/questions/5835847/libiconv-2-dylib-mac-os-x-problem https://blog.csdn.net/ ...
- Effective Java 第三版——54. 返回空的数组或集合不要返回null
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...