# 数据压缩

> CIE A-Level 计算机科学 · 9618
> 来源: https://www.owlsprep.com/zh/study/cie-9618-u1-data-compression/

本子主题讲解数字数据压缩的原因和方法，区分有损压缩和无损压缩技术。你将学习计算压缩后的文件大小，并评估不同压缩方法的适用场景。

**先修:** [二进制表示和文件大小计算](https://www.owlsprep.com/zh/study/cie-9618-u1-binary-file-sizes/)

## 学习目标

- 区分有损压缩和无损压缩及其适用场景
- 计算不同算法的压缩文件大小和压缩比
- 描述常见的无损和有损压缩方法
- 评估数据压缩的优势和权衡

## 数据压缩的目的

数据压缩减少了存储或传输数字数据所需的比特数。它通过移除冗余数据实现：即对最终用户没有额外意义的重复或不必要数据。

**数据压缩** — 通过比原始未压缩表示更少的比特对信息编码，以降低存储需求和缩短传输时间的过程。

*例:* 一张10MB的未压缩图像可压缩为2MB，用于网页展示。

> **tip**
>
> 压缩总是需要在压缩时间、解压时间，以及（对于有损压缩来说）质量之间做出权衡，以获得更小的文件体积。

**例题:** 一个5分钟的未压缩音频文件大小为50MB，在移动连接下需要10秒下载。压缩后文件大小为8MB。假设比特率恒定，压缩后的下载时间是多少？

1. 计算原始下载速度：
2. $$\text{Speed} = \frac{50 \text{ MB}}{10 \text{ s}} = 5 \text{ MB/s}$$
3. 计算压缩文件的新下载时间：
4. $$\text{Time} = \frac{8 \text{ MB}}{5 \text{ MB/s}} = 1.6 \text{ 秒}$$
5. 在本示例中，压缩将下载时间减少了84%。

> **考试提示:** 考试中经常要求你列出压缩的三个优势：更小的存储体积、更快的传输速度、更低的带宽成本。

## 无损压缩 vs 有损压缩

所有压缩方法都可分为两大类，区分依据是压缩后能否完美重建原始数据。

**无损压缩** — 可以完美重建原始未压缩数据、不丢失任何信息的压缩方式。

*例:* 用于压缩文档的ZIP文件采用无损压缩。

**有损压缩** — 永久从原始文件中移除部分数据，获得更高压缩比，但无法完美重建原始数据的压缩方式。

*例:* MP3音频文件会移除人耳听不到的频率来减小体积。

- 无损压缩通常可获得2:1到4:1的压缩比（压缩后文件是原始大小的25%-50%）。
- 有损压缩可获得10:1到100:1的压缩比（压缩后文件是原始大小的1%-10%）。
- 当任何数据丢失都会损坏文件时必须使用无损压缩：文本文档、电子表格、可执行程序等。
- 有损压缩用于微小损失不会被察觉的媒体：图像、音频、视频。

**例题:** 针对每种文件类型，说明有损压缩还是无损压缩更合适：(a) 学校作文 (b) 用于社交媒体的手机照片 (c) 考试成绩电子表格 (d) 流媒体播客

1. (a) 作文：文本的任何改动都会改变内容，因此适合使用无损压缩。
2. (b) 社交媒体照片：为了获得更小的文件，小幅质量降低是可接受的，因此适合使用有损压缩。
3. (c) 考试成绩电子表格：数据准确性至关重要，因此适合使用无损压缩。
4. (d) 流媒体播客：小幅质量损失不会被察觉，还能降低带宽成本，因此适合使用有损压缩。

> **考试提示:** 你始终需要将压缩类型的选择和完美重建的需求关联起来，为你的选择提供依据。

## 常见的无损压缩算法

CIE 9618 要求你掌握两种广泛使用的无损压缩算法：游程编码（RLE）和伦佩尔-齐夫-韦尔奇编码（LZW）。

**游程编码（RLE）** — 一种简单的无损算法，它将连续重复出现的相同值替换为单个（计数，值）对，而不是单独存储每个重复值。

**例题:** 使用RLE压缩以下16个像素值序列：00 00 00 00 00 11 11 11 11 22 22 22 33 33 33 33。将输出写为（计数，值）对，并计算压缩比。

1. 对连续相同的值分组：5 × 00，4 × 11，3 × 22，4 × 33
2. 转换为（计数，值）对：
3. $$(5, 00), (4, 11), (3, 22), (4, 33)$$
4. 原始大小：16 × 8 比特 = 128 比特。压缩后大小：8 对 × 8 比特 = 64 比特。压缩比 = 2:1。

**伦佩尔-齐夫-韦尔奇编码（LZW）** — 基于字典的无损算法，它将重复数据序列替换为更短的索引码，索引指向从输入数据构建的字典中的条目。

LZW用于GIF、TIFF和PDF等常见文件格式。它的工作方式是扫描输入，将新序列添加到字典中，然后将重复序列替换为更短的索引。

**概念自测**

测试你的理解：

1. 对于包含大面积纯色区域的图像，哪种无损算法效果最好？

   - 游程编码
   - LZW

   *答案:* 游程编码

   *解析:* RLE非常适合处理连续重复值，这类值在大面积纯色区域中大量存在。

## 常见的有损压缩方法

有损压缩方法是针对特定媒体类型设计的，它利用人类感知的局限性，移除大多数用户不会注意到的冗余数据。

**JPEG压缩** — 数字图像最常用的有损压缩方式，它将图像分为8×8的块，移除人眼不易察觉的高频细节。

**MP3压缩** — 数字音频的有损压缩方式，它利用心理声学掩蔽效应移除大多数人耳听不到的声音频率。

**例题:** 一张分辨率为1920 × 1080像素的24位彩色位图未压缩。计算未压缩文件的大小（单位MB），然后计算经过JPEG压缩（压缩比25:1）后的压缩大小。

1. 计算总像素数：
2. $$1920 \times 1080 = 2{,}073{,}600 \text{ 像素}$$
3. 计算总比特数：
4. $$2{,}073{,}600 \times 24 = 49{,}766{,}400 \text{ 比特}$$
5. 转换为兆字节：
6. $$\frac{49{,}766{,}400}{8 \times 1024 \times 1024} \approx 5.93 \text{ MB（未压缩）}$$
7. 计算压缩比为25:1时的压缩大小：
8. $$\frac{5.93}{25} \approx 0.24 \text{ MB} = 240 \text{ KB}$$

> **考试提示:** 计算文件大小时一定要检查单位转换：这是这类问题中最常见的丢分错误。

## 常见错误

- **错误做法:** 在选择适用场景时混淆有损压缩和无损压缩
  - 原因: 许多学生会混淆这两类压缩，尤其是对于在线共享的媒体文件
  - 正确做法: 永远记住：如果需要完美重建原始数据，使用无损压缩；如果可以接受质量权衡，使用有损压缩。
- **错误做法:** 计算压缩文件大小时忘记在比特和字节之间转换
  - 原因: 压缩比与单位无关，但题目几乎总是要求以字节或兆字节为单位作答
  - 正确做法: 始终检查原始大小的单位和题目要求的最终答案单位，在给出最终结果前正确转换单位。
- **错误做法:** 认为压缩后的文件大小一定比原始文件更小
  - 原因: 压缩依赖冗余；高度随机、没有重复模式的数据没有可移除的冗余
  - 正确做法: 对于随机数据，压缩后的文件可能比原始文件稍大，因为压缩算法会在输出中添加元数据。
- **错误做法:** 认为RLE只能用于位图图像
  - 原因: 学生通常只将RLE和图像压缩关联，因此他们在考试答案中错误地限制了RLE的应用范围
  - 正确做法: RLE可以应用于任何包含连续重复值的数据序列，包括文本、声音和其他数据类型。

## 速查表

| 特性 | 无损压缩 | 有损压缩 |
| --- | --- | --- |
| 是否可以完美重建原始数据 | 是 | 否 |
| 典型压缩比 | 2:1 到 4:1 | 10:1 到 100:1 |
| 常见适用场景 | 文本、电子表格、可执行程序 | 图像、音频、视频 |
| 常见算法 | RLE、LZW、ZIP | JPEG、MP3、H.264 |
| 最大文件大小减少量 | 中等 | 非常大 |

## 下一步

理解数据压缩是处理数字媒体和数据传输的基础，这是CIE 9618试卷1和实践评估的核心主题。你将在此知识基础上学习特定媒体文件格式、压缩如何影响网络传输的带宽需求，以及现代数字系统中使用的高级编码技术。掌握有损压缩和无损压缩的区别以及文件大小计算，可以帮助你在选择题和扩展回答题中轻松得分。

- [通信](https://www.owlsprep.com/zh/study/cie-9618-u2-overview/)
- [网络与拓扑](https://www.owlsprep.com/zh/study/cie-9618-u2-networks-and-topologies/)
- [协议](https://www.owlsprep.com/zh/study/cie-9618-u2-protocols/)

---

来自 [OwlsPrep](https://www.owlsprep.com) —— A-Level / IB / AP / IGCSE 免费学习指南，依据官方考纲编写。原页面：https://www.owlsprep.com/zh/study/cie-9618-u1-data-compression/
