• 哈夫曼树和哈夫曼编码


    2.6哈夫曼树和哈夫曼编码

    2.6.1什么是哈夫曼树(Huffman Tree)?

    带权路径长度(WPL):设有二叉树有n个叶子结点,每个叶子结点带有权值wk,从根结点到每个结点的长度为lk,则每个叶子结点的带权路径长度之和就是WPL,WPL=$sum _{n=1}^n w_k l_k$

    最优二叉树/哈夫曼树:WPL最小的二叉树。

    2.6.2哈夫曼树的构造

    每次把权值最小的两棵二叉树合并(如何选取权值最小的树?利用最小堆!

     1 //构造哈夫曼树
     2 HuffmanTree Huffman(MinHeap H) {
     3     HuffmanTree T;
     4     BuildMinHeap(H);//调整成最小堆
     5     //做S->Size-1次合并
     6     for (int i = 1; i < H->Size; i++) {
     7         T = CreateHuff();
     8         T->left = DeleteHeap(H);
     9         T->right = DeleteHeap(H);
    10         T->weight = T->left->weight + T->right->weight;
    11         InsertHeap(H, T);
    12     }
    13     T = DeleteHeap(H);//最小堆的树根
    14     return T;
    15 }

    时间复杂度为O(NlogN)

    2.6.3哈夫曼树的特点

    • 没有度为 1 的结点
    • n 个叶结点的哈夫曼树共有 2n-1 个结点(因为n2=n0-1,又n1=0,故n=2*n0-1)
    • 哈夫曼树的任意非叶结点的左右子树交换后仍是哈夫曼树
    • 对同一组权值,可能存在不同构的多棵哈夫曼树,但是得到的最优的WPL是一样的

    2.6.4哈夫曼编码

    怎么进行不等长编码?如何避免二义性

    前缀码(prefix code):任何字符的编码都不是另一个字符编码的前缀

    • 左右分支分别代表0、1
    • 字符只出现在叶结点上

    a:4 x:1 u:2 z:1

  • 相关阅读:
    Asp.Net Web API 2第八课——Web API 2中的属性路由
    Asp.Net Web API 2第七课——Web API异常处理
    Asp.Net Web API 2第六课——Web API路由和动作选择
    Asp.Net Web API 2第五课——Web API路由
    开始学习python
    BMI 小程序 购物车
    深浅copy 文件操作
    字典 dict 集合set
    基本数据类型 (str,int,bool,tuple,)
    python 运算符
  • 原文地址:https://www.cnblogs.com/PennyXia/p/12637682.html
Copyright © 2020-2023  润新知