Huffman

本文详细介绍了哈夫曼树的概念、构造方法及应用,包括路径长度、带权路径长度、最优二叉树的定义与特点,通过实例展示了如何构建最优二叉树并进行哈夫曼编码,以及最终得到的哈夫曼树的前缀特性与每个字符的平均编码位数。

一、概念

  树的路径长度:树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。  结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数。   结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。   树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和,通常记为:

其中:     
        n表示叶子结点的数目
        wi和li分别表示叶结点ki的权值和根到结点ki之间的路径长度。
        树的带权路径长度亦称为树的代价。
  哈夫曼树或最优二叉树:在权为wl,w2,…,wn的n个叶子所构成的所有二叉树中,带权路径长度最小(即代价最小)的二叉树称为哈夫曼树或最优二叉树。
【例】给定4个叶子结点a,b,c和d,分别带权7,5,2和4。构造如下图所示的三棵二叉树(还有许多棵),它们的带权路径长度分别为:
        (a)WPL=7*2+5*2+2*2+4*2=36
        (b)WPL=7*3+5*3+2*1+4*2=46
        (c)WPL=7*1+5*2+2*3+4*3=35
  其中(c)树的WPL最小,可以验证,它就是哈夫曼树。

注意:         ① 叶子上的权值均相同时,完全二叉树一定是最优二叉树,否则完全二叉树不一定是最优二叉树。         ② 最优二叉树中,权越大的叶子离根越近。         ③ 最优二叉树的形态不唯一,WPL最小。

二、构造最优二叉树

  哈夫曼算法经常用来解决编码方面的问题,运用这种方式的编码我们称做哈夫曼编码,它是一种变长编码,其优点是可以根据字符出现的不同频率来节省空间。假设给定8个叶子结点Z、K、F、C、U、D、L、E,分别带权2、7、24、32、37、42、42、120,我们来看看这组数的哈夫曼编码过程。

    

最终的哈夫曼树,我们加入编码后的效果如下图:
    

前缀特性:一组编码中,其他任何字符的编码都不是某个字符编码的前缀。     DEED的编码: 10100101     1011001110111101的解码: DUCK     每个字符的平均编码位数:Σ(ci*fi) / fT= 785 / 306 = 2.56536

三、哈夫曼算法

  哈夫曼首先给出了对于给定的叶子数目及其权值构造最优二叉树的方法,故称其为哈夫曼算法。其基本思想是:     (1)根据给定的n个权值wl,w2,…,wn构成n棵二叉树的森林F={T1,T2,…,Tn},其中每棵二叉树Ti中都只有一个权值为wi的根结点,其左右子树均空。     (2)在森林F中选出两棵根结点权值最小的树(当这样的树不止两棵树时,可以从中任选两棵),将这两棵树合并成一棵新树,为了保证新树仍是二叉树,需要增加一个新结点作为新树的根,并将所选的两棵树的根分别作为新根的左右孩子(谁左,谁右无关紧要),将这两个孩子的权值之和作为新树根的权值。     (3)对新的森林F重复(2),直到森林F中只剩下一棵树为止。这棵树便是哈夫曼树。 注意:     ① 初始森林中的n棵二叉树,每棵树有一个孤立的结点,它们既是根,又是叶子     ② n个叶子的哈夫曼树要经过n-1次合并,产生n-1个新结点。最终求得的哈夫曼树中共有2n-1个结点。     ③ 哈夫曼树是严格的二叉树,没有度数为1的分支结点。

  由哈夫曼树的构造思想可知,用一个数组存放原来的n个叶子结点和构造过程中临时生成的结点,数组的大小为2n-1.所以哈夫曼数中有两个成员字段:data和leafNum。

转载于:https://www.cnblogs.com/hxsyl/archive/2012/08/08/2628120.html

需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕“需求响应动态冰蓄冷系统与需求响应策略的优化研究”展开,基于Matlab代码实现,重点探讨了冰蓄冷系统在电力需求响应背景下的动态建模与优化调度策略。研究结合实际电力负荷与电价信号,构建系统能耗模型,利用优化算法对冰蓄冷系统的运行策略进行求解,旨在降低用电成本、平衡电网负荷,并提升能源利用效率。文中还提及该研究为博士论文复现,涉及系统建模、优化算法应用与仿真验证等关键技术环节,配套提供了完整的Matlab代码资源。; 适合人群:具备一定电力系统、能源管理或优化算法基础,从事科研或工程应用的研究生、高校教师及企业研发人员,尤其适合开展需求响应、综合能源系统优化等相关课题研究的人员。; 使用场景及目标:①复现博士论文中的冰蓄冷系统需求响应优化模型;②学习Matlab在能源系统建模与优化中的具体实现方法;③掌握需求响应策略的设计思路与仿真验证流程,服务于科研项目、论文写作或实际工程方案设计。; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注系统建模逻辑与优化算法的实现细节,按文档目录顺序系统学习,并尝试调整参数进行仿真对比,以深入理解不同需求响应策略的效果差异。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值