当前位置: 首页 > news >正文

25.5.4数据结构|哈夫曼树 学习笔记

知识点前言

一、搞清楚概念


●权:___________
●带权路径长度:__________
WPL=所有的叶子结点的权值*路径长度之和
●前缀编码:____________


二、构造哈夫曼树

n个带权值的结点,构造哈夫曼树算法:
1、转化成n棵树组成的森林F
2、构造新结点B,取森林里权值最小的两颗作为新结点的左右子树,新权值=左权值+右权值
3、删除F中被选择的两颗树,加上新生成的借点B

4、重复以上步骤,直到F中只有一颗树为止


三、哈夫曼树的性质


1每个初始节点最终都会成为叶子节点,权值越小,路径长度越大
2构造过程中新建了n-1个节点,节点总数2n-1=n-1+n;
3哈夫曼树中不存在度为1的节点

一、构造哈夫曼树

题目:已知节点和他们出现的频率,构造哈夫曼树算法

/******已知哈夫曼树n个节点的权值表,构造哈夫曼树**********/

/*******依据哈夫曼树,产生哈夫曼编码************/

代码框架:


/********实现哈夫曼树的构造***********/
/* 思考1、如何存储?链式?顺序?2、借助一个性质:二叉树中叶子结点数量n,度为2的节点数量n-1,总结点数:2n-13、节点结构??
*/
/*定义huffman树的节点结构,采用顺序存储,存储索引号*/
typedef struct{int weight;//节点的权值int lchild,rchild;//左右孩子的索引号int parent;//父节点的索引号
}HafumanNode,*HafumanTree;/******已知n个哈夫曼树的权值表,构造哈夫曼树**********/
HafumanTree createHafumanTree(const int *w,int n);
void releaseHuffmanTree(HafumanTree tree);
typedef char *hafumancode;
/*******依据哈夫曼树,产生哈夫曼编码************/
hafumancode *createHafumancode(HafumanTree tree,int n);
void releaseHafumancode(hafumancode *codes,int n);

相关文章:

  • mysql中int(1) 和 int(10) 有什么区别?
  • 基于python的task--时间片轮询
  • 【Redis】哈希(hash)与列表(list)
  • 【赵渝强老师】TiDB的MVCC机制
  • 【MySQL数据库】用户管理
  • day15 python 复习日
  • LabVIEW温控系统热敏电阻滞后问题
  • SpringBoot校园失物招领平台源码开发实现
  • CFD计算流体力学开源工程介绍
  • 数据库-数据类型,表的约束和基本查询操作
  • 探秘 RocketMQ 的 DLedgerServer:MemberState 的技术解析与深度剖析
  • HttpPrinter 是一款功能强大的跨平台 Web 打印解决方案
  • JAVA实战开源项目:纺织品企业财务管理系统 (Vue+SpringBoot) 附源码
  • C++基础代码解释
  • 【iOS】消息流程探索
  • 苍穹外卖12
  • AD 多通道设计---多图纸
  • Python----机器学习(模型评估:准确率、损失函数值、精确度、召回率、F1分数、混淆矩阵、ROC曲线和AUC值、Top-k精度)
  • vue3 - keepAlive缓存组件
  • Python的ArcPy基于Excel表格对大量遥感影像批量重分类
  • 国防部新闻发言人就日本民用飞机侵闯中国钓鱼岛领空答问
  • 社区来电催生?多地回应:系为居民提供卫生健康服务
  • 青海大学常务副校长(正厅级)任延明已任省卫健委党组书记
  • 抢抓消费旺季:五一假期,多地党政主官调研外贸优品展销活动
  • 菏泽家长“付费查成绩”风波调查:免费功能被误读
  • “五一”假期国铁集团计划日均开行旅客列车超1.2万列