SSLOJ1407 【树】哈夫曼树(一)_题目二树的操作 2、假设用于通讯的电文仅有7个字母组成,字母在电文中出现的频-程序员宅基地

Description

假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为7、19、2、6、32、3、21、10。试为这8个字母设计哈夫曼编码。如果用二进制数表示这8个字母的编码方案.(请按照左子树根节点的权小于等于右子树根节点的权的次序构造)

Input

第一行为字母的个数n;
第二行至第n+1行分别为各个字母在电文中出现的频率;

Output

按照中序遍历输出各个编码

Sample Input

8
7
19
2
6
32
3
21
10

Sample Output

19:00
21:01
2:10000
3:10001
6:1001
7:1010
10:1011
32:11

思路

哈夫曼编码板子题,首先我们要了解什么是哈夫曼编码。
主要应用在无损压缩方面,是一种通过特殊编码方式而在保证信息不会被错误翻译的情况下,靠频率来加快翻译速度的方法。
其要求为不能错误翻译且WPL(频率*二进制码长度之和)最小。


什么是不能错误翻译呢?举个例子:
A=01,B=010,C=101,D=10,E=0
010101001,你怎么翻?
AAAEA?EDDDA?ECBA?
显然是不行的,所以要更换编码。

A=001,B=10,C=010,D=111,E=101
同样是010101001,这时只能翻成CBA


为了保证二进制编码程度最短,我们需要用某种方法来构造哈夫曼编码。
哈夫曼编码对于哈夫曼树来说就是从根节点到某个节点的边集(向左走便是0,右边便是1)如A=001即从根节点去第一层左节点,再去第二层最左节点,然后去其在第三层的右儿子。


|那么我们还需要了解一下哈夫曼树。(烂番茄不要丢过来)

给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
——某 度 百 科

