当前位置:首页 » 操作系统 » 数据压缩算法的实现研究

数据压缩算法的实现研究

发布时间: 2022-05-11 17:26:50

压缩算法原理

哈夫曼
哈夫曼编码是无损压缩当中最好的方法。它使用预先二进制描述来替换每个符号,长度由特殊符号出现的频率决定。常见的符号需要很少的位来表示,而不常见的符号需要很多为来表示。

哈夫曼算法在改变任何符号二进制编码引起少量密集表现方面是最佳的。然而,它并不处理符号的顺序和重复或序号的序列。

2.1 原理
我不打算探究哈夫曼编码的所有实际的细节,但基本的原理是为每个符号找到新的二进制表示,从而通常符号使用很少的位,不常见的符号使用较多的位。

简短的说,这个问题的解决方案是为了查找每个符号的通用程度,我们建立一个未压缩数据的柱状图;通过递归拆分这个柱状图为两部分来创建一个二叉树,每个递归的一半应该和另一半具有同样的权(权是 ∑ N K =1 符号数 k , N 是分之中符号的数量,符号数 k 是符号 k出现的次数 )

这棵树有两个目的:

1. 编码器使用这棵树来找到每个符号最优的表示方法

2. 解码器使用这棵树唯一的标识在压缩流中每个编码的开始和结束,其通过在读压缩数据位的时候自顶向底的遍历树,选择基于数据流中的每个独立位的分支,一旦一个到达叶子节点,解码器知道一个完整的编码已经读出来了。

压缩后的数据流是 24 位(三个字节),原来是 80 位( 10 个字节)。当然,我应该存储哈夫曼树,这样解码器就能够解码出对应的压缩流了,这就使得该例子中的真正数据流比输入的流数据量大。这是相对较短的数据上的副作用。对于大数据量来说,上面的哈夫曼树就不占太多比例了。

解码的时候,从上到下遍历树,为压缩的流选择从左 / 右分支,每次碰到一个叶子节点的时候,就可以将对应的字节写到解压输出流中,然后再从根开始遍历。

2.2 实现
哈夫曼编码器可以在基本压缩库中找到,其是非常直接的实现。

这个实现的基本缺陷是:

1. 慢位流实现

2. 相当慢的解码(比编码慢)

3. 最大的树深度是 32 (编码器在任何超过 32 位大小的时候退出)。如果我不是搞错的话,这是不可能的,除非输出的数据大于 2 32字节。

另一方面,这个实现有几个优点:

1. 哈夫曼树以一个紧密的形式每个符号要求 12 位(对于 8 位的符号)的方式存储,这意味着最大的头为 384 。

2. 编码相当容易理解

哈夫曼编码在数据有噪音的情况(不是有规律的,例如 RLE )下非常好,这中情况下大多数基于字典方式的编码器都有问题。

⑵ 有损压缩算法

基本的分为两大类:有损和无损。
有损压缩:主要是一些量化算法,比如a率,u率,lloyds最优量化。
无损压缩:主要是一些编码算法,比如子带编码,差分编码,哈夫曼编码等。
另外时频变换虽然没压缩效果,但是是很好的压缩工具,比如fft,dct等。
最后就是压缩感知稀疏重建等。
由于信息丢失意味着在误差和比特率之间进行一些权衡,我们首先考虑失真度量---例如,平方误差。本文引入了不同的量化器,每个量化器都具有不同的失真行为。许多有损数据压缩算法开发的数学基础是随机过程的研究。

介绍:

当图像直方图相对平坦时,使用无损压缩技术(例如,霍夫曼编码,算术编码,LZW)的图像数据的压缩比较低。对于需要更高压缩比的多媒体应用中的图像压缩,通常采用有损方法。在有损压缩中,压缩图像通常与原始图像不同,但在感知上与原始图像近似。为了定量描述近似值与原始数据的接近程度,需要某种形式的失真度量。

失真测量:

失真度量是一种数学量,它使用一些失真标准指定近似值与其原始值的接近程度。在查看压缩数据时,很自然地会根据原始数据和重建数据之间的数值差异来考虑失真。 然而,当要压缩的数据是图像时,这样的度量可能不会产生预期的结果。

例如,如果重建的图像与原始图像相同,只是它被向右移动一条垂直扫描线,那么普通的人类观察者将难以将其与原始图像区分开,因此可以得出结论:失真很小。 然而,当以数字方式执行计算时,由于重建图像的各个像素的大的变化,我们发现大的失真。问题是我们需要一种感知失真的测量,而不是一种更天真的数值方法。然而,对感知扭曲的研究超出了本书的范围。

在已经定义的许多数值失真度量中,我们提出了图像压缩中最常用的三种。如果我们对平均像素差异感兴趣,则经常使用均方误差(MSE)。 它被定义为

⑶ 电子信息工程毕业论文

