[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: 化树为线性数列,从而解决问题。

它的括号序列就是 ((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, 11

  ) ( ( ) ) (  
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?

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

 

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

 

posted @ 2017-06-05 19:51  郝壹贰叁  阅读(338)  评论(0编辑  收藏  举报