[IR] Advanced XML Compression - ISX

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


 

ISX Requirementsgithub

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 Structureapp

 

Figure, Sample DBLP XML Fragment  ide

 

壓縮過程:post

採用以下Balanced Parenthesis Encoding方法:(真是一個壓縮 tree structure 的好辦法!經過深度有限遍歷搞定,DFS)性能

 

還原過程:ui

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?

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

 

最後不能忘了把算法的性能吹一吹,指標以下所示:

相關文章
相關標籤/搜索