88. 基于MPT-1327的集群系统智能基站的研究与设计
89. 基于J2ME的手机部分功能实现
90. 购销存财务软件的应用比较
91. 高清视频多媒体播放器
92. 基于CORBA网络管理技术及其安全性的研究和应用
93. 基本asp.net开发的网上商场的设计与实现
94. 桂林大广电子公司网站设计
95. 电信客户关系管理系统的分析与实现
96. 企业办公局域网的建设
97. 第三代移动通信承载业务和QoS处理机制无线资源管
98. 计算机病毒动态防御系统毕业论文
99. 3G标准化进程及其演进策略
100. 鲁棒数字水印算法的研究和比较
101. 基于SPCE061A的语音遥控小车设计——?硬件电路设计
102. B2C电子商务在线信任模型实证研究
103. 基于TQ5631 3V PCS波段CDMA射频放大混频器电路设计
104. 基于TQ5135的芯片简介及应用电路设计
105. 基于TQ5121的无线数据接收器电路设计
106. 基于mpc92433芯片的简介及应用电路设计
107. 基于MPC9992 芯片简介及应用电路设计
108. 基于mpc9239芯片简介及应用电路设计
109. 基于MPC9229 芯片简介及应用电路设计
110. 基于MPC97H73的简介及电路设计
111. 基于MC88920芯片简介及应用电路设计
112. 基于MC12430的芯片简介及应用电路设计
113. 基于MAX9995的芯片简介及应用电路设计
114. 基于MAX9994的芯片简介及应用电路设计
115. 基于MAX9981芯片简介及应用电路设计
116. 基于MAX2753的芯片简介及应用电路设计
117. 基于MAX2685的芯片简介及应用电路设计
118. 基于MAX2511的芯片简介及应用电路设计
119. 基于MAX2338芯片简介及应用电路设计
120. 基于MAX2323/MAX2325 的芯片简介及应用电路设计
121. 基于MAX2106 芯片简介及应用电路设计
122. 基于MAX2102/MAX2105芯片简介及应用电路设计
123. 基于MAX2039的芯片简介及应用电路设计
124. 基于LT5516的芯片简介及应用电路设计
125. 基于LT5572的芯片简介及应用电路设计
126. 基于LT5527的400MHz至3.7GHz高信号电平下变频混频器电路设计
127. 基于LT5517 40MHZ到90NHZ 积分解调器的设计
128. 基于LT5500f 的1.8~2.7 GHzLNA/混频器电路设计
129. 基于LMX2306/16/26 芯片简介及应用电路设计
130. LMX2350/LMX2352芯片简介及电路设计
131. 基于IMA-93516的芯片简介及应用电路设计
132. 基于CXA3556N的芯片简介及应用电路设计
133. 基于CXA3275Q的芯片简介及应用电路设计
134. 基于CX3627ERDE的芯片简介及应用电路设计
135. 基于CMOS 的AD9831芯片数字频率合成器的电路设计
136. 基于CMOS 200 MHZ数字正交上变频器设计
137. 基于ADL5350的简介及应用电路设计
138. 基于ADF4360-7的集成整形N合成器的压控振荡器
139. 基于ADF4360-6的简介及应用电路设计
140. 基于ADF4360-3电路芯片简介及应用电路设计
141. 基于ADF4360-0的芯片简介及应用电路设计
142. 基于ADF4154的芯片简介及应用电路设计
143. 基于ADF4110/ADF4111/ADF4112/ADF4113上的应用电路设计
144. 基于ADF4007简介及电路设计
145. 基于ADF436的集成数字频率合成器与压控振荡器
146. 基于AD9952的芯片简介和应用电路设计
147. 基于AD9540的芯片简介及电路设计
148. 基于AD9511的简介及电路应用
149. 基于AD8349的简介及应用电路设计
150. 基于AD8348的50M-1000M正交解调器
151. 基于AD8341 芯片简介及应用电路设计
152. 基于AD7008的芯片简介及应用电路设计
153. 基于AD831低失真有源混频器的电路设计
154. 基于 MAX2450芯片简介及应用电路设计
155. 基于900MHz低压LVPECL时钟合成器的电路设计
156. 基于400MSPS 14-Bit,1.8VCMOS直接数字合成器AD9951
157. 高增益矢量乘法器
158. MPC92432芯片简介及应用电路设计
159. MAX2754芯片简介及应用电路设计
160. LMX2310U/LMX2311U/LMX2312U/LMX2313U芯片简介及应用电路设计
161. ADF4193芯片简介及应用电路设计
162. 基于ADF4116/4117/4118的芯片简介及应用电路设计
163. 3.3V低压CMOS零延迟1:11时钟发生器
164. 音频信号的数字水印技术
165. 基于ANSYS8.0的永磁直线电机的有限元分析及计算
166. 三层结构的工作流OA的应用与实现
167. 模糊控制在锅炉焊接过程中的应用
168. 无线传输应变型扭矩仪
169. 基于MATLAB的直流电动机双闭环调速系统
170. 不对称半桥直直变换器仿真研究
171. 等精度数字频率计
172. 基于DSP的短波通信系统设计(射频单元)
173. 单片机控制的微型频率计设计
174. 程控交换机房环境监测系统设计
175. 基于LabVIEW的测试结果语音表达系统
176. 简易远程心电监护系统
177. 温度检测控制仪器
178. 无线会议系统的设计
179. 直接转矩控制交流调速系统的转矩数字调节器
180. 加热炉的非线性PID控制算法研究
181. 焦炉立火道温度软测量模型设计
182. 汽车牌照定位与分割技术的研究
183. 数字图象融合技术
184. 基于奇异值分解的数字图像水印算法研究
185. 图像压缩编码
186. 基于分形的自然景物图形的生成
187. 三维激光扫描仪中图像处理快速算法设计
188. 网络配置管理对象分析与应用
189. 网络文档发放与认证管理系统
190. 语音信号处理技术及应用
191. 英特网上传输文件的签名与验证程序
192. 基于小波变换的配电网单相接地故障定位研究及应用
193. 基于小波变换的数据压缩算法的研究与实现
194. 基于网络数据处理XML技术的设计
195. 基于宽带声音子带编码的数据压缩算法的设计与实现
196. 基于活动图像编码的数据压缩算法的设计与实现
197. 基于分布式体系结构的工序调度系统的设计
198. 远程监护系统的数据记录与传输技术研究
199. 自适应蚁群算法在DNA序列比对中的应用
200. 基于粗糙集和规则树的增量式知识获取算法
201. 基于windows的串口通信软件设计
202. 基于MATLAB的对称振子阻抗特性和图形仿真
203. 基于Matlab的FMCW(调频连续波)的中频正交处理和脉冲压缩处理
204. 基于internet的嵌入式远程测控终端研制
205. 基于Huffman编码的数据压缩算法的研究与实现
206. 基于DM642的H.264视频编码器优化和实现
207. 基于AES算法的HASH函数的设计与应用
208. 基于AES的加密机制的实现
209. 大学自动排课算法设计与实现
210. 复合加密系统中DES算法的实现
211. 分布式计算环境的设计与实现
212. 嵌入式系统建模仿真环境PtolemyII的研究与应用
213. 基于小波变换和神经网络的短期负荷预测研究
214. 基于小波变换数字图像水印盲算法
215. 基于语音信号预测编码的数据压缩算法的研究与实现
216. 采用S12交换机支持NGN下MEGACO呼叫流程的设计
217. WLAN的OFDM信道估计算法研究
218. USB通信研究及其在虚拟仪器中的应用设计
219. 同步电机模型的MATLAB仿真
220. 有限冲击响应滤波器的设计及其DSP实现
221. 手写体数字识别
222. 图像锐化算法的研究及其DSP实现
223. 纱条均匀度测试的研究 答案来自 http://www.lwtxw.com/html/46/

