• 新手必知!----哈夫曼树和哈夫曼编码


    今天我们要一起来探讨一下哈夫曼树和哈夫曼编码

    (第一次写文章,我已经尽力了)

    望大佬可以多多给出建议,我会努力改进

    哈夫曼树的定义和构造

    首先,我们来谈谈哈夫曼树的定义

    看完下述定义食不食觉得很脑抽

    哈夫曼树,也被称为最优二叉树,是一种用于数据压缩的树形结构。在这个树中,每个叶子节点都对应着一个待压缩的字符,而内部节点则是字符出现频率的权值。

    但是!看完以下内容后,你就会觉得上述定义更脑抽了

    一:建立哈夫曼树

    有一天,有一群动物要合作建立一个哈夫曼树来压缩它们的声音(不要问为什么)。每个动物都有一个代表它们声音的频率:猫咪的"喵喵"频率最高,狗狗的"汪汪"次之,小鸟的"叽叽"最低。

    首先,动物们将频率写在小纸条上(不要问!问就是大自然的力量),然后放在桌上,按照频率从低到高排序。这些小纸条就像哈夫曼树的叶子节点。

     
     
    1. int ji = 2; // 叽叽的频率
    2. int wang = 5; // 汪汪的频率
    3. int miao = 10; // 喵喵的频率

    现在,让我们开始构建哈夫曼树吧!首先,选取频率最低的两个动物,也就是小鸟和狗狗。

    1. int xiaoniao = ji; // "叽叽"变量名:ji
    2. int gou = wang; // "汪汪"变量名:wang
    注意事项:构建哈夫曼树时,要始终选择频率最低的两个节点来合并。

    接下来,我们将合并这两个节点,创建一个新的内部节点,频率为它们的和。

    int xiaoniao_gou = xiaoniao + gou; // 合并后的节点

    再把这个合并后的节点加入到频率表中,然后重新排序。

    1. int miao = 10; // 喵喵的频率
    2. int xiaoniao_gou = xiaoniao + gou; // 合并后的节点

    接下来,继续选择频率最低的两个节点,合并,加入表中,重复这个过程,直到只剩下一个节点为止。

    int huffman_tree = miao + xiaoniao_gou; // 最终的哈夫曼树

    至此,我们成功构建了一个哈夫曼树,用来表示动物们的声音频率。

    (这个例子食不食肥肠的智慧,但是足够的简单易懂)

    下一步,我们将学习如何使用哈夫曼编码来压缩声音数据。

    哈夫曼编码

    哈夫曼编码是一种将字符映射到二进制编码的方法,确保频率较高的字符具有较短的编码,频率较低的字符具有较长的编码。这使得我们可以用较少的比特来表示常见字符,从而实现数据压缩。

    二:哈夫曼编码

    现在,动物们有了一个漂亮的哈夫曼树,接下来他们想要为每个动物的声音分配独特的编码。编码规则是,从根节点出发,沿着左分支走表示0,沿着右分支走表示1

    让我们看看如何为小鸟的"叽叽"声分配哈夫曼编码:

    1. int huffman_tree = miao + xiaoniao_gou; // 最终的哈夫曼树
    2. // 为小鸟的声音分配哈夫曼编码
    3. string xiaoniao_code = "00"; // 从根节点出发,沿着左分支走,编码为0,然后再向左走一次
    4. //同样的方式,我们可以为其他动物分配哈夫曼编码,例如猫咪的"喵喵"声。
    1. // 为猫咪的声音分配哈夫曼编码
    2. string miao_code = "1";
    3. // 从根节点出发,沿着右分支走,编码为1

    如下图:

           

    现在,动物们都有了自己的哈夫曼编码,他们可以用这些编码来压缩自己的声音数据了。

    结语

    今天我们一起学习了哈夫曼树的构造过程和哈夫曼编码的原理。记住,哈夫曼树是一种用于数据压缩的最优树形结构,而哈夫曼编码则是将字符映射到二进制编码的方法。希望我能帮助你们更好地理解这两个概念,学到这里我觉得这已经够用了~~

  • 相关阅读:
    记一次使用动态引入vue组件的经历
    原型的概念
    MySQL高级七:MySQL服务器的逻辑框架
    数控机床传动装置机械及PLC电气控制系统设计
    微信小程序开发11 数据预取:合理缓存提高用户体验
    树莓派4B开发之五安装yoloV5
    【PAT甲级 - C++题解】1072 Gas Station
    hdfs的一个运维小技巧
    【C++风云录】梦幻般的机器人世界:探索ROS、PCL、OpenCV和更多顶尖技术
    学习大数据可以进入哪些公司?
  • 原文地址:https://blog.csdn.net/zyxqwertyuiop/article/details/132645747