Huffman编码


本文主要介绍Huffman树与Huffman编码。

Huffman树

Huffman 树构造算法如下

(1)将 { w 1 , w 2 , … , w n } \{w_1,w_2,\ldots, w_n\} {w1,w2,,wn}看成是有n棵树的森林(每棵树仅有一个结点)。

(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和。

(3)从森林中删除选取的两棵树,并将新树加入森林, .

(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求的Hufman树:

举例说明Huffman树的构建过程:

假设2014 年世界杯期间,从新浪微博中抓取了若干条与足球相关的微博,经统计,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词出现的次数分别为15, 8, 6, 5,3, 1. 请以这6个词为叶子结点,以相应词频当权值,构造一稞Huffmnan树.具体过程如下:

在这里插入图片描述

从这个过程知词频越大的词离根节点越近。并且约定将词频大的节点作为左孩子节点。

Huffman编码

为了使不等长编码为前缀编码(即要求个字符的编码不能是另一个字符编码的前缀),可用字符集中的每个字符作为叶子结点生成一棵编码二叉树,为了获得传送报文的最短长度,可将每个字符的出现频率作为字符结点的权值赋予该结点上,显然字使用频率越小权值越小,权值越小叶子就越靠下,于是频率小编码长,频率高编码短,这样就保证了此树的最小带权路径长度,效果上就是传送报文的最短长度。因此,求传送报文的最短长度问题转化为求由字符集中的所有字符作为叶子结点,由字符出现频率作为其权值所产生的Hufman树的问题,利用Huffman树设计的二进制前缀编码,称为Hffiman 编码,它既能满足前缀编码的条件,又能保证报文编码总长最短。

word2vec 工具中也将用到Huffman编码,它把训练语料中的词当成叶子结点,其在语料中出现的次数当作权值,通过构造相应的Huffman 树来对每一个词进行Hufman编码。

如下图所示:

在这里插入图片描述

​ “我”、 “喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词的Huffmnan 编码分别为0, 111, 110, 101, 1001和1000。

参考文章
word2vec中的数学原理理解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值