构造方法?见代码吧(臭鸡蛋可以丢过来了


code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue> 
using namespace std;
struct f{
    
	int v,l,r;
} a[1000001];
int tot;
int x[10001];
int n;
string s;
void dfs(int x,int dep)
{
    
	if (a[x].l==0&&a[x].r==0)
	{
    
		cout<<a[x].v<<':';
		for (int i=0;i<dep;i++) cout<<s[i];
		cout<<endl;
		return;
	}
	if (a[x].l!=0)
	{
    
		s[dep]='0';
		dfs(a[x].l,dep+1);
	}
	if (a[x].r!=0)
	{
    
		s[dep]='1';
		dfs(a[x].r,dep+1);
	}
	return;
}
bool cmp(int c,int b)
{
    
	return a[c].v>a[b].v;
}
int main()
{
    
	cin>>n;
	for (int i=1;i<=n;i++)
	{
    
		cin>>a[i].v;
		x[i]=i;
	}
	sort(x+1,x+1+n,cmp);
	for (int i=n;i>1;i--)
	{
    
		int xx=n+n-i+1;
		a[xx].v=a[x[i]].v+a[x[i-1]].v;
		a[xx].l=x[i];
		a[xx].r=x[i-1];
		int j;
		for (j=i-1;j>0&&a[xx].v>a[x[j]].v;j--) x[j+1]=x[j];
		x[j+1]=xx;
	}
	dfs(n+n-1,0);
    return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_49843717/article/details/114989401

智能推荐

Tensorflow2 二次训练和断点续训_tensorlfow使得下次训练从断开的epoch地方开始继续训练-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏12次。EnvironmentTensorflow2.0.0 python3.6问题描述每轮训练中以特定方式(固定频率、最高准确率或最低loss等)存储模型,停止训练后,基于已存储的模型进行二次训练。以特定方式保存模型callbacks = [ tf.keras.callbacks.ModelCheckpoint(filepath=save_args['./saved_models/model_epoch{epoch}.h5'], _tensorlfow使得下次训练从断开的epoch地方开始继续训练

tensorflow GPU安装及测试_测试tensorflowgpu csdn-程序员宅基地

文章浏览阅读1.8w次。# 一、TensorFLow-Gpu环境的搭建## 查看nvidia的型号以便安装相应的驱动lspci | grep -i nvidia#这一步非常的重要,一定要看清楚自己的驱动型号,以便能够找到正确的cuda和cudnn的型号 ## 禁用nouveau#在安装cuda的时候,由于涉及到NVIDIA驱动的安装,使得nouveau驱动与NVIDIA驱动冲突,为了能够继续安装,必须禁..._测试tensorflowgpu csdn

【Web API系列教程】2.1 — ASP.NET Web API中的路由机制_apicontroller 路由定义-程序员宅基地

文章浏览阅读5.5k次,点赞2次,收藏7次。这篇文章描述了ASP.NET Web API如何将HTTP请求发送(路由)到控制器。备注:如果你对ASP.NET MVC很熟悉,你会发现Web API路由和MVC路由非常相似。主要区别是Web API使用HTTP方法来选择动作(action),而不是URI路径。你也可以在Web API中使用MVC风格的路由。这篇文章不需要ASP.NET MVC的任何知识。路由表在ASP.NET Web API中,控_apicontroller 路由定义

Qslider样式_qslider 样式-程序员宅基地

文章浏览阅读1.3k次。QSlider::groove:horizontal {border: 1px solid #bbb;background: white;height: 10px;border-radius: 4px;}QSlider::sub-page:horizontal {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop:..._qslider 样式

TensorFlow2.0 学习笔记(五):循环神经网络(RNN)_tensorflow2.0 rnn-程序员宅基地

文章浏览阅读4.5k次,点赞9次,收藏50次。专栏——TensorFlow学习笔记文章目录专栏——TensorFlow学习笔记一、什么是RNN二、文本生成1_读取文本2_模型实现3_超参数4_模型训练5_模型预测6_完整代码推荐阅读参考文章一、什么是RNN循环神经网络(Recurrent Neural Network, RNN) 是一种适宜于处理 序列数据 的神经网络,被广泛用于语言模型、文本生成、机器翻译等。基础知识可以看一下这个英文..._tensorflow2.0 rnn

C语言 三向字符串快速排序_三个字符串排序c语言-程序员宅基地

文章浏览阅读692次。三向字符串快速排序 在将字符串数组排序时,根据首字母进行三向切分,然后(递归地)将得到的三个子数组排序:一个含有所有首字母小于切分字符的字符串子数组,一个含有所有首字母等于切分字符的字符串的子数组(排序时忽略它们的首字母),一个含有所有首字母大于切分字符的字符串的子数组。代码实现#include &amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;am_三个字符串排序c语言

随便推点

文本-----wangEditor的使用,设置和获取内容,展示HTML无样式怎么办????console同步展示怎样写,Vue的配置在Vue3配置文件中的配置,是editor中的v-model绑定的值_wangeditor sethtml-程序员宅基地

文章浏览阅读405次,点赞8次,收藏5次。【代码】文本-----wangEditor的使用,设置和获取内容,展示HTML无样式怎么办????console同步展示怎样写,在onChange事件中配置,编辑器配置,Vue的配置在Vue3配置文件中的配置。_wangeditor sethtml

京东科技全链路故障诊断智能运维实践-程序员宅基地

文章浏览阅读161次。本文根据张静老师在〖2023 中国数据智能管理峰会-上海站〗现场演讲内容整理而成。讲师介绍张静,京东科技智能运维算法高级经理。硕士毕业于东北大学,持续深耕智能运维领域多年,带领团队致力于京东智能运维算法迭代,把智能算法能力落地京东线上横向业务场景,算法在监控、数据库、网络、资源调度等多个纵向场景取得突破,提升了产品和运维的技术竞争力。善于将实践中沉淀的技术与日常算法工作中积累的技术与创新总结成专利..._京东 全链路跟踪

kernel 2.6.34 配置文件 (thinkpad sl400)_kernel_version or cpu_arch: ' 5.15 x86_64 ' not me-程序员宅基地

文章浏览阅读3.7k次。## Automatically generated make config: don't edit# Linux kernel version: 2.6.34-gentoo# Wed Jun 2 21:12:35 2010#CONFIG_64BIT=y# CONFIG_X86_32 is not setCONFIG_X86_64=yCONFIG_X86=y

LaTex的Beamer中的数学公式与论文中的数学公式不一样的解决办法_latex beamer 公式-程序员宅基地

文章浏览阅读2.2k次。同样的 latex 数学公式,在论文 (Article)模板中显示格式与在幻灯片( Beamer) 中的显示风格是不一样的,Beamer中的数学公式是如此丑陋不堪。\begin{equation}\mathcal{L}_{D}=\mathbb{E}_{x\sim P_{data}}[-\log D(x)]+\mathbb{E}_{z\sim P_{z}}[-\log (1-D(G(z)))]\label{equ-1}\end{equation}论文中的公式为:Beamer中的公式为:风格_latex beamer 公式

sap事务代码如何收藏_SAP GUI里的收藏夹事务码管理工具-程序员宅基地

文章浏览阅读254次。本文是2020年第13篇原创文章,也是汪子熙公众号总共第196篇原创文章。今天是2020年1月20日,农历大年二十六,年味渐浓。Jerry的老家,从成都乘坐高铁只要十五分钟就能到达,所以从来不会遭受春运长途跋涉之苦。这里我提前祝愿广大SAP从业者在除夕之前,都能够平安顺利到家,和自己的亲人团聚。最近Jerry的业余时间,忙着分析成都市成华,青羊,武侯,金牛,高新,龙泉驿,锦江这七个区的小学二年级语..._sap如何收藏指令

基于MATLAB的图像识别-程序员宅基地

文章浏览阅读1.1k次,点赞3次,收藏8次。接下来,我们将图像尺寸调整为模型所需的输入尺寸,并加载预训练的模型。MATLAB提供了多种强大的机器学习和深度学习工具箱,其中包含了许多经典的图像识别算法和预训练模型。MATLAB是一种功能强大的计算机软件,具备丰富的图像处理和分析工具,因此非常适用于图像识别任务。通过适当的预处理和选择合适的识别算法,我们可以实现准确和高效的图像识别应用。通过加载图像数据、预处理图像、选择适当的识别算法和模型,我们可以实现准确和高效的图像识别应用。读取图像后,我们可以对其进行预处理,以提高识别的准确性。_基于matlab的图像识别