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

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

作者头像
Yuyy
发布于 2022-06-28 10:37:00
发布于 2022-06-28 10:37:00
43800
代码可运行
举报
运行总次数: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
各种基本算法实现小结(三)—— 树与二叉树
===================================================================
阳光岛主
2019/02/20
6130
数据结构之哈夫曼树和编码器的构造
在最近的自学数据结构的过程中,为加深树的理解,码了一个二叉树编码器,请多多指教: ---- #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
6700
2016天梯模拟赛 进阶题解
L2-005 集合相似度 题目链接: https://www.patest.cn/contests/gplt/L2-005 题目的意思是要求两个集合的交集中互不相同元素的个数和两个集合并集中互不相同的元素的个数 先求交集中互不相同的元素,然后用两个集合互不相同元素个数的和减去,就是并集中的个数 #include <iostream> #include <string.h> #include <stdlib.h> #include <algorithm> #include <math.h> #includ
ShenduCC
2018/04/26
8290
基础练习 Huffman树
  Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。   给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:   1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。   2. 重复步骤1,直到{pi}中只剩下一个数。   在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。   本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。   例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:   1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。   2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。   3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。   4. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。   5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。
刘开心_1266679
2019/02/14
5540
数据结构 哈夫曼编码/译码器
题目8:哈夫曼编码/译码器 实验类型(验证/设计/创新):设计 学时:16 课程设计内容: 设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件;反过来,可将一个编码文件译码还原为一个文本文件(.txt)。要求: 7.输入一个待压缩的文本文件名, 统计文本文件中各字符的个数作为权值,生成哈夫曼树; 8.将文本文件利用哈夫曼树进行编码,生成压缩文件; 9.输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码; 10.可显示指定的压缩文件和文本文件; 课程设计要求: 熟练掌握哈夫曼树的构建方法;能够运用哈夫曼树实现哈夫曼编码和译码。 重点难点: 【本课程设计重点】哈夫曼树的构建和哈夫曼编码。 【本课程设计难点】各字符出现频率的统计、哈夫曼树的构建和哈夫曼译码。
川川菜鸟
2021/10/18
7790
P1096 Hanoi双塔问题
本文最后更新于 1170 天前,其中的信息可能已经有所发展或是发生改变。 // P1096 Hanoi双塔问题.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include<cstdio> using namespace std; int main() { int n; //freopen("hanoi.in", "r", stdin); //freopen("hanoi.out", "w", stdout);
Yuyy
2022/06/28
2040
最优二叉树—哈夫曼(huffman)树
ASL=(1+2*2+3)/4=2            ASL=(1+2+3+4)/4=2.5
一条晒干的咸鱼
2024/11/19
3100
最优二叉树—哈夫曼(huffman)树
赫夫曼编译码器的源代码
用户11070251
2024/04/11
1180
Huffman 编码的编程与实现 C语言
一 、目的: 1.    掌握Huffman树的概念、存储结构; 2.    掌握建立Huffman树和Huffman编码的方法; 二 、环境: operating system version:Win11 CPU instruction set:  x64 Integrated Development Environment:Viusal Studio 2022 三 、内容: 利用动态分配数组存储赫夫曼树,设计一组输入数据(假定为一组整数),能够对其进行如下操作: 1)创建一个新的顺序表,实现动态空间分配的初始化 2)对输入的数据构造成一棵 Huffman 树; 3)根据生成的 Huffman 树进行 Huffman 编码 4)实现对输入数据的 Huffman 编码输出 。 四 、要求: 1) 实现 Huffman 树的生成 2) 完成 Huffman 编码的输出 。 五 、步骤: 1. 程序:
timerring
2025/05/24
1380
Huffman 编码的编程与实现 C语言
二叉树的应用详解 - 数据结构
1、排序树——特点:所有结点“左小右大 2、平衡树——特点:所有结点左右子树深度差≤1 3、红黑树——特点:除了具备二叉查找树的特性外还有5个特性以致保持自平衡。 4、字典树——由字符串构成的二叉排序树 5、判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重) 6、带权树——特点:路径带权值(例如长度) 7、最优树——是带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。
黄规速
2022/04/14
1.4K0
二叉树的应用详解 - 数据结构
数据结构与算法 -- 哈夫曼树思想与创建详解1
  给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
cMusketeer
2019/01/03
6830
哈夫曼树
哈夫曼树 1.相关概念 2.哈夫曼树的特点 为了让带权路径长度计算值最小 3,哈夫曼树的基本思想 4.哈夫曼树的构造过程 5.哈夫曼树的存储结构 6.伪代码 7.图示 8.代码 9.例子 #include<iostream> using namespace std; //哈夫曼树----静态链表方式存储 struct HtnNode { int weight;// 权值 int l
大忽悠爱学习
2022/05/05
4150
哈夫曼树
数据结构——哈夫曼树的实现以及编码(C语言实现)
      利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。构造哈夫曼树时,首先将由n个字
Gorit
2021/12/09
2.3K0
数据结构——哈夫曼树的实现以及编码(C语言实现)
深入理解Huffman编码:原理、代码示例与应用
在这个数字时代,数据的有效压缩和传输变得至关重要。Huffman编码是一种经典的数据压缩算法,它通过将常见字符映射到短编码来降低数据大小,从而节省存储空间和带宽。本篇博客将深入介绍Huffman编码的原理、代码示例以及实际应用。
命运之光
2024/03/20
1K0
深入理解Huffman编码:原理、代码示例与应用
【数据结构】【程序填空】赫夫曼解码
例如有一个叶子权值是29,后来生成一个中间结点权值也是29,那么叶子为左孩子,中间结点为右孩子
叶茂林
2023/07/30
1990
【C++实验】哈夫曼树与哈夫曼编码实验
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的u信息收发编写一个哈夫曼码的编/译码系统。
哈__
2024/06/23
2280
数据结构与算法 -判定树和哈夫曼树
判定树是用于描述分类过程的二叉 树,每个非终端结点包含一个条件,对应一次比较;每个终端结点 包含一个种类标记, 对应于一种分类结果。
越陌度阡
2020/11/26
1.3K0
数据结构与算法 -判定树和哈夫曼树
树与二叉树的深度优先与广度优先算法(递归与非递归)
本博客前面文章已对树与二叉树有过简单的介绍,本文主要是重点介绍有关二叉树的一些具体操作与应用
阳光岛主
2019/02/20
8590
数据结构 Huffman树
Huffman 介绍 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点
Kindear
2017/12/29
1.5K0
数据结构 Huffman树
【数据结构】建立二叉树以及哈夫曼树及哈夫曼编码
文章目录 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
【数据结构】建立二叉树以及哈夫曼树及哈夫曼编码
相关推荐
各种基本算法实现小结(三)—— 树与二叉树
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验