⑷ 简述一下hdfs的数据压缩算法,工作中用的是哪种算法,为什么

1、在HDFS之上将数据压缩好后,再存储到HDFS
2、在HDFS内部支持数据压缩,这里又可以分为几种方法:
2.1、压缩工作在DataNode上完成,这里又分两种方法:
2.1.1、数据接收完后,再压缩
这个方法对HDFS的改动最小,但效果最低,只需要在block文件close后,调用压缩工具,将block文件压缩一下,然后再打开block文件时解压一下即可,几行代码就可以搞定
2.1.2、边接收数据边压缩,使用第三方提供的压缩库
效率和复杂度折中方法,Hook住系统的write和read操作,在数据写入磁盘之前,先压缩一下,但write和read对外的接口行为不变,比如:原始大小为100KB的数据,压缩后大小为10KB,当写入100KB后,仍对调用者返回100KB,而不是10KB
2.2、压缩工作交给DFSClient做,DataNode只接收和存储
这个方法效果最高,压缩分散地推给了HDFS客户端,但DataNode需要知道什么时候一个block块接收完成了。
推荐最终实现采用2.2这个方法,该方法需要修改的HDFS代码量也不大,但效果最高。

⑸ 衡量数据压缩方法的指标有哪些

衡量数据压缩方法的指标:压缩比、速度、效果。
数据压缩是指在不丢失信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率的一种技术方法。或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间。数据压缩包括有损压缩和无损压缩。
数据压缩分为两类,有三种分法:
1、即时压缩和非即时压缩
即时压缩是将语音信号转化为数字信号,同时进行压缩,然后即时通过Internet传送出去。即时压缩一般应用在影像、声音数据的传送中。
非即时压缩是在需要的情况下才进行,没有即时性。非即时压缩一般不需要专门的设备,直接在计算机中安装并使用相应的压缩软件即可。
2、数字压缩和文件压缩
数字压缩是专指一些具有时间性的数据,这些数据常常是即时采集、即时处理或传输的。
文件压缩是专指对将要保存在磁盘等物理介质的数据进行压缩,如一篇文章数据、一段音乐数据、一段程序编码数据等的压缩。
3、无损压缩与有损压缩
无损压缩利用数据的统计冗余进行压缩,所以无损压缩的压缩比一般比较低。这类方法广泛应用于文本数据、程序和特殊应用场合的图像数据等需要精确存储数据的压缩。
有损压缩方法利用了人类视觉、听觉对图像、声音中的某些频率成分不敏感的特性,允许压缩的过程中损失一定的信息。有损压缩广泛应用于语音、图像和视频数据的压缩。
拓展资料:数据压缩的应用:
一种非常简单的压缩方法是行程长度编码,这种方法使用数据及数据长度这样简单的编码代替同样的连续数据,这是无损数据压缩的一个实例。这种方法经常用于办公计算机以更好地利用磁盘空间、或者更好地利用计算机网络中的带宽。对于电子表格、文本、可执行文件等这样的符号数据来说,无损是一个非常关键的要求,因为除了一些有限的情况,大多数情况下即使是一个数据位的变化都是无法接受的。
对于视频和音频数据,只要不损失数据的重要部分一定程度的质量下降是可以接受的。通过利用人类感知系统的局限,能够大幅度地节约存储空间并且得到的结果质量与原始数据质量相比并没有明显的差别。这些有损数据压缩方法通常需要在压缩速度、压缩数据大小以及质量损失这三者之间进行折中。
有损图像压缩用于数码相机中,大幅度地提高了存储能力,同时图像质量几乎没有降低。用于DVD的有损MPEG-2编解码视频压缩也实现了类似的功能。
在有损音频压缩中,心理声学的方法用来去除信号中听不见或者很难听见的成分。人类语音的压缩经常使用更加专业的技术,因此人们有时也将“语音压缩”或者“语音编码”作为一个独立的研究领域与“音频压缩”区分开来。不同的音频和语音压缩标准都属于音频编解码范畴。例如语音压缩用于因特网电话,而音频压缩被用于CD翻录并且使用MP3播放器解码。
理论压缩的理论基础是信息论(它与算法信息论密切相关)以及率失真理论,这个领域的研究工作主要是由Claude Shannon奠定的,他在二十世纪四十年代末期及五十年代早期发表了这方面的基础性的论文。Doyle和Carlson在2000年写道数据压缩“有所有的工程领域最简单、最优美的设计理论之一”。密码学与编码理论也是密切相关的学科,数据压缩的思想与统计推断也有很深的渊源。
许多无损数据压缩系统都可以看作是四步模型,有损数据压缩系统通常包含更多的步骤,例如它包括预测、频率变换以及量化。

⑹ 几种无损数据压缩算法的探讨及在java web程序中的应用

Tomcat是Sun的JSWDK(JavaServer Web Development Kit)中Servlet的运行环境(servlet容器)。Tomcat是Apache Jakarta软件组织的一个子项目,Tomcat是一个JSP/Servlet容器,它是在SUN公司的JSWDK(Java Server Web Development Kit)基础上发展起来的一个JSP和Servlet规范的标准实现,使用Tomcat可以体验JSP和Servlet的最新规范。经过多年的发展,Tomcat不仅是JSP和Servlet规范的标准实现,而且具备了很多商业Java Servlet容器的特性,并被一些企业用于商业用途。

JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术

WebLogic服务器是企业级的应用服务器,支持EJB, 集群以及 ERP(企业资源计划)的连通性 ,开发公司:BEA。

WebSphere产品系列是IBM公司一套典型的电子商务应用开发工具及运行环境

⑺ 基于Huffman编码的数据压缩算法的研究与实现

这是我们上学期做的一个上机题:

