首页 > 编程语言 >对于压缩原理和部分压缩方法的认识(《程序是怎样跑起来的》第6章)

对于压缩原理和部分压缩方法的认识(《程序是怎样跑起来的》第6章)

时间:2024-02-19 22:45:57浏览次数:31  
标签:编码 哈夫曼 字符 压缩 程序 算法 原理 按照

在阅读过后《程序是怎样跑起来的》第6章后,我了解了关于文件压缩的相关知识。文件压缩指的就是将文件中重复的字符用“数据×出现次数”的方式表达出来,就如书中所说的AAABBDDFFF这样10个字符用A×3+B×2+D×2+F×3=A3B2D2F3来表示,这是RLE算法的压缩方式,但是这种算法也存在一定的缺陷,当数据是文本就如书中所举的例子This is pen,那么This is pen中按照RLE算法并没有重复的字符,因此只能表示为T1h1i1s1 i1s1 p1e1n1如此的形式,按照一个半角字符就是一个字节来计算,“压缩”后甚至比压缩前大了1倍,因此RLE算法也是具有一定的局限性。当然,压缩的算法并不止这一种,还有哈夫曼算法等等多种算法,其中,哈夫曼算法并不是按照1字节=8位的方式来计算字符的,它是将出现次数最为频繁的字符设置为最低位,并且按照频率依次增加。那么这个频率是按照谁来定呢?书中举例按照莫尔斯编码来定,但却是按照全部出版物的内容来定的,并不符合每个每个文件出现的字符来排序。因此效果也并不显著。并且如果只是单单按照这种方式,AAABBCCDEF这样A=1位编码为0;B和C是2位编码为01和10;D,E,F都是3位编码分别为为001、010、100那么AC=010,E也=010,如此就出现问题了。所以哈夫曼算法就有其独特的哈夫曼编码,哈夫曼编码树按照先排序后,将每个频率相同的数据的频率相加,最后将每个频次的值加起来,左0右1,如此即可解决上述问题了。利用哈夫曼算法搭配哈夫曼编码的压缩方法有着显著的效果。
其中压缩也分为可逆与不可逆压缩,图像压缩最为显著,因此在日常大部分图像压缩的过程中因为图片格式的不同大部分是会丢失数据,这也是导致图片模糊的原因

标签:编码,哈夫曼,字符,压缩,程序,算法,原理,按照
From: https://www.cnblogs.com/xhsbk/p/18022095

相关文章

  • Go语言精进之路读书笔记第29条——使用接口作为程序水平组合的连接点
    如果说C++和Java是关于类型层次结构和类型分类的语言,那么Go则是关于组合的语言。——RobPike,Go语言之父“偏好组合,正交解耦”29.1一切皆组合在语言设计层面,Go提供了诸多正交的语法元素供后续组合使用,包括:Go语言无类型体系(typehierarchy),类型定义独立;方法和类型是正交......
  • 程序设计天梯赛个人题解 L2-047-2 锦标赛
    题目分析综合题意,将最后一场比赛视为顶层,第一轮比赛视为第一层,则有:下层每场比赛选出一个胜者,每两个下层的胜者间举行本层的一次比赛,显然这是一个二叉树。考虑还原建立每场比赛的树。由于最后一层的比赛是$2^k$个选手参加,故这是个完美二叉树,使用完全二叉树的数组储存方式,则标号......
  • 2024程序员能有什么新的出路?
    前言前两天和一个前端同学聊天,他说不准备再做前端了,准备去考公。不过难度也很大。从20152016年那会儿开始互联网行业爆发,到现在有7、8年了,当年20多岁的小伙子们,现在也都30+了大量的人面临这个问题:大龄程序员就业竞争力差,未来该如何安身立命?先说我个人的看法:除非你......
  • 《程序是怎样跑起来的》第三章读后感
    《程序是怎样跑起来的》第三章的内容是关于计算机进行小数运算时出错的原因。计算机运算出错的原因是有一些十进制的小数无法转换成二进制数。例如,十进制数0.1,就无法用二进制数正确表示,小数点后面即使有几百位也无法表示。什么是浮点数呢?很多编程语言中都提供了两种表示小数的数......
  • 《程序是怎样跑起来的》第六章的读后感
    又到了读书分享的时候,本篇分享《程序是怎样跑起来的》第六章的读后感,亲自尝试压缩数据。文件是将数据存储在磁盘等存储媒介中的一种形式。程序文件中存储数据的单位是字节。文件的大小之所以用××KB、××MB等来表示,就是因为文件是以字节(B=Byte)为单位来存储的。文件就是字节数据......
  • 《程序是怎样跑起来的》第十章读后感
    第十章主要介绍了如何运用汇编语言来解析程序的结构。在这一章中,我们了解到汇编语言与本地代码之间存在着一一对应的关系,就像数学中的角度值和三角函数值一样,通过汇编语言编写的指令可以被转换为计算机可以直接执行的本地代码。在这部分内容里,再次提及了函数调用机制,指出在汇编语......
  • 《程序是怎样跑起来的》第十一、十二章读后感
    第十一章主要展示了程序的实际应用及其功能,并探讨了计算机硬件与软件的密切关系。在这一章中,作者提到了人工智能这一热门话题,指出其发展离不开计算机的支持。通过学习本章内容,我们可以了解到计算机在现代科技中的重要地位以及如何通过编程实现对硬件设备的控制。在计算机硬件方面......
  • 《程序是怎样跑起来的》第八章读后感
    第八章深入讲解了源代码和计算机程序的编译过程,让我们对编程有了更细致的理解。所谓源代码,其实就是我们用诸如C、Java等高级编程语言编写的原始程序代码。在实际操作中,当我们按照教材编写练习题时,那些敲击键盘完成的代码就是源代码。在这一章节里,提到了源代码与源文件(包含了源代......
  • 《程序是怎样跑起来的》第九章读后感
    第九章主要阐述了程序与应用之间的关系,以及操作系统如何将两者紧密联系起来。在没有深入学习计算机知识之前,我们通常只知道手机或电脑上的各种应用程序,比如游戏、播放器等,而对“程序”这个概念理解不够清晰。实际上,“程序”是由一系列指令和数据构成的,它是实现特定功能的具体逻辑......
  • Python异步编程原理篇之IO多路复用模块selector
    selector简介selector是一个实现了IO复用模型的python包,实现了IO多路复用模型的select、poll和epoll等函数。它允许程序同时监听多个文件描述符(例如套接字),并在其中任何一个就绪时进行相应的操作。这样可以有效地管理并发I/O操作,提高程序的性能和资源利用率。本篇主要......