哈夫曼编码(哈夫曼树)

其实我个人感觉我目前用不到,但是就是想提升以下自己的水平(初赛要考,这才是重点)

先来简单介绍以下这种编码方式:

哈夫曼编码概述

哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种广泛应用的编码方式,属于可变字长编码(VLC)的一种。该编码方法由David.A.Huffman在1952年提出,其核心思想是完全依据字符出现的概率来构造异字头的平均长度最短的码字,这种编码方式有时被称为最佳编码。

哈夫曼编码的作用

数据压缩

哈夫曼编码的主要作用是进行数据压缩。在文件处理中,尤其是当文件较大且内部字符重复率较高时,哈夫曼编码能够显著减少数据的存储空间。它通过为出现频率高的字符分配较短的编码,而为出现频率低的字符分配较长的编码,从而实现数据压缩。对于字符串"BCAADDDCCACACAC",如果使用ASCII编码进行传输,每个字符需要8位二进制数,总共需要120位;而如果使用哈夫曼编码,该字符串可能仅需要28位,大大减少了传输所需的数据量。

无损数据压缩

哈夫曼编码是一种无损数据压缩方法,即解压缩后的数据与原始数据完全相同,没有任何信息丢失。这使得它在需要保持数据完整性的场合下特别有用,如文本文件、源代码文件等的压缩。

提高数据传输效率

通过减少数据的存储空间,哈夫曼编码可以提高数据传输的效率。在带宽有限或传输成本较高的场景下,如卫星通信、移动通信等,使用哈夫曼编码可以显著减少数据传输所需的时间和成本。

优化存储空间

对于需要长期存储的数据,如数据库中的大量文本信息、图书馆中的电子书籍等,使用哈夫曼编码可以显著减少所需的存储空间,降低存储成本。

直接来看一道题: 

让我们来构建以下哈夫曼树:

一、对数据进行排序

二、每次选择当前序列的最小的两个值,分别作为左子树和右子树,他们的和作为根节点建立一个二叉树

例如第一步就是 

三、将当前计算出的和放回原来的数据里面,持续上述操作直到没有待处理的数据 

最后,我们就得到了一颗二叉树:

 是有点丑哈。。。

四、对每条连接左子树和根节点的边赋值为1,对每条连接右子树和根节点的边赋值为0.因为所有子树才是原来给出的数据,最后一步就是从当前节点向上遍历到根节点,将经过的边的值记录,就得到了当前值的哈夫曼编码。

 比如,题目中询问的d对应的数据为30,从30向上遍历到根节点就能得到编码长度为2.(本蒟蒻当时还不会哈夫曼编码)

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值