上机题:设电文字符集D及各字符出现的概率F如下:
D={a,b,c,d,e,f,g,h}(字符数n=8)
F={5,29,7,8,14,23,3,11}(%)
编写完成下列功能的程序:
①构造关于F的Huffman树;
②求出并打印D总各字符的Huffman编码。
程序结构: 类型说明;
构造Huffman树的函数:Huffman_tree(H[m+1]);
求Huffman编码的函数:Huffman_code(code[n+1]);
main()
{ 变量说明;
输入字符集D及频率F;
调用Huffman_tree(H);
调用Huffman_code(code);
打印编码;Y继续,N退出}

运行后,输入8个字符(中间不能有空格,否则将空格视为字符处理),然后输入概率(整数,空格或回车分隔。如果要支持浮点数,要改程序)然后Enter,出现构造的霍夫曼节点和编码,程序如下:(因为这只是一个上机题目,所以程序不复杂,也没有论文,希望对你有帮助)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define N 8
#define M 2*N-1
#define MAX 32767
typedef char datatype;
typedef struct
{
int wi;
char data;
int Parent,Lchild,Rchild;
}huffm;
typedef struct
{
char bits[N+1];
int start;
char ch;
}ctype;

void Huffman_tree(huffm H[M+1])
{
int i,j,p1,p2;
int w,s1,s2;
for(i=1;i<=M;i++)
{
H[i].wi=MAX;
H[i].Parent=0;
H[i].Lchild=H[i].Rchild=0;
}
printf("please enter the weight:\n");
for(i=1;i<=N;i++)
{
scanf("%d",&H[i].wi);
}

for(i=N+1;i<=M;i++)
{
p1=p2=0;
s1=s2=MAX;
for(j=1;j<=M;j++)
if(H[j].Parent==0)
if(H[j].wi<s1)
{
s2=s1;
s1=H[j].wi;
p2=p1; p1=j;
}
else if(H[j].wi<s2) {s2=H[j].wi; p2=j;}
H[p1].Parent=H[p2].Parent=i;
H[i].Lchild=p1;
H[i].Rchild=p2;
H[i].wi=H[p1].wi+H[p2].wi;
}
printf("Number\tParent\tLchild\tRchild\n");
for(i=1;i<=M;i++)
printf("%d\t%d\t%d\t%d\n",i,H[i].Parent,H[i].Lchild,H[i].Rchild);

}
void Huffman_code(ctype code[N+1])
{
int i,j,p,s;
char c[N];
huffm H[M+1];
ctype md;
printf("please enter char:\n");
/* for(i=1;i<=N;i++)
{
scanf("%c",&c);
H[i].data=code[i].ch=c;
}
*/
scanf("%s",c);
for(i=1;i<=N;i++)H[i].data=code[i].ch=c[i-1];
Huffman_tree(H);

for(i=1;i<=N;i++)
{
md.ch=code[i].ch;
md.start=N+1;
s=i;
p=H[i].Parent;
while(p!=0)
{
md.start--;
if(H[p].Lchild==s)
md.bits[md.start]='1';
else
md.bits[md.start]='0';
s=p;
p=H[p].Parent;
}
code[i]=md;
}
printf("print the code:\n");
for(i=1;i<=N;i++)
printf("%c\t",code[i].ch);
printf("\n");
for(i=1;i<=N;i++)
{
for(j=code[i].start;j<=N;j++)
printf("%c",code[i].bits[j]);
printf("\t");
}
printf("\n");
}
int Continue()
{ char c;
getchar();
printf("continue? y/n\n");
c=getchar();
if(c=='y') return 1;
else return 0;
}
main()
{
do{
/* huffm H[M+1]; */
ctype code[N+1];
Huffman_code(code);

}while(Continue());

}

⑻ 数据无损压缩技术到底怎么实现的

无损数据压缩(Lossless Compression)是指使用压缩后的数据进行重构(或者叫做还原,解压缩),重构后的数据与原来的数据完全相同;无损压缩用于要求重构的信号与原始信号完全一致的场合。也就是说数据经过压缩后信息不受损失,还能完全恢复到压缩前的原样。它和有损数据压缩相对。这种压缩通常压缩比小于有损数据压缩的压缩比。
一个很常见的例子是磁盘文件的压缩。根据目前的技术水平,无损压缩算法一般可以把普通文件的数据压缩到原来的1/2~1/4。一些常用的无损压缩算法有霍夫曼(Huffman)算法和LZW(Lenpel-Ziv & Welch)压缩算法。

⑼ 数据压缩技术分为哪两类使用方法是什么

【导读】数据压缩技术是大数据传输过程中需要采用的一种数据存储方法。那么数据压缩技术分为哪两类?使用方法是什么呢?为此小编今天就来和大家细细聊聊关于数据压缩技术那些事,同时也提醒各位大数据工程师在使用数据压缩过程中的一些注意事项及使用方法。

在数据压缩中,通过使用比原始数据更少的位来对数据进行编码,数据压缩有两种方法:无损压缩,它消除了冗余但不丢失任何原始数据;有损数据压缩,可通过删除不必要或不太重要的信息来修改数据,在大数据的传输和存储中使用数据压缩非常重要,因为它减少了IT部门必须为该数据提供的网络带宽和存储量,同样重要的是,您实际上并不想保留某些类型的大数据,例如作为物联网(IoT)通信数据一部分的设备间握手引起的抖动。

为了最大程度地利用大数据进行数据压缩,您必须知道何时何地使用不同类型的数据压缩工具和公式。选择数据压缩方法时,请牢记以下几条有用的准则:

何时使用无损数据压缩

如果您有一个大数据应用程序,并且无法承受丢失任何数据的麻烦,并且需要解压缩压缩的每个字节的数据,那么您将需要一种无损的数据压缩方法,当您压缩来自数据库的数据时,即使您意味着必须存储更多的数据,也希望进行无损数据压缩。在选择将此数据重新提交到其数据库时,您需要解压缩完整数据,以便它可以与数据库端的数据匹配并进行存储。

何时使用有损数据压缩

