Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >构造哈夫曼树的哈夫曼算法

构造哈夫曼树的哈夫曼算法

作者头像
Yuyy
发布于 2022-06-28 10:37:00
发布于 2022-06-28 10:37:00
39900
代码可运行
举报
运行总次数:0
代码可运行

本文最后更新于 1170 天前,其中的信息可能已经有所发展或是发生改变。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "stdafx.h"
#include "stdio.h"
#define maxval 100.0 
#pragma warning(disable:4996)
typedef struct{
	float weight;
	int parent, lchild, rchild;
}hufmtree;
void Huffman(hufmtree tree[])
{
	int i, j, p1, p2; int n, m;
	float sum = 0; 
	float small1, small2, f;
	puts("请输入叶子结点的数目");
	scanf("%d", &n);
	m = 2 * n - 1;
	for (i = 0; i < m; i++)
	{
		tree[i].parent = 0;
		tree[i].lchild = 0;
		tree[i].rchild = 0;
		tree[i].weight = 0.0;
	}
	printf("请输入%d个权值\n", n);
	
	for (i = 0; i < n; i++)
	{

		scanf("%f", &f);
		tree[i].weight = f;
	}
	for (i = n; i < m; i++){
		p1 = p2 = 0;
		small1 = small2 = maxval;
		for (j = 0; j <= i - 1; j++){ 
			if (tree[j].parent == 0)
			if (tree[j].weight < small1){
				small2 = small1;
				small1 = tree[j].weight;
				p2 = p1;
				p1 = j;
			}
			else
			if (tree[j].weight < small2){
				small2 = tree[j].weight;
				p2 = j;
			}
		}
		tree[p1].parent = tree[p2].weight = i;
		tree[i].weight = tree[p1].weight + tree[p2].weight;
		sum += tree[j].weight;
		tree[i].lchild = p1;
		tree[i].rchild = p2;
	}
	printf("哈夫曼树为; \n parent lchild rchild weight\n");
	for (i = 0; i < 2 * n - 1; i++)
	{
		printf(" %d      %d      %d      %.2f\n", tree[i].parent,
			tree[i].lchild, tree[i].rchild, tree[i].weight);
	}
	printf("带权路径长度为:%.2f\n", sum);
}
int main()
{
	hufmtree tree[100];
	Huffman(tree);
}

Post Views: 184

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-4-15 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据结构之哈夫曼树和编码器的构造
在最近的自学数据结构的过程中,为加深树的理解,码了一个二叉树编码器,请多多指教: ---- #include #define MAXBIT100 //最大子树 #define MAXVALUE10000 //最大值 #define MAXLEAF30 //最大编码数 #define MAXNODEMAXLEAF*2 -1 //最大节点数 typedef struct { int bit[MAXBIT]; int start; } HCodeType;/*编码结构体*/ typedef struct { i
云时之间
2018/04/11
6550
最优二叉树—哈夫曼(huffman)树
ASL=(1+2*2+3)/4=2            ASL=(1+2+3+4)/4=2.5
一条晒干的咸鱼
2024/11/19
2250
最优二叉树—哈夫曼(huffman)树
数据结构 Huffman树
Huffman 介绍 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点
Kindear
2017/12/29
1.5K0
数据结构 Huffman树
哈夫曼树与哈夫曼编码
废江博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 转载请注明原文链接:哈夫曼树与哈夫曼编码
废江_小江
2022/09/05
6370
哈夫曼树与哈夫曼编码
二叉树的应用详解 - 数据结构
1、排序树——特点:所有结点“左小右大 2、平衡树——特点:所有结点左右子树深度差≤1 3、红黑树——特点:除了具备二叉查找树的特性外还有5个特性以致保持自平衡。 4、字典树——由字符串构成的二叉排序树 5、判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重) 6、带权树——特点:路径带权值(例如长度) 7、最优树——是带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。
黄规速
2022/04/14
1.3K0
二叉树的应用详解 - 数据结构
赫夫曼编译码器的源代码
用户11070251
2024/04/11
1090
数据结构(15)–哈夫曼树以及哈夫曼编码的实现「建议收藏」
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说数据结构(15)--哈夫曼树以及哈夫曼编码的实现「建议收藏」,希望能够帮助大家进步!!!
Java架构师必看
2022/10/05
2.7K0
数据结构(15)–哈夫曼树以及哈夫曼编码的实现「建议收藏」
哈夫曼树【最优二叉树】【Huffman】
        在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来:
瑾诺学长
2018/09/21
1.7K0
哈夫曼树【最优二叉树】【Huffman】
数据结构——哈夫曼树的实现以及编码(C语言实现)
      利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。构造哈夫曼树时,首先将由n个字
