数据快速压缩算法的研究以及c语言实现

上传人:bin****86 文档编号:60485666 上传时间:2018-11-16 格式:DOCX 页数:6 大小:17.59KB
返回 下载 相关 举报
数据快速压缩算法的研究以及c语言实现_第1页
第1页 / 共6页
数据快速压缩算法的研究以及c语言实现_第2页
第2页 / 共6页
数据快速压缩算法的研究以及c语言实现_第3页
第3页 / 共6页
数据快速压缩算法的研究以及c语言实现_第4页
第4页 / 共6页
数据快速压缩算法的研究以及c语言实现_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《数据快速压缩算法的研究以及c语言实现》由会员分享,可在线阅读,更多相关《数据快速压缩算法的研究以及c语言实现(6页珍藏版)》请在金锄头文库上搜索。

1、从本学科出发,应着重选对国民经济具有一定实用价值和理论意义的课题。课题具有先进性,便于研究生提出新见解,特别是博士生必须有创新性的成果数据快速压缩算法的研究以及C语言实现引言现有的压缩算法有很多种,但是都存在一定的局限性,比如:LZw1。主要是针对数据量较大的图像之类的进行压缩,不适合对简单报文的压缩。比如说,传输中有长度限制的数据,而实际传输的数据大于限制传输的数据长度,总体数据长度在100字节左右,此时使用一些流行算法反而达不到压缩的目的,甚至增大数据的长度。本文假设该批数据为纯数字数据,实现压缩并解压缩算法。1 数据压缩概念 联盟数据压缩是指在不丢失信息的前提下,缩减数据量以减少存储空间

2、,提高其传输、存储和处理效率的一种技术方法。或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间。常用的压缩方式2,3有统计编码、预测编码、变换编码和混合编码等。统计编码包含哈夫曼编码、算术编码、游程编码、字典编码等。常见几种压缩算法的比较 霍夫曼编码压缩4:也是一种常用的压缩方法。其基本原理是频繁使用的数据用较短的代码代替,很少使用的数据用较长的代码代替,每个数据的代码各不相同。这些代码都是二进制码,且码的长度是可变的。压缩方法5,6:LZW压缩技术比其它大多数压缩技术都复杂, 压缩效率也较高。其基本原理是把每一个第一次出现的字符串用一个数值来编码,在还原程序中再将这个数值还成原来

3、的字符串,如用数值0x100代替字符串ccddeee这样每当出现该字符串时,都用0x100代替,起到了压缩的作用。简单报文数据压缩算法及实现 算法的基本思想 数字0-9在内存中占用的位最大为4bit,而一个字节有8个bit,显然一个字节至少可以保存两个数字,而一个字符型的数字在内存中是占用一个字节的,那么就可以实现2:1的压缩,压缩算法有几种,比如,一个自己的高四位保存一个数字,低四位保存另外一个数字,或者,一组数字字符可以转换为一个n字节的数值。N为C语言某种数值类型的所占的字节长度,本文讨论后一种算法的实现。3.算法步骤确定一种C语言的数值类型。#define LONG short #de

4、fine NUM union un /* 用来保存数据 */确定该数据类型最大保存的数字长度。比如:short是2字节,即的15次方,推算出,最大可以保存字符99999可以推算出#define MAX_LEN,最多可以对5个数字字符进行换算成short。编写基本函数。字符转换为数值,数值转换为字符 ,单元压缩 ,单元解压缩函数。实现数字字符串压缩解压缩。对任意长度的数字字符串进行从左到右每五个进行分组,然后再采用单元压缩。/* 数字字符串压缩 */char* compress/* 数字字符串解压缩 */ char* uncompress3.算法的优化前置数字字符0,比如01234解压缩的时候

5、0就会丢掉,解决的办法就是在每一组之前加固定的数字字符,我们加固定的1,如static char* addFixedNum,/*解压缩时去掉*/ static char* delFixedNum。不同操作系统的大端小端问题,比如:windows是小端规则,unix是大端规则。通过定义宏#define L_ENDIAN,来解决该问题。对于字符转换为数字后,十六进制数字中间字节含0x00的情况处理,如下:XX01 转换成十六进制0xAB 0x00 0xcc 0x00 0x10x30xff 0x11,考虑到数据类型short是2位且有符号位的,而我们需要压缩的数子字符不存在正负的情况,则可利用该符号

6、位,对含有0x00的压缩片段打上一个标记。3.关键代码单元压缩static char *compress_unitLONG l = atoLONG;return getChar;单元解压缩static char *uncompress_unitint i = 0; unsigned char c; union un u;for c = c ;if 1 &= 0x7f; 0 = 0x00; return LONGtoa; 数字字符串压缩char* compresscount = strlen/MAX_LEN + %MAX_LEN) = 0 ? 0 : 1);formemset);len += N

7、UM; return cRet; 数字字符串解压缩char* uncompressmemset);count = strlen/NUM + %NUM) = 0 ? 0 : 1);forreturn delFixedNum; 3.算法的实现以s1为需要进行压缩的数字字符, s为压缩后的字符, s3为解压缩后的字符进行验证,验证函数如下。void mainchar s1 = 456;char s2BUF_LEN+1, s3BUF_LEN+1;memset); memset);printf);compress;uncompress;printf); 输入简单的数字字符,运行结果如图1。 输入连续连0的数字字符,运行结果如图2。从上面可以看出,不管输入任何字符,都可以按照原来的字符进行解压缩出来。结束语本文根据企业的实际需要,研究并实现了对简单报文数据的压缩及解压缩算法,目前已经应用于企业的项目开发中。课题份量和难易程度要恰当,博士生能在二年内作出结果,硕士生能在一年内作出结果,特别是对实验条件等要有恰当的估计。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号