有时您不需要或不需要所有数据,例如物联网和网络设备的抖动,您不需要这些数据,只需提供给您业务所需的上下文信息的数据即可。第二个示例是在数据压缩过程的前端可能使用的数据压缩公式中使用人工智能(AI),如果您正在研究一个特定的问题,并且只希望与该问题直接相关的数据,则可以决定让数据压缩公式不包含与该问题无关的任何数据。

如何选择正确的编解码器

一个编解码器是一个硬件,软件的组合,压缩和解压缩数据,所以它在大数据压缩和解压缩操作的核心作用,编解码器有许多种,因此为正确的数据或文件类型选择正确的编解码器很重要,您选择的编解码器类型将取决于您尝试压缩的数据和文件类型,有无损和有损数据的编解码器,也有一些编解码器必须将所有数据文件作为“整体”处理,而其他编解码器可以将数据分割开,以便可以对其进行并行处理,然后在其目的地重新组合,某些编解码器设置用于可视数据,而其他编解码器仅处理音频数据。

为什么数据压缩很重要?

确定将用于大数据的数据压缩类型是大数据操作的重要组成部分,仅在资源端,IT人员就无法承受处理失控和迅速发展的存储的成本,即使必须完整存储数据,也应尽可能地对其进行压缩,也就是说,您可以采取其他步骤来限制存储和处理,以及针对大数据压缩中采用的算法和方法的最适合操作,掌握这些选项是IT部门的关键数据点。

以上就是小编今天给大家整理分享关于“数据压缩技术分为哪两类?使用方法是什么?”的相关内容希望对大家有所帮助。小编认为要想在大数据行业有所建树,需要考取部分含金量高的数据分析师证书,这样更有核心竞争力与竞争资本。

⑽ 数据压缩技术的数据压缩技术简史

