【数据结构笔记】哈夫曼树的构造算法
原教材《数据结构教程》(第5版)李春葆 主编(武汉大学数据结构课程教材)
《算法笔记》那本书上并没有直接给出哈夫曼树的构造代码,特此记录一下。
核心代码:
typedef struct{char data;double weight;//权重int parent;int lchild;int rchild;
}HTNode;
void CreateHT(HTNode ht[],int no)//no个叶子结点
{int i,k,lnode,rnode;double min1,min2;for(i=0;i<2*no-1;i++)//no个叶子结点的哈夫曼树有2*no-1个结点,初始化ht[i].parent=ht[i].lchild=ht[i].rchild=-1;for(i=no;i<=2*no-2;i++)//构造no-1个分支结点{min1=min2=32767;//设为较大的数lnode=rnode=-1;//lnode和rnode为最小权重的两个结点位置for(k=0;k<=i-1;k++){if(ht[k].parent==-1){if(ht[k].weight<minl){min2=min1;rnode=lnode;min1=ht[k].weight;lnode=k;}else if(ht[k].weight<min2){min2=ht[k].weight;rnode=k;}}}ht[i].weight=ht[lnode].weight+ht[rnode].weight;ht[i].lchild=lnode;ht[i].rchild=rnode;ht[lnode].parent=i;ht[rnode].parent=i;}
}
举个栗子叭~(直接纸上模拟,来说明如何在尚未构造二叉树的结点中寻找权值最小的两个结点)
如初始结点为 1 7 3 5
在纸上写了一些关键的代码,emmmm我知道既不简洁也不美观(还字丑)哈哈哈
(皮毛的ps技术学以致用hhh)
自己举个例子手动模拟一下就能明白啦:
min1,lnode是分别记录权值最小的结点的大小和下标
min2,rnode是记录权值第二小的结点的大小和下标
且如果有比当前min1小的结点,那么min2就会继承之前记录的那个min1的值(包括对应的lnode),再更新min1和lnode。
就酱~结束·
【数据结构笔记】哈夫曼树的构造算法相关推荐
- 数据结构教程—哈夫曼树的构造算法
哈夫曼树算法如下 (1)根据给定的n个权值,使对应节点构成n棵二叉树的森林,其中每棵二叉树都只有一个根节点,其左右子树均为空. (2)在森林中选取两棵节点权值最小的子树分别作为左右子树构造一棵新的二叉 ...
- 哈夫曼树的构造算法代码
代码: #include<stdio.h> #define ERROR 0 #define OK 1 typedef int Status; //采用顺序存储结构,一维结构数组 //定义结 ...
- 数据结构C#版笔记--啥夫曼树(Huffman Tree)与啥夫曼编码(Huffman Encoding)
哈夫曼树Huffman tree 又称最优完全二叉树,切入正题之前,先看几个定义 1.路径 Path 简单点讲,路径就是从一个指定节点走到另一个指定节点所经过的分支,比如下图中的红色分支(A-> ...
- 数据结构“基于哈夫曼树的数据压缩算法”的实验报告
一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Last edited: 2022.11.20 目录 数据结构& ...
- 数据结构 基于哈夫曼树的数据压缩算法
数据结构 基于哈夫曼树的数据压缩算法 实验目的 实验内容 实验提示 实验代码 实验小结 实验目的 1.掌握哈夫曼树的构造算法. 2.掌握哈夫曼编码的构造算法. 实验内容 问题描述 输入一串字符串,根据 ...
- 数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)
目录 什么是哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 图解操作 代码实现 代码解析 哈夫曼树的特点 哈夫曼编码 不等长编码 二叉树用于编码 哈夫曼编码实例 什么是哈夫曼树 我们先举个例子: 要将百分制 ...
- 算法学习笔记——数据结构:哈夫曼树、带权路径长度WPL、哈夫曼编码
引入 合并果子问题如下: 有n堆果子,每次可以合并任意两堆果子,耗费体力值为[两堆果子数之和],最终在n-1次合并后,得到一堆果子. 给出合并的方案,使得耗费的体力值最小 例如有3堆果子,质量依次为1 ...
- 【数据结构】哈夫曼树与哈夫曼编码
定义 带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值wkw_kwk,从根节点到每个叶子结点的长度为lkl_klk,则每个叶子结点的带权路径长度之和就是:WPLWPLWPL=∑ ...
- 数据结构(哈夫曼树+KMP)之 数据加密+解密
数据结构(哈夫曼树+KMP)之 数据加密+解密 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define N 1 ...
- 哈夫曼树的构造及C++代码实现
哈夫曼树的构造过程: (1) 以权值分别为W1,W2...Wn的n各结点,构成n棵二叉树T1,T2,...Tn并组成森林F={T1,T2,...Tn},其中每棵二叉树 Ti仅有一个权值为 Wi的根结点 ...
最新文章
- js深入研究之牛逼的类封装设计
- 总线及数据传输技术【待完善】
- 前端学习(1512):vue-router文档
- toj 4611 Repairing a Road
- MyBatis 接口绑定方案及多参数传递、动态 SQL、ThreadLocal、缓存
- 声乐学习----关于发声的个人解读
- 国内唯一的经济又专业的节目比赛/人物评选/公开评比整体解决方案
- 缠论找日线找第二类买点买入程序
- wacom数位板怎么调压感_怎么设置PS的画笔利用到数位板压感?
- 您的计算机无法正常启动,3种简单的方法 修复错误 ‘您的电脑无法正常启动’...
- Android应用快捷方式
- 【零基础学Python】Day8 Python基本数据类型之Dictionary
- 【高并发】假如你网站一天有千万级访问量高并发,如何破解?
- Django项目骨架与常见配置修改
- 浏览我的php网页时,出现的都是网页的代码
- linux上面跑lvgl GUI简单实例
- 字符串翻译python_字符串的这个东西-翻译表
- 生产者消费者问题的C语言实现
- linux(ubuntu)下vi命令(例:sudo vi ~/.bashrc)
- 出租屋路由器DHCP模式连接经常断网处理
热门文章
- anaconda安装-清华镜像库
- Integer的自动装箱底层缓存原理
- scala条件替换_Scala:如何使用scala替换Dataframe中的值
- mysql建立索引_MySQL 索引及优化实战(一)
- 安兔兔html5测试35000,安兔兔评测 8.4.3 安卓版
- mysql 函数 截取,MySQL 字符串函数:字符串截取
- 在WPF中自定义控件(1)
- ASP.NET随机显示数据库记录
- 大规模机器学习:将数据科学引入生产系统架构的典型模式
- Vue2.0进阶组件篇2 解析饿了么(spinner组件)