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

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);

http://www.xdnf.cn/news/3994.html

相关文章:

  • 深度学习在自动驾驶车辆车道检测中的应用
  • 硬件工程师面试常见问题(13)
  • 一个整数n可以有多种分划,分划的整数之和为n,在不区分分划出各整数的次序时,字典序递减输出n 的各详细分划方案和分划总数,详解
  • 5.4学习记录
  • 洛谷 P2473 [SCOI2008] 奖励关
  • TS 类型别名
  • ES6入门---第三单元 模块一:类、继承
  • 【操作系统】死锁
  • [pdf,epub]292页《分析模式》漫谈合集01-59提供下载
  • 【C语言入门级教学】VS使用调试技巧1
  • 算法笔记.求约数
  • 303.整数拆分
  • Seata TCC 实战笔记:从零搭建分布式事务 Demo (含源码)
  • Linux的时间同步服务器
  • 【LLM】deepseek R1之GRPO训练笔记(持续更新)
  • 【TF-BERT】基于张量的融合BERT多模态情感分析
  • 代码随想录算法训练营Day44
  • PyTorch_张量索引操作
  • Spring Cloud Gateway路由+断言+过滤
  • Flask + SQLite 简单案例
  • 位置权限关掉还能看到IP属地吗?全面解析定位与IP的关系
  • 腾讯云服务器技术全景解析:从基础架构到行业赋能​
  • React-router v7 第七章(导航)
  • 如何使用VSCode编写C、C++和Python程序
  • ES类迁移方法
  • 【翻译、转载】MCP 提示 (Prompts)
  • Kubernetes 安装 minikube
  • 计算机图形学编程(使用OpenGL和C++)(第2版) 01.环境搭建
  • Python的ArcPy基于Excel表格对大量遥感影像批量重分类
  • 第8章 Python 其他数据类型概述