RAY压缩是综合统计和字典方法,针对数据库的压缩算法,该方法有较高的压缩比。该方法的基本思想是:首先,对源数据流中的连字(就是相邻的两个字节)进行统频,将频率最高的连字用一个新的字符代替,那么这个字符和连字构成一个规则,重复上面的操作,直到连字频率小到某一个阈值。下面用一个例子来说明RAY的压缩流程。
RAY压缩示例:
对字符序列rubdubrubdub进行操作
连字频率                      初始化语法 候选规则     语法结果
……………………………………………………………………………………………………
ru:2,ub:4,bd:2,du:2,br:1 1->rubdubrubdub ub:4     1->r2d2r2d2
                                                           2->ub……………………………………………………………………………………………………
r2:2,2d:2,d2:2,2r:1 1->r2d2r2d2      r2:2,d2:2     1->3434
                            2->ub                        2->ub;
                                                           3->r2
                                                           4->d2
……………………………………………………………………………………………………34:2,43:1                 1->3434           34:2         1->55    
                            2->ub                         2->ub
                           3->r2;4->d2                    5->r2d2  ……………………………………………………………………………………………………                
55:1                        1->55                          1->55
                            2->ub                          2->ub
                            5->r2d2                         5->r2d2
……………………………………………………………………………………………………
根据语法规则,对源数据流进行替换后,再对语法规则进行Huffman或Shannon-Fano编码,附加在压缩数据流后面。
这里为了简单,直接将语法规则附加在压缩数据流后面,不进行编码。rubdubrubdub压缩后是什么呢?
如果是552ub5r2d2,那如何解压呢?怎么知道哪是规则那是数据?还有所谓的RAY-Period 算法是什么东西?有做过的讲两句吗?