电脑里的数据压缩其实类似于美眉们的瘦身运动,不外有两大功用。第一,可以节省空间。拿瘦身美眉来说,要是八个美眉可以挤进一辆出租车里,那该有多省钱啊!第二,可以减少对带宽的占用。例如,我们都想在不到 100Kbps 的 GPRS 网上观看 DVD 大片,这就好比瘦身美眉们总希望用一尺布裁出七件吊带衫,前者有待于数据压缩技术的突破性进展,后者则取决于美眉们的恒心和毅力。
简单地说,如果没有数据压缩技术,我们就没法用 WinRAR 为 Email 中的附件瘦身;如果没有数据压缩技术,市场上的数码录音笔就只能记录不到 20 分钟的语音;如果没有数据压缩技术,从 Internet 上下载一部电影也许要花半年的时间……可是这一切究竟是如何实现的呢?数据压缩技术又是怎样从无到有发展起来的呢? 一千多年前的中国学者就知道用“班马”这样的缩略语来指代班固和司马迁,这种崇尚简约的风俗一直延续到了今天的 Internet 时代:当我们在 BBS 上用“ 7456 ”代表“气死我了”,或是用“ B4 ”代表“ Before ”的时候,我们至少应该知道,这其实就是一种最简单的数据压缩呀。
严格意义上的数据压缩起源于人们对概率的认识。当我们对文字信息进行编码时,如果为出现概率较高的字母赋予较短的编码,为出现概率较低的字母赋予较长的编码,总的编码长度就能缩短不少。远在计算机出现之前,着名的 Morse 电码就已经成功地实践了这一准则。在 Morse 码表中,每个字母都对应于一个唯一的点划组合,出现概率最高的字母 e 被编码为一个点“ . ”,而出现概率较低的字母 z 则被编码为“ --.. ”。显然,这可以有效缩短最终的电码长度。
信息论之父 C. E. Shannon 第一次用数学语言阐明了概率与信息冗余度的关系。在 1948 年发表的论文“通信的数学理论( A Mathematical Theory of Communication )”中, Shannon 指出,任何信息都存在冗余,冗余大小与信息中每个符号(数字、字母或单词)的出现概率或者说不确定性有关。 Shannon 借鉴了热力学的概念,把信息中排除了冗余后的平均信息量称为“信息熵”,并给出了计算信息熵的数学表达式。这篇伟大的论文后来被誉为信息论的开山之作,信息熵也奠定了所有数据压缩算法的理论基础。从本质上讲,数据压缩的目的就是要消除信息中的冗余,而信息熵及相关的定理恰恰用数学手段精确地描述了信息冗余的程度。利用信息熵公式,人们可以计算出信息编码的极限,即在一定的概率模型下,无损压缩的编码长度不可能小于信息熵公式给出的结果。
有了完备的理论,接下来的事就是要想办法实现具体的算法,并尽量使算法的输出接近信息熵的极限了。当然,大多数工程技术人员都知道,要将一种理论从数学公式发展成实用技术,就像仅凭一个 E=mc 2 的公式就要去制造核武器一样,并不是一件很容易的事。 设计具体的压缩算法的过程通常更像是一场数学游戏。开发者首先要寻找一种能尽量精确地统计或估计信息中符号出现概率的方法,然后还要设计一套用最短的代码描述每个符号的编码规则。统计学知识对于前一项工作相当有效,迄今为止,人们已经陆续实现了静态模型、半静态模型、自适应模型、 Markov 模型、部分匹配预测模型等概率统计模型。相对而言,编码方法的发展历程更为曲折一些。
1948 年, Shannon 在提出信息熵理论的同时,也给出了一种简单的编码方法—— Shannon 编码。 1952 年, R. M. Fano 又进一步提出了 Fano 编码。这些早期的编码方法揭示了变长编码的基本规律,也确实可以取得一定的压缩效果,但离真正实用的压缩算法还相去甚远。
第一个实用的编码方法是由 D. A. Huffman 在 1952 年的论文“最小冗余度代码的构造方法( A Method for the Construction of Minimum Rendancy Codes )”中提出的。直到今天,许多《数据结构》教材在讨论二叉树时仍要提及这种被后人称为 Huffman 编码的方法。 Huffman 编码在计算机界是如此着名,以至于连编码的发明过程本身也成了人们津津乐道的话题。据说, 1952 年时,年轻的 Huffman 还是麻省理工学院的一名学生,他为了向老师证明自己可以不参加某门功课的期末考试,才设计了这个看似简单,但却影响深远的编码方法。
Huffman 编码效率高,运算速度快,实现方式灵活,从 20 世纪 60 年代至今,在数据压缩领域得到了广泛的应用。例如,早期 UNIX 系统上一个不太为现代人熟知的压缩程序 COMPACT 实际就是 Huffman 0 阶自适应编码的具体实现。 20 世纪 80 年代初, Huffman 编码又出现在 CP/M 和 DOS 系统中,其代表程序叫 SQ 。今天,在许多知名的压缩工具和压缩算法(如 WinRAR 、 gzip 和 JPEG )里,都有 Huffman 编码的身影。不过, Huffman 编码所得的编码长度只是对信息熵计算结果的一种近似,还无法真正逼近信息熵的极限。正因为如此,现代压缩技术通常只将 Huffman 视作最终的编码手段,而非数据压缩算法的全部。
科学家们一直没有放弃向信息熵极限挑战的理想。 1968 年前后, P. Elias 发展了 Shannon 和 Fano 的编码方法,构造出从数学角度看来更为完美的 Shannon-Fano-Elias 编码。沿着这一编码方法的思路, 1976 年, J. Rissanen 提出了一种可以成功地逼近信息熵极限的编码方法——算术编码。 1982 年, Rissanen 和 G. G. Langdon 一起改进了算术编码。之后,人们又将算术编码与 J. G. Cleary 和 I. H. Witten 于 1984 年提出的部分匹配预测模型( PPM )相结合,开发出了压缩效果近乎完美的算法。今天,那些名为 PPMC 、 PPMD 或 PPMZ 并号称压缩效果天下第一的通用压缩算法,实际上全都是这一思路的具体实现。
对于无损压缩而言, PPM 模型与算术编码相结合,已经可以最大程度地逼近信息熵的极限。看起来,压缩技术的发展可以到此为止了。不幸的是,事情往往不像想象中的那样简单:算术编码虽然可以获得最短的编码长度,但其本身的复杂性也使得算术编码的任何具体实现在运行时都慢如蜗牛。即使在摩尔定律大行其道, CPU 速度日新月异的今天,算术编码程序的运行速度也很难满足日常应用的需求。没办法,如果不是后文将要提到的那两个犹太人,我们还不知要到什么时候才能用上 WinZIP 这样方便实用的压缩工具呢。 逆向思维永远是科学和技术领域里出奇制胜的法宝。就在大多数人绞尽脑汁想改进 Huffman 或算术编码,以获得一种兼顾了运行速度和压缩效果的“完美”编码的时候,两个聪明的犹太人 J. Ziv 和 A. Lempel 独辟蹊径,完全脱离 Huffman 及算术编码的设计思路,创造出了一系列比 Huffman 编码更有效,比算术编码更快捷的压缩算法。我们通常用这两个犹太人姓氏的缩写,将这些算法统称为 LZ 系列算法。
按照时间顺序, LZ 系列算法的发展历程大致是: Ziv 和 Lempel 于 1977 年发表题为“顺序数据压缩的一个通用算法( A Universal Algorithm for Sequential Data Compression )”的论文,论文中描述的算法被后人称为 LZ77 算法。 1978 年,二人又发表了该论文的续篇“通过可变比率编码的独立序列的压缩( Compression of Indivial Sequences via Variable Rate Coding )”,描述了后来被命名为 LZ78 的压缩算法。 1984 年, T. A. Welch 发表了名为“高性能数据压缩技术( A Technique for High Performance Data Compression )”的论文,描述了他在 Sperry 研究中心(该研究中心后来并入了 Unisys 公司)的研究成果,这是 LZ78 算法的一个变种,也就是后来非常有名的 LZW 算法。 1990 年后, T. C. Bell 等人又陆续提出了许多 LZ 系列算法的变体或改进版本。
说实话, LZ 系列算法的思路并不新鲜,其中既没有高深的理论背景,也没有复杂的数学公式,它们只是简单地延续了千百年来人们对字典的追崇和喜好,并用一种极为巧妙的方式将字典技术应用于通用数据压缩领域。通俗地说,当你用字典中的页码和行号代替文章中每个单词的时候,你实际上已经掌握了 LZ 系列算法的真谛。这种基于字典模型的思路在表面上虽然和 Shannon 、 Huffman 等人开创的统计学方法大相径庭,但在效果上一样可以逼近信息熵的极限。而且,可以从理论上证明, LZ 系列算法在本质上仍然符合信息熵的基本规律。
LZ 系列算法的优越性很快就在数据压缩领域里体现 了 出来,使用 LZ 系列算法的工具软件数量呈爆炸式增长。 UNIX 系统上最先出现了使用 LZW 算法的 compress 程序,该程序很快成为了 UNIX 世界的压缩标准。紧随其后的是 MS-DOS 环境下的 ARC 程序,以及 PKWare 、 PKARC 等仿制品。 20 世纪 80 年代,着名的压缩工具 LHarc 和 ARJ 则是 LZ77 算法的杰出代表。
今天, LZ77 、 LZ78 、 LZW 算法以及它们的各种变体几乎垄断了整个通用数据压缩领域,我们熟悉的 PKZIP 、 WinZIP 、 WinRAR 、 gzip 等压缩工具以及 ZIP 、 GIF 、 PNG 等文件格式都是 LZ 系列算法的受益者,甚至连 PGP 这样的加密文件格式也选择了 LZ 系列算法作为其数据压缩的标准。
没有谁能否认两位犹太人对数据压缩技术的贡献。我想强调的只是,在工程技术领域,片面追求理论上的完美往往只会事倍功半,如果大家能像 Ziv 和 Lempel 那样,经常换个角度来思考问题,没准儿你我就能发明一种新的算法,就能在技术方展史上扬名立万呢。 LZ 系列算法基本解决了通用数据压缩中兼顾速度与压缩效果的难题。但是,数据压缩领域里还有另一片更为广阔的天地等待着我们去探索。 Shannon 的信息论告诉我们,对信息的先验知识越多,我们就可以把信息压缩得越小。换句话说,如果压缩算法的设计目标不是任意的数据源,而是基本属性已知的特种数据,压缩的效果就会进一步提高。这提醒我们,在发展通用压缩算法之余,还必须认真研究针对各种特殊数据的专用压缩算法。比方说,在今天的数码生活中,遍布于数码相机、数码录音笔、数码随身听、数码摄像机等各种数字设备中的图像、音频、视频信息,就必须经过有效的压缩才能在硬盘上存储或是通过 USB 电缆传输。实际上,多媒体信息的压缩一直是数据压缩领域里的重要课题,其中的每一个分支都有可能主导未来的某个技术潮流,并为数码产品、通信设备和应用软件开发商带来无限的商机。
让我们先从图像数据的压缩讲起。通常所说的图像可以被分为二值图像、灰度图像、彩色图像等不同的类型。每一类图像的压缩方法也不尽相同。
传真技术的发明和广泛使用促进了二值图像压缩算法的飞速发展。 CCITT (国际电报电话咨询委员会,是国际电信联盟 ITU 下属的一个机构)针对传真类应用建立了一系列图像压缩标准,专用于压缩和传递二值图像。这些标准大致包括 20 世纪 70 年代后期的 CCITT Group 1 和 Group 2 , 1980 年的 CCITT Group 3 ,以及 1984 年的 CCITT Group 4 。为了适应不同类型的传真图像,这些标准所用的编码方法包括了一维的 MH 编码和二维的 MR 编码,其中使用了行程编码( RLE )和 Huffman 编码等技术。今天,我们在办公室或家里收发传真时,使用的大多是 CCITT Group 3 压缩标准,一些基于数字网络的传真设备和存放二值图像的 TIFF 文件则使用了 CCITT Group 4 压缩标准。 1993 年, CCITT 和 ISO (国际标准化组织)共同成立的二值图像联合专家组( Joint Bi-level Image Experts Group , JBIG )又将二值图像的压缩进一步发展为更加通用的 JBIG 标准。
实际上,对于二值图像和非连续的灰度、彩色图像而言,包括 LZ 系列算法在内的许多通用压缩算法都能获得很好的压缩效果。例如,诞生于 1987 年的 GIF 图像文件格式使用的是 LZW 压缩算法, 1995 年出现的 PNG 格式比 GIF 格式更加完善,它选择了 LZ77 算法的变体 zlib 来压缩图像数据。此外,利用前面提到过的 Huffman 编码、算术编码以及 PPM 模型,人们事实上已经构造出了许多行之有效的图像压缩算法。
但是,对于生活中更加常见的,像素值在空间上连续变化的灰度或彩色图像(比如数码照片),通用压缩算法的优势就不那么明显了。幸运的是,科学家们发现,如果在压缩这一类图像数据时允许改变一些不太重要的像素值,或者说允许损失一些精度(在压缩通用数据时,我们绝不会容忍任何精度上的损失,但在压缩和显示一幅数码照片时,如果一片树林里某些树叶的颜色稍微变深了一些,看照片的人通常是察觉不到的),我们就有可能在压缩效果上获得突破性的进展。这一思想在数据压缩领域具有革命性的地位:通过在用户的忍耐范围内损失一些精度,我们可以把图像(也包括音频和视频)压缩到原大小的十分之一、百分之一甚至千分之一,这远远超出了通用压缩算法的能力极限。也许,这和生活中常说的“退一步海阔天空”的道理有异曲同工之妙吧。
这种允许精度损失的压缩也被称为有损压缩。在图像压缩领域,着名的 JPEG 标准是有损压缩算法中的经典。 JPEG 标准由静态图像联合专家组( Joint Photographic Experts Group , JPEG )于 1986 年开始制定, 1994 年后成为国际标准。 JPEG 以离散余弦变换( DCT )为核心算法,通过调整质量系数控制图像的精度和大小。对于照片等连续变化的灰度或彩色图像, JPEG 在保证图像质量的前提下,一般可以将图像压缩到原大小的十分之一到二十分之一。如果不考虑图像质量, JPEG 甚至可以将图像压缩到“无限小”。
JPEG 标准的最新进展是 1996 年开始制定, 2001 年正式成为国际标准的 JPEG 2000 。与 JPEG 相比, JPEG 2000 作了大幅改进,其中最重要的是用离散小波变换( DWT )替代了 JPEG 标准中的离散余弦变换。在文件大小相同的情况下, JPEG 2000 压缩的图像比 JPEG 质量更高,精度损失更小。作为一个新标准, JPEG 2000 暂时还没有得到广泛的应用,不过包括数码相机制造商在内的许多企业都对其应用前景表示乐观, JPEG 2000 在图像压缩领域里大显身手的那一天应该不会特别遥远。
JPEG 标准中通过损失精度来换取压缩效果的设计思想直接影响了视频数据的压缩技术。 CCITT 于 1988 年制定了电视电话和会议电视的 H.261 建议草案。 H.261 的基本思路是使用类似 JPEG 标准的算法压缩视频流中的每一帧图像,同时采用运动补偿的帧间预测来消除视频流在时间维度上的冗余信息。在此基础上, 1993 年, ISO 通过了动态图像专家组( Moving Picture Experts Group , MPEG )提出的 MPEG-1 标准。 MPEG-1 可以对普通质量的视频数据进行有效编码。我们现在看到的大多数 VCD 影碟,就是使用 MPEG-1 标准来压缩视频数据的。
为了支持更清晰的视频图像,特别是支持数字电视等高端应用, ISO 于 1994 年提出了新的 MPEG-2 标准(相当于 CCITT 的 H.262 标准)。 MPEG-2 对图像质量作了分级处理,可以适应普通电视节目、会议电视、高清晰数字电视等不同质量的视频应用。在我们的生活中,可以提供高清晰画面的 DVD 影碟所采用的正是 MPEG-2 标准。
Internet 的发展对视频压缩提出了更高的要求。在内容交互、对象编辑、随机存取等新需求的刺激下, ISO 于 1999 年通过了 MPEG-4 标准(相当于 CCITT 的 H.263 和 H.263+ 标准)。 MPEG-4 标准拥有更高的压缩比率,支持并发数据流的编码、基于内容的交互操作、增强的时间域随机存取、容错、基于内容的尺度可变性等先进特性。 Internet 上新兴的 DivX 和 XviD 文件格式就是采用 MPEG-4 标准来压缩视频数据的,它们可以用更小的存储空间或通信带宽提供与 DVD 不相上下的高清晰视频,这使我们在 Internet 上发布或下载数字电影的梦想成为了现实。
就像视频压缩和电视产业的发展密不可分一样,音频数据的压缩技术最早也是由无线电广播、语音通信等领域里的技术人员发展起来的。这其中又以语音编码和压缩技术的研究最为活跃。自从 1939 年 H. Dudley 发明声码器以来,人们陆续发明了脉冲编码调制( PCM )、线性预测( LPC )、矢量量化( VQ )、自适应变换编码( ATC )、子带编码( SBC )等语音分析与处理技术。这些语音技术在采集语音特征,获取数字信号的同时,通常也可以起到降低信息冗余度的作用。像图像压缩领域里的 JPEG 一样,为获得更高的编码效率,大多数语音编码技术都允许一定程度的精度损失。而且,为了更好地用二进制数据存储或传送语音信号,这些语音编码技术在将语音信号转换为数字信息之后又总会用 Huffman 编码、算术编码等通用压缩算法进一步减少数据流中的冗余信息。
对于电脑和数字电器(如数码录音笔、数码随身听)中存储的普通音频信息,我们最常使用的压缩方法主要是 MPEG 系列中的音频压缩标准。例如, MPEG-1 标准提供了 Layer I 、 Layer II 和 Layer III 共三种可选的音频压缩标准, MPEG-2 又进一步引入了 AAC ( Advanced Audio Coding )音频压缩标准, MPEG-4 标准中的音频部分则同时支持合成声音编码和自然声音编码等不同类型的应用。在这许多音频压缩标准中,声名最为显赫的恐怕要数 MPEG-1 Layer III ,也就是我们常说的 MP3 音频压缩标准了。从 MP3 播放器到 MP3 手机,从硬盘上堆积如山的 MP3 文件到 Internet 上版权纠纷不断的 MP3 下载, MP3 早已超出了数据压缩技术的范畴,而成了一种时尚文化的象征了。
很显然,在多媒体信息日益成为主流信息形态的数字化时代里,数据压缩技术特别是专用于图像、音频、视频的数据压缩技术还有相当大的发展空间——毕竟,人们对信息数量和信息质量的追求是永无止境的。 从信息熵到算术编码,从犹太人到 WinRAR ,从 JPEG 到 MP3 ,数据压缩技术的发展史就像是一个写满了“创新”、“挑战”、“突破”和“变革”的羊皮卷轴。也许,我们在这里不厌其烦地罗列年代、人物、标准和文献,其目的只是要告诉大家,前人的成果只不过是后人有望超越的目标而已,谁知道在未来的几年里,还会出现几个 Shannon ,几个 Huffman 呢?
谈到未来,我们还可以补充一些与数据压缩技术的发展趋势有关的话题。
1994年, M. Burrows 和 D. J. Wheeler 共同提出了一种全新的通用数据压缩算法。这种算法的核心思想是对字符串轮转后得到的字符矩阵进行排序和变换,类似的变换算法被称为 Burrows-Wheeler 变换,简称 BWT 。与 Ziv 和 Lempel 另辟蹊径的做法如出一辙, Burrows 和 Wheeler 设计的 BWT 算法与以往所有通用压缩算法的设计思路都迥然不同。如今, BWT 算法在开放源码的压缩工具 bzip 中获得了巨大的成功, bzip 对于文本文件的压缩效果要远好于使用 LZ 系列算法的工具软件。这至少可以表明,即便在日趋成熟的通用数据压缩领域,只要能在思路和技术上不断创新,我们仍然可以找到新的突破口。
分形压缩技术是图像压缩领域近几年来的一个热点。这一技术起源于 B. Mandelbrot 于 1977 年创建的分形几何学。 M. Barnsley 在 20 世纪 80 年代后期为分形压缩奠定了理论基础。从 20 世纪 90 年代开始, A. Jacquin 等人陆续提出了许多实验性的分形压缩算法。今天,很多人相信,分形压缩是图像压缩领域里最有潜力的一种技术体系,但也有很多人对此不屑一顾。无论其前景如何,分形压缩技术的研究与发展都提示我们,在经过了几十年的高速发展之后,也许,我们需要一种新的理论,或是几种更有效的数学模型,以支撑和推动数据压缩技术继续向前跃进。
人工智能是另一个可能对数据压缩的未来产生重大影响的关键词。既然 Shannon 认为,信息能否被压缩以及能在多大程度上被压缩与信息的不确定性有直接关系,假设人工智能技术在某一天成熟起来,假设计算机可以像人一样根据已知的少量上下文猜测后续的信息,那么,将信息压缩到原大小的万分之一乃至十万分之一,恐怕就不再是天方夜谭了。
回顾历史之后,人们总喜欢畅想一下未来。但未来终究是未来,如果仅凭你我几句话就可以理清未来的技术发展趋势,那技术创新的工作岂不就索然无味了吗?依我说,未来并不重要,重要的是,赶快到 Internet 上下载几部大片,然后躺在沙发里,好好享受一下数据压缩为我们带来的无限快乐吧。

热点内容
源码种类 发布:2024-10-09 11:20:35 浏览:363
android图片xml 发布:2024-10-09 11:11:08 浏览:531
交换机基本配置与远程登录怎么做 发布:2024-10-09 11:02:06 浏览:674
服务器远程地址怎么看 发布:2024-10-09 10:43:24 浏览:140
隐身访问访客会增加吗 发布:2024-10-09 10:38:29 浏览:209
vb代码如何编译 发布:2024-10-09 10:22:59 浏览:914
sql无效的连接 发布:2024-10-09 10:19:31 浏览:70
javaif条件 发布:2024-10-09 10:01:04 浏览:958
安卓爱思助手怎么改战区 发布:2024-10-09 09:25:29 浏览:181
安卓手机用什么软件传软件到苹果 发布:2024-10-09 09:11:02 浏览:371