随着电力系统规模的扩大和系统结构越发复杂,利用计算机技术开发出界面友好图形化软件对于提高电力系统自动化具有重要的意义。SVG作为W3C推出的一种基于XML文本性矢量描述语言,被IEC61970推荐为图形文件的基本格式,逐步成为行业标准[1]。SVG文件的优点为。

(1)表达能力强,删除和添加方便;

(2)支持图形无失真缩放;

SVG文件是纯粹的XML,拥有XML的所有特性,SVG作为电力图形系统数据载体已逐步成为一种趋势[2]。SVG文件以树的形式管理SVG元素,SVG元素都是基本图元与其属性构成的文本,基本图元有直线、圆、椭圆、文本、圆弧等,每一种图元都有相应的属性,如颜色、线宽、填充等。例如一个圆的SVG元素定义为,描述圆心为(30,60),半径为10个像素点,边框为黑色,线宽为2,填充为红色的圆。在电力图形系统中复杂的图形除去SVG文件固有格式的元素外,剩余的都是由这些基本的图元构成。

信息论之父Claude Shannon认为信息都存在冗余,SVG文件存在很多相同的属性文本,信息冗余量很大,有必要对SVG文件进行压缩。本文分别从统计编码Huffman编码和字典编码LZSS两种编码方案对SVG文件进行压缩,实验表明LZSS压缩算法的压缩比更高。

1 Huffman编码和LZSS编码原理

1.1 Huffman编码

Huffman编码是一种基于统计的变长编码,在编码前统计各模式的频率,根据不同模式的频率采用不同长度码字对其编码(对于出现频率高的模式,其编码的长度最短)。Huffman采用前缀码的方法表示每一个字符,前缀码有时也称前缀树[3],其特点是任何一个字符的编码都不能作为另外一个字符编码的前缀,这样可以大大简化解码过程,解码器只需要识别一个完整的前缀码就能解码当前字符,而不需要进一步读取后面的编码。Huffman编码的平均长度,在类似的编码方案中,Huffman编码获得的编码效果最好[4]。

Huffman编码过程是通过Huffman树的构建过程完成的。首先将字符的统计结果按照字符出现频率的降序排列,记待编码的数据为个数为n的字符集,集合;字符出现频率为,,集合为Huffman编码的二进制输出,为字符对应的二进制编码。编码带权路径长度,为编码输出的二进制长度。构造一个Huffman树的简单过程如图1。

表1展示了8个字符A∶K出现频率和经过Huffman编码后对应的二进制输出。

编码输出的带权路径长度为=2.58,而采用二进制编码需要的带权路径长度为3。根据表中字符出现的频率选择出现频率最小的两个字符A,B构造树,其左孩子为A,出现频率为0.01,右孩子为B,出现频率0.05,根节点为左右孩子出现频率之和0.06;并将字符A,B从字符集中删除。同时将作为新的字符加入字符集中,此时频率最小的两个节点是和字符F,同样按照构造树方式构造出整个Huffman树如图1。

1.2 LZSS编码原理

LZSS编码原理不同于基于统计方式的Huffman编码,它是基于字典压缩算法相关设备算法的改进,不再需要统计字符出现频率[5]。相关设备使用已出现的字符串的相关信息来表示当前需要被编码的字符串,在此过程中使用滑动窗口完成字符流的输入和字符串的匹配。在编码过程中,字符缓冲区的大小设定为N,已压缩好字符串的长度为M(M 压缩开始前,缓冲区设为空,字符串以字符流的方式从右至左进入超前查看缓冲区,找出超前查看缓冲区和正文窗口的匹配的最长字符串,假设找到最长匹配字符串,其起始位置为s,长度为L(长度可以为0),出现第一个不匹配的字符位置为e,这样从当前编码位置开始到第一个不匹配的字符可以编码为,且满足。如果编码信息占用空间比个字节小,便实现了字符串的压缩。具体算法流程如图3。

相关设备压缩算法存在时间和空间的性能约束

在压缩时间上存在性能瓶颈:超前查看缓冲区字符与正文字典匹配采用的是线性的匹配方式,超前查看窗口的大小为,正文窗口大小为M,表2给出了常用字符串匹配算法的平均时间复杂度[7]。

表2给出的算法时间复杂度最好的情况还是线性的,相关设备算法正文窗口一般设置为几千,超前查看缓冲区设置位十几,在进行字符串匹配时严重影响算法的时间性能[8]。而且都是相关窗口大小成正比。算法在压缩空间也存在缺陷:当未找到匹配字符串时,输出三元组占用的空间比需要进行编码的字符串占用的空间更大,出现负压缩的情况。

LZSS算法针对相关设备算法的这两点缺点作出了改进。LZSS采用二叉查找树技术替换了滑动窗口的线性查找,超前查看缓冲区字符串进入正文窗口时需要按照二叉查找树的特征加入到二叉树中,采用二叉查找树技术字符串的匹配时间极大优化,在压缩时间上极大地提高了压缩性能[5];LZSS在编码输出采用位标志方式區别输出,输出时编码输出与设定最小字符串长度的大小,只有在编码输出字节数较小采用编码输出,反之输出真正的字符。