Java数据结构——什么是赫夫曼编码

1. Huffman编码

1.1 赫夫曼(Huffman)树

1.1.1 定义

  • 又叫最优二叉树:是一种带权路径最小的树。
  • 路径长度:例如:根节点到左孩子就是一个路径长度。
  • 树的路径长度:从树根到每一个节点的路径长度之和。
  • 树的带权路径长度:树中所有叶子节点的带权路径之和,记作WPL。
  • WPL最小:当WPL最小时的二叉树,称为最优二叉树赫夫曼树

1.1.2 什么是WPL


在这里插入图片描述


1.2 前缀编码

  • 若要设计长短不等的编码,则必须是任意一个字符的编码都不是另一个字符的编码的前缀,这种编码称为前缀编码
  • 图例

在这里插入图片描述


1.3 赫夫曼编码

1.3.1 定义

  • 赫夫曼树,得到的前缀编码,就是赫夫曼编码。
  • 赫夫曼树没有度为1的节点。
  • n个叶子节点,一定有2*n-1个节点。
  • 赫夫曼编码:从叶子节点出发,走一条从叶子到根的路径。
  • 解码(译码):从根出发,走一条从根到叶子的路径。
  • 设计时应该用,三叉链表。

1.3.2 Huffman 算法

给定 w1, w2, … , wi
(1)作 t 片树叶,分别以 w1, w2, … , wi 作为权。
(2)在所有入度为0的顶点(不一点是树叶)中选取两个权最小的顶点,添加一个新分支,它以这2个顶点为儿子,其权等于这两个儿子的权之和。
(3)重复(2),直到只有1个入度为0的顶点为止。
WPL等于所有分支点的权之和。

2. C语言文件读写

  • 打开方式:{r , w, a}, {t , b},{+}

  • r : 只读,文件必须存在

  • w:只写,清空源文件,不存在就新创

  • a: 追加,在源文件后面追加,不存在就新创

  • t: 文本文件

  • b:二进制文件

  • +: w+r 允许读和写

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜满月

鼓励,鼓励,更加努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值