首页 > 编程语言 >《程序是怎样跑起来的》第六章读后感

《程序是怎样跑起来的》第六章读后感

时间:2024-02-16 18:12:11浏览次数:29  
标签:读后感 哈夫曼 字符 RLE 压缩 程序 算法 第六章 图像文件

文件是我们用来在磁盘等存储媒介上保存数据的一种形式,本质上就是字节数据的有序集合。比如文本文件是由一系列文字字符组成,图像文件则是由图形数据构成,虽然表现形式不同,但它们都是以连续字节的形式存储的。接下来我们来了解一下文件压缩的一些基本机制。

首先提到的是RLE(Run-Length Encoding)算法,它主要是通过记录字符及其重复次数的方式来实现压缩,例如对于字符串"aaaaaabbcddeeeeef",可以压缩表示为"a6b2c1d2e5f1"。不过,由于文本文件中相同字符连续多次出现的情况相对较少,因此RLE算法更适合于像图像文件这类经常有大量重复数据的文件类型。

其次,是哈夫曼编码(Huffman Coding)算法,这种算法的核心思想是:常用的数据用较短的编码表示,不常用的数据用较长的编码表示。构建哈夫曼树的过程包括列出所有数据及其出现频率、选择频率最低的两个节点生成新节点,并以此类推直至合并成一个根节点。从根节点到叶子节点的路径定义了每个数据的哈夫曼编码,采用0和1序列进行标识。哈夫曼算法因其高效性和普适性,在文件压缩中能够显著提高压缩比。

另外,压缩方式分为可逆压缩与非可逆压缩两种。像JPEG格式的图像文件属于非可逆压缩,解压后可能会丢失部分信息,导致还原后的图像质量有所下降;而GIF格式的图像文件则采用了可逆压缩方法,虽然在色彩数量上有一定限制,但可以完全还原至原始状态。

在阅读第六章之前,可能我们对文件压缩的具体方法并不了解,比如RLE算法,若不经介绍,面对一串连续相同的字符时,我们很难想到可以通过记录字符及其重复次数来进行压缩。书中还特别指出,由于文本文件中字符重复次数不多,使用RLE算法往往效果不佳,压缩后的数据量甚至可能大于原文件。

此外,文中还提到了莫尔斯编码以及哈夫曼算法这两种不同的压缩技术。其中,莫尔斯编码要求我们改变看待字符的方式,不再将其视为固定长度的字节,而是根据特定规则重新编码。哈夫曼算法则通过构造哈夫曼树这一数学结构来实现压缩,其工作原理类似自然界中的树,但生长顺序恰好相反,是从叶子生长出枝干并汇聚成根部。

最后,书本介绍了几种常见的图像文件格式,如未压缩的BMP格式,以及经过不同程度压缩的JPEG、TIFF、GIF等格式。在阅读此书之前,也许我们只知道GIF这一种格式,而对其它图像文件格式及其背后的数据压缩原理知之甚少。总之,通过对第六章的学习,我们对文件压缩的各种机制和方法有了更深入的理解。

标签:读后感,哈夫曼,字符,RLE,压缩,程序,算法,第六章,图像文件
From: https://www.cnblogs.com/van311/p/18017332

相关文章

  • 《程序是怎样跑起来的》第五章读后感
    内存和磁盘都是计算机中的存储部件,但它们的工作机制和特性有所不同。内存利用电流进行高速存储,但由于成本较高所以容量有限;而磁盘则是通过磁效应实现数据存储,虽然速度较慢但价格相对低廉,可提供大量存储空间。程序以存储程序方式保存在磁盘等存储设备中,并按照指令顺序被读入内存运......
  • 《程序是怎样跑起来的》第四章读后感
    在第四章中,作者详细介绍了如何熟练地使用内存这一关键的计算机组件。首先,4.1节讲述了内存的物理机制。内存实质上是一种名为内存IC的电子元件,内部包含电源、地址信号、数据信号和控制信号等多种引脚,通过这些引脚实现对内存的读写操作。内存内部有大量可存储8位数据的空间,当我们需......
  • 《程序是怎样跑起来的》第四五章知识点
    《让程序跑起来》第四五章知识点第四章:程序的内存管理内存的基本概念:介绍计算机内存的基本结构,包括RAM(随机存取存储器)的工作原理,以及内存与CPU之间的交互方式。程序的加载与执行:解释操作系统如何将程序从磁盘加载到内存中,以及CPU如何执行内存中的指令。堆与栈:介绍程序运行时的......
  • 《程序是怎样跑起来的》第六七章知识点
    第六章:程序的优化与调试性能优化:讨论如何优化程序的性能,包括减少不必要的计算、使用更高效的算法、优化数据结构等。代码调试:介绍常见的代码调试技术,如使用调试器(debugger)来跟踪程序的执行过程、设置断点、查看变量值等。错误处理与异常捕获:讲解如何编写健壮的代码,包括错误处理......
  • 程序员们有什么好的编程习惯?
    大家好,我是陶朱公Boy,一个认真生活,总想超越自己的程序员。前言知乎上有一个提问:程序员们有什么好的编程习惯?                            ↓↓↓今天,我们就这个话题一起来做个讨论。我的回答话说,每个程序员但凡有......
  • 《程序是怎么跑起来的》第5章
    本章节中,主要讲诉内存与磁盘的密切关系。首先,我们先来考虑一下这几个话题。存储程序的方式是什么?使用内存来提高访问速度的机制叫什么?将磁盘的部分模拟成内存来使用的机制叫什么?在PC中,硬盘的1个扇区大小一般为多少个字节?等等这一系列的问题。其实我以前都接触过这样的问题,以前呢,只......
  • matlab练习程序(Schur补)
    Schur补是一种矩阵分解方法,通过将一个大的矩阵分解为几个较小的矩阵来简化计算,通常能够提高矩阵求逆的速度。对于形如下面的矩阵:可以把矩阵划分为左上、右上、左下、右下四个分块矩阵。得到矩阵:根据A和D的奇异性,可以分两种情况。如果A可逆,则有:如果D可逆,则有:公式两边同......
  • Qt环境Windows应用程序动态变更系统默认打印机
    有些工作环境安装有多个打印机,针对不同需求进行各种输出。如果是用QPrinter进行打印控制,可以通过setPrinterName确定使用哪一个打印机,但如果程序使用了第三方功能进行打印输出,比如通过QAxObject调用系统的文字处理直接输出,就可能会遇到无法明确指定哪一个打印机的问题。这时就需要......
  • 《程序是怎样跑起来的》第四章——熟练使用有棱有角的内存?
    关于这一章,是目前让我最感兴趣的一章,因为说到了内存,在编程过程中我经常遇到内存这类的问题,如堆、栈溢出,如何更好的使用内存,所以对内存格外想要了解。内存的实体实际上是一种名为内存IC的电子元件,有多种类型如:RAM,ROM等等。内存IC中有电源、控制信号、地址信号、数据信号。通过地址......
  • 《程序是怎样跑起来的》第二章读后感
    在读了《程序是怎样跑起来的》第二章,我不仅对程序的运行机制有了更为清晰的认识,也对计算机科学的魅力产生了浓厚的兴趣。我对于二进制有了了解,二进制,也称为二进位制,是一种以2为基数的数制系统。1234567在二进制系统中,只使用两个基本符号:0和1。每个二进制数字也被称为一个位或二进......