哈夫曼树

哈夫曼树及哈夫曼树编码译码详解 使用链表形式,实现哈夫曼树的构建及编码译码 阅读详情
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
#define MAXINT 0x7fffffff
typedef struct treenode {
int left;
int right;
int parent;
int code;
int num;
};
treenode treenodes[60] = {0,0,0,0,0};
void dealWithInput(string str,int* w,int &count)
{
int i = 0;
int size = str.size();
for (i = 0; i < size; i++)
{
int k = 0;
if(str[i]>='A'&&str[i]<='Z')
{ 
  k = str[i] - 'A';
  if (w[k] == 0)
  count++;
  w[k]++;
}
else {
if (w[26] == 0)
count++;
w[26]++;
}
}
}
void huffman(int* w, int count)
{
int weight[29] = { 0 };
int i = 0,j=0;
int k = 1;
for (i = 0; i <=26; i++)
{
if (w[i] != 0)
{
weight[k++] = w[i];
}
}
for (i = 1; i <= 2 * count - 1; i++)
{

treenodes[i].left = 0;
treenodes[i].right = 0;
treenodes[i].parent = 0;
treenodes[i].code = 0;
if (i <= count)
treenodes[i].num = weight[i];
else {
treenodes[i].num = 0;
}

}
int m1, m2, x1, x2;
for (i = 1; i < count; i++)
{
m1 = MAXINT;
m2 = MAXINT;
x1 = -1;
x2 = -1;
for (j = 1; j < count + i;j++)
{
if (treenodes[j].num < m1&&treenodes[j].parent == 0)
{
m2 = m1;
x2 = x1;
m1 = treenodes[j].num;
x1 = j;
}
else if (treenodes[j].num < m2&&treenodes[j].parent == 0)
{
m2 = treenodes[j].num;
x2 = j;
}
}
treenodes[x1].parent = count + i;
treenodes[x2].parent = count + i;
treenodes[count + i].num = treenodes[x1].num + treenodes[x2].num;
treenodes[count + i].left = x1;
treenodes[count + i].right = x2;
}
int re = 0;
int ori = 0;
for (i = 1; i <= count; i++)
{
int p = treenodes[i].parent;
int temp = 0;
while (p != 0)
{
temp++;
p = treenodes[p].parent;
}
if (temp == 0)
temp = 1;
treenodes[i].code = temp;
re += (treenodes[i].num*temp);
ori += 8 * treenodes[i].num;
}
cout << ori << " " << re << " " <<setiosflags(ios::fixed)<<setprecision(1)<< ((ori*1.0) / re) << endl;




}




int main()
{
//freopen("in.txt", "r", stdin);
string input;
while (cin >> input)
{
if (input.compare("END")==0)
{
break;
}
int w[27] = { 0 };
int count = 0;
dealWithInput(input, w, count);
huffman(w, count);
}
return 0;
}
树 —— 哈夫曼树和哈夫曼编码 基本概念 哈夫曼树又叫最优二叉树,它是由 n 个带权叶子结点构成的所有二叉树中带权路径长度 WPL 最短的二叉树。 路径:指从一个结点到另一个结点之间的分支序列。 路径长度:指从一个结点到另一个结点所经过的分支数目。 树的路径长度:树中所有叶子结点的路径长度之和。 权:给树的每个结点赋予一个具有某种实际意义的实数,我们称该实数为这个结点的权。 带权路径长度:在树形结构中,我们把... 阅读详情

相关推荐

10X Genomics单细胞数据分析实战:从FASTQ到UMAP可视化的完整流程

本文详细介绍了10X Genomics单细胞数据分析的完整流程,从FASTQ原始数据处理到UMAP可视化。通过Seurat工具包实现数据质量控制、标准化、降维聚类和细胞注释,特别适合生物信息学新手学习。文章包含可复现的代码示例和常见问题解决方案,帮助研究者快速掌握单细胞测序数据分析的核心技术。

weixin_30952535的博客 535

用表达式来表示int 和 unsigned int 所能表示的最大值

1. #define MAXUNSIGNEDINT 0xffffffff   #define MAXINT 0x7fffffff2. #define MAXINT (unsigned int)-1>>1    #define MAXUINT (unsigned int)-1    #define MININT MAXINT+1    #define MINUINT MAXUINT+1原来面试官每个问题的背后都有其深刻的含义,尤其是那些表面看上去很简单,其实背后隐藏着很强大的东西,我才明白过来。 基础很重要,

忽然之间 2929

从零到一:手把手教你用Python+LangChain搭建企业级RAG知识库(附避坑指南)

本文为开发者提供了一份详尽的实战指南,手把手教你使用Python和LangChain框架从零构建企业级RAG知识库。内容涵盖环境搭建、文档处理、向量化检索、提示工程及生产部署等核心环节,并重点分享了文档分割、检索优化等关键避坑经验,旨在帮助读者打造稳定、高效且易于维护的智能知识中枢。

weixin_29058331的博客 398

九度OJ 题目1008:最短路径问题

一题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。 输入: 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点t。n和m为0时输入结束。 (1 输出: 输出

lhyer的专栏 1040

思科模拟器汉化教程(附带中文汉化包)

思科模拟器是一种模拟Cisco网络设备的软件工具。它可以模拟Cisco网络设备的所有功能,包括路由器、交换机、防火墙等,并提供了一个可视化的用户界面,让用户可以通过图形化的方式来管理网络设备。思科模拟器因其便捷、易用的特点被广泛应用于网络工程师的实验、测试和培训等方面思科模拟器的功能是强大的,但当我们在使用思科模拟器的时候就会有一些烦恼,由于思科是全球最大的企业级网络设备供应商之一。思科公司的产品和服务被广泛应用于各种领域和行业,所以思科模拟器默认是全英文的,但是在最新版本中是支持中文的。

2302_76908369的博客 4万+

OpenCV图像拼接实战:用SIFT+透视变换打造无缝全景图(附完整代码)

本文详细介绍了使用OpenCV和SIFT算法实现图像拼接的全过程,包括特征匹配、透视变换和高级融合技术。通过实战代码演示,帮助开发者掌握无缝全景图生成的核心技术,适用于旅行摄影、无人机航拍等多种场景。

eee77的博客 998

[临时]单源最短路径(Dijkstra算法)

  因为没有原创内容,相当于看书笔记,因此本打算发在QQZone,但因为QQ空间日志忽然服务器繁忙,大骂腾讯无奈还是把此日志临时发布在自己的博客上。  参考资料:《计算机算法设计与分析》(第三版)。  条件:  (1)带权有向图 G = (V, E); 任意边的权 &gt;= 0;  算法:  贪心法。体现在从源节点开始,每次从集合S外“选一个最近的节点”添加到S中,然后对dist数组做更新。  ...

weixin_34245749的博客 137

Foxglove Studio实战:5步搞定自动驾驶数据可视化(附避坑指南)

本文详细介绍了如何使用Foxglove Studio高效搭建自动驾驶数据可视化工作流。通过五个核心步骤:环境准备、数据导入、面板搭建、交互分析与自动化集成,帮助开发者快速掌握这一专为机器人系统设计的开源平台。文章重点解析了其与ROS/ROS 2、MCAP等数据源的无缝对接,以及3D点云、多传感器融合、团队标注等核心功能,并附有实用的性能优化与避坑指南,旨在提升算法调试与团队协作效率。

d3e4f的博客 336

c++ string int转化 #define INTMAX 0x7fffffff

https://www.cnblogs.com/gaobw/p/7070622.html #define INTMAX 0x7fffffff

有关我的科研的足迹、算法竞赛的日子、生活记录。 1166

上位机 寻边器 通讯实战

寻边器通讯接口实现 本文介绍了上位机与盖泽(Gazer)和JEL品牌寻边器的通讯接口实现方案。主要内容包括: 接口定义:创建了IAlignerOperation接口,定义了获取状态、控制运动、真空吸附等核心功能。 具体实现: 盖泽寻边器(GazerAlignerCjh):通过串口通讯,实现了回零、校准、移动位置等操作 JEL寻边器(JelAligner):同样基于串口通讯,包含错误处理、状态查询等功能 工厂模式:通过AlignerFactory工厂类根据设备品牌创建对应的实现对象。 设备加载:展示了如何在系

StevenChen的博客 377

手把手教你学PCIE-- 热插拔电路设计与实现方案

PCIe热插拔(Hot-Plug)技术允许用户在系统运行时安全地插入或移除设备,而无需重启系统。本文将深入讲解热插拔电路的设计要点、关键器件选型及信号协议规范,涵盖机械结构、电气保护和电源管理三大核心模块。​。

MHD0815的博客 440

maxint

在python2,maxint为2的63次方 import sys print(sys.maxint) 在python3,int没有最大值限制 The sys.maxint constant was removed

zhzh5275的博客 942

无人机视角下基于YOLOv5/v8/v10的车辆检测系统:从算法原理到UI界面实战

随着无人机技术的普及和智慧城市的发展,无人机视角下的车辆检测在交通监控、战场侦察、灾害救援等领域展现出巨大的应用价值。然而,无人机航拍图像存在目标尺度小、视角多变、背景复杂等挑战。本文深入探讨了如何利用YOLOv5、YOLOv8、YOLOv10三个代表性目标检测算法,构建一套完整的无人机车辆检测系统。文章不仅详细解析了各版本YOLO的核心技术演进,还提供了从数据集准备、模型训练、性能评估到基于PyQt5/PySide6的图形界面开发的完整代码实现。通过本文,读者将能够掌握构建无人机实时车辆检测系统的全流程技

YOLO 172

哈夫曼树和哈夫曼编码

本文主要是用C语言实现数据结构之哈夫曼树,同时对应哈夫曼编码。

墨城烟柳ベ旧人殇的博客 5016

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【树】哈夫曼树及其构造

1.哈夫曼树的基本概念 结点间的路径和路径长度 路径是指从一个结点到另一个结点之间的分支序列 路径长度是指从一个结点到另一个结点所经过的分支数目。 结点的权和带权路径长度 在实际的应用中,人们==给树的每个结点赋予一个具有某种实际意义的实数,称该实数为这个结点的权。==在树型结构中,把从树根到某一结点的路径长度与该结点的权 的乘积,叫做该结点的带权路径长度。  树的带权路径长度 树的带权路径...

weixin_45765128的博客 4万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【哈夫曼树】创建哈夫曼树

在一棵树中,从一个结点到另外一个结点所经过得所有的结点,我们成为两个结点之间得路径。从A到叶子结点E的路径就是:A->B->D->E;在一棵树中,从一个几点到另外一个结点所经过的边的数量,就是路径长度。从根结点A到叶子结点E,共经过了3条边,因此路径长度是3。树的每一个结点,都可以拥有自己的“权重”(weight),权重在不同的算法中起到不同的作用。结点的带权路径长度 = 树的根节点到该结点的路径长度 * 该结点权重。

weixin_52958292的博客 5402

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Huffman树(哈夫曼树)

哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以...

南方以北 1万+

哈夫曼树的绘制

数据结构之哈夫曼树绘制本人还是一个年轻的程序猿(还是个学生),请大家多多指教! 哈夫曼树 已知权重绘制哈夫曼树 开始我的表演 Step 1. 已知权重:2,3,3,4,7,6 Step 2. 选取其中小的两个权重:2,3 Step 3. 把2,3作为孩子结点如下图: Step 4. 重复Step 2的步骤取出权重值里两个较小的权重值3,4并进行绘制树,如下图: Step 5. 重复Step 2的步骤

yypClever的博客 2万+

哈夫曼树以及哈夫曼算法

一、哈夫曼树的定义 1、哈夫曼树:最优树即带权路径长度(WPL)最短的树 “带权路径长度最短”是在"度相同”的树中比较而得的结果,因此有最优二叉树、最优三叉树之称等等。 2、哈夫曼树:最优二叉树即带权路径长度(WPL)最短的二叉树 因为构造这种树的算法是由哈夫曼教授于1952年提出的,所以被称为哈夫曼树,相应的算法称为哈夫曼算法。 二、哈夫曼树的特点 1、满二叉树不一定是哈夫曼树 2、哈夫曼树中权越大的叶子离根越近 3、具有相同带权结点的哈夫曼树不唯一 三、哈夫曼算法(构造哈夫曼树的方法)

kxbdys的博客 6131

java 实现哈夫曼树

一、 什么是哈夫曼树 要理解什么是哈夫曼树,首先要理解几个概念 路径:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。 路径长度:路径上的分支数目。 树的路径长度:从树根到每一个结点的路径长度之和。(完全二叉树就是树的路径长度最短的二叉树) 考虑带权的结点 结点的带权路径长度:从该结点到树根之间的路径长度和结点上权的乘积。 树的带权路径长度:树的所有结点的带权路径之和(...

www_chinese_com的博客 5376
上一篇: 排序
下一篇: 数据库时区
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值