Gorit
2021/12/09
2.1K0
数据结构——哈夫曼树的实现以及编码(C语言实现)
哈夫曼树
哈夫曼树 1.相关概念 2.哈夫曼树的特点 为了让带权路径长度计算值最小 3,哈夫曼树的基本思想 4.哈夫曼树的构造过程 5.哈夫曼树的存储结构 6.伪代码 7.图示 8.代码 9.例子 #include<iostream> using namespace std; //哈夫曼树----静态链表方式存储 struct HtnNode { int weight;// 权值 int l
大忽悠爱学习
2022/05/05
3590
哈夫曼树
数据结构与算法 -判定树和哈夫曼树
判定树是用于描述分类过程的二叉 树,每个非终端结点包含一个条件,对应一次比较;每个终端结点 包含一个种类标记, 对应于一种分类结果。
越陌度阡
2020/11/26
1.2K0
数据结构与算法 -判定树和哈夫曼树
【数据结构】【程序填空】赫夫曼解码
例如有一个叶子权值是29,后来生成一个中间结点权值也是29,那么叶子为左孩子,中间结点为右孩子
叶茂林
2023/07/30
1880
数据结构C#版笔记--啥夫曼树(Huffman Tree)与啥夫曼编码(Huffman Encoding)
哈夫曼树Huffman tree 又称最优完全二叉树,切入正题之前,先看几个定义 1、路径 Path 简单点讲,路径就是从一个指定节点走到另一个指定节点所经过的分支,比如下图中的红色分支(A->C->
菩提树下的杨过
2018/01/23
1.2K0
数据结构C#版笔记--啥夫曼树(Huffman Tree)与啥夫曼编码(Huffman Encoding)
深入理解Huffman编码:原理、代码示例与应用
在这个数字时代,数据的有效压缩和传输变得至关重要。Huffman编码是一种经典的数据压缩算法,它通过将常见字符映射到短编码来降低数据大小,从而节省存储空间和带宽。本篇博客将深入介绍Huffman编码的原理、代码示例以及实际应用。
命运之光
2024/03/20
9040
深入理解Huffman编码:原理、代码示例与应用
哈夫曼树
哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径
Java架构师必看
2021/12/27
6660
使用哈夫曼树实现文本编码、解码
现在许多实际问题抽象出来的数据结构往往都是二叉树的形式。哈夫曼编码可以对日常数据量很大的数据,进行数据压缩技术来实现存储和传输。
全栈程序员站长
2022/08/18
1.1K0
使用哈夫曼树实现文本编码、解码
数据结构 哈夫曼编码/译码器
题目8:哈夫曼编码/译码器 实验类型(验证/设计/创新):设计 学时:16 课程设计内容: 设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将一个编码文件译码还原为一个文本文件(.txt)。要求: 7.输入一个待压缩的文本文件名, 统计文本文件中各字符的个数作为权值,生成哈夫曼树; 8.将文本文件利用哈夫曼树进行编码,生成压缩文件; 9.输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码; 10.可显示指定的压缩文件和文本文件; 课程设计要求: 熟练掌握哈夫曼树的构建方法;能够运用哈夫曼树实现哈夫曼编码和译码。 重点难点: 【本课程设计重点】哈夫曼树的构建和哈夫曼编码。 【本课程设计难点】各字符出现频率的统计、哈夫曼树的构建和哈夫曼译码。
川川菜鸟
2021/10/18
7650
各种基本算法实现小结(三)—— 树与二叉树
===================================================================
阳光岛主
2019/02/20
6070
【数据结构】建立二叉树以及哈夫曼树及哈夫曼编码
文章目录 5.4.1 方式 5.4.2 由先根和中根遍历序列建二叉树 5.4.3 由后根和中根遍历序列建二叉树 5.4.4 由标明空子树的先根遍历建立二叉树 5.4.5 由完全二叉树的顺序存储结构建立二叉链式存储结构 5.5 哈夫曼树及哈夫曼编码 5.5.1 基本概念 5.5.2 最优二叉树 5.5.3 构建哈夫曼树 5.5.4 哈夫曼编码 5.5.5 哈夫曼编码类 5.4.1 方式 四种方式可以建立二叉树 由先根和中根遍历序列建二叉树 由后根和中根遍历序列建二叉树 由标明空子树的先根遍
陶然同学
2023/02/26
1.1K0
【数据结构】建立二叉树以及哈夫曼树及哈夫曼编码
数据结构与算法 -- 哈夫曼树思想与创建详解1
  给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
cMusketeer
2019/01/03
6710
相关推荐
数据结构之哈夫曼树和编码器的构造
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验