java编码工作原理(给我手写一个哈夫曼编码)
java编码工作原理(给我手写一个哈夫曼编码)
2024-06-27 03:02:01  作者:敗鎵尐爺  网址:https://m.xinb2b.cn/know/irq308430.html

哈弗曼树往往都会根据哈夫曼编码结合着来说,因此这篇文章,主要结合着面试问题来说明。

一、基本概念

哈夫曼树的目的是找出存放一串字符所需的最少的二进制编码, 原理是通过统计出每种字符出现的频率!不断地对其合并。

举个例子:有一串字符,现在把这些字符进行统计,频率表 A:60, B:45, C:13 D:69 E:14 F:5 G:3。现在要对这些字符进行编码,但是前提是使用最少的二进制编码。这时候怎么办呢?这就用到了我们的哈弗曼树。

我们需要构造一个哈弗曼树,构造赫夫曼树的算法是一个贪心算法,贪心的地方在于:总是选取当前频率(权值)最低的两个结点来进行合并,构造新结点。

现在我们就来构造一颗哈弗曼树。

二、构造哈弗曼树

刚刚我们已经说了,构造哈夫曼树是每次选取当前频率最低的两个节点来进行合并就好了。

1、原始序列

java编码工作原理(给我手写一个哈夫曼编码)(1)

2、选取最小的F和G节点合并

java编码工作原理(给我手写一个哈夫曼编码)(2)

3、选取目前最小的C节点与8合并

java编码工作原理(给我手写一个哈夫曼编码)(3)

4、继续重复以上步骤进行合并

java编码工作原理(给我手写一个哈夫曼编码)(4)

到此为止,我们的哈弗曼树就已经构造出来了。接下来我们添加01规则,进行哈夫曼编码。

三、哈夫曼编码

哈夫曼编码的规则是,左边添加0,右边添加1。看下图就明白了。

java编码工作原理(给我手写一个哈夫曼编码)(5)

OK,也就是在每一条边上添加了01。此时我们来看每一个字符的编码。

A:10 B:01 C:0011 D:11 E:000 F:00101 G:00100

四、java实现哈夫曼编码

我们直接给出一个整体的哈夫曼编码的java实现。

第一步:定义一个节点

java编码工作原理(给我手写一个哈夫曼编码)(6)

第二步:实现哈夫曼编码

java编码工作原理(给我手写一个哈夫曼编码)(7)

java编码工作原理(给我手写一个哈夫曼编码)(8)

  • 地震带在岩石圈哪里(第九节黄土高黄河流域)
  • 2024-06-27第九节黄土高黄河流域黄河地处于地震比较薄弱带之间,即位于断陷带总体呈北北东走向的S形,属鄂尔多斯断块东缘与南缘断裂带,夹峙于鄂尔多斯断块东部吕梁山隆起与太行山断块隆起之间,面积约35522平方公里断陷带由两部分组成:山西。
  • 喝了下奶茶后发现怀孕了(半两财经孕妇喝出)
  • 2024-06-27半两财经孕妇喝出8月14日,“孕妇每天1杯奶茶喝成奶茶血”登上热搜第一据央视网消息,广西南宁一名孕妇因为几乎每天都要喝一杯奶茶,血检发现血液也变得和奶茶一个颜色了化验结果显示,她的甘油三酯严重超标,且出现了早产症状加。
  • 多吃番茄是不是能降血糖(糖友生吃或熟吃西红柿)
  • 2024-06-27糖友生吃或熟吃西红柿有的人说西红柿是水果,也有的人说西红柿是蔬菜事实上,这些都无关紧要,关键问题是哪些人能吃,哪些人不能吃?在日常生活中,并没有限制吃西红柿的人群,基本上是一个没有禁忌的存在但也有些人会担心,如糖尿病患者。
  • 节电器有用吗(节电器介绍)
  • 2024-06-27节电器介绍节电器有用,可以省电节电器利用国际先进的高压电参数优化技术、正弦波跟踪技术及纳米技术和组件,抑制和减少供电线路中的冲击电流、瞬变及高次谐波的产生,净化电源、提高高压电网的供电品质,大幅降低线路损耗及动。
  • 演员邱泽个人资料(演员邱泽个人资料介绍)
  • 2024-06-27演员邱泽个人资料介绍邱泽(RoyChiu),1981年10月14日出生于台湾省台北市,中国台湾影视男演员、流行乐歌手邱泽从国小二年级开始就加入排球队,高中时期担任了副队长及队长,曾当选台湾代表队选手,是台湾代表队储备球员。
  • 性价比最高的新款神舟笔记本电脑(神舟桌面级处理器)
  • 2024-06-27神舟桌面级处理器最近笔记本市场因为各种网课以及移动办公学习需求增加而变得火热,当中游戏笔记本更因为性能强悍成为一些无需频繁搬动PC用户的首选只不过,提起游戏本大家第一时间就会与高价格联想,低预算消费者又该如何取得平衡。
  • 王者荣耀近日发布(王者荣耀综艺战至巅峰迎来首播)
  • 2024-06-27王者荣耀综艺战至巅峰迎来首播2022年6月11日,首档王者荣耀电竞综艺《战至巅峰》今日12点在腾讯视频正式首播节目由30位来自不同领域的电竞新人组成不同战队,深入顶级电竞俱乐部,在竞技体育项目的钢铁秩序下参与实训锤炼、赛事比拼,。
  • 表达爱的唯美句子(时光不老我们不散)
  • 2024-06-27时光不老我们不散不恋浮世繁华,不叹红尘荒凉,不畏流年易伤,不惧岁月苍茫,不惹情思不落哀怨,闲看花开,静待花落,冷暖自知,干净如始纪伯伦:一个人有两个我,一个在黑暗中醒着,一个在光明中睡着时光会老,往事会凉,浮生梦幻,。
  • 刮地筋的正确方法(怎样做刮地筋)
  • 2024-06-27怎样做刮地筋早晚揉刮地筋,坐着把左脚放到右腿上,用同侧手指拉着左脚大拇指向后板,用右手食指揉按脚心,有一根能摸到的筋,就是地筋找到之后,用食指反复按摩这条硬筋,把它揉软,会有神奇的功效如果每天早上起床前揉200下。
  • steam正当防卫3注册(正当防卫3Steam跳楼甩卖)
  • 2024-06-27正当防卫3Steam跳楼甩卖以超大游戏地图和爽快“炸炸炸”著名的「正当防卫3」目前正在Stem上促销,游戏迎来了1.5折的跳楼优惠价,原价160元现价仅24元,非常适合“喜1”,喜欢这种风格游戏的朋友就更不能错过了不过需要提醒的。