数据结构--赫夫曼树及其应用
讲解请参考 赫夫曼
------ 赫夫曼树和赫夫曼编码的存储表示------
typedef struct {unsigned int weight;unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char ** HuffmanCode;void HuffmanCoding(HuffmanTree& HT,HuffmanCode & HC,int *w,int n) {if (n < 1) return;\int m = 2* n + 1;HT = (HuffmanTree) malloc (m+1)* sizeof(HTNode); //0 号单元未用for ( HuffmanTree p = HT; i=1; i<=n; ++i; ++p; ++w) *p = {*w,0,0,0,0};for(; i<=m; ++i; ++p)*p = {0,0,0,0};for(i = n+1; i<=m; i++) { //建立HuffmanTreeSelect(HT,i-1,s1,s2);HT[s1].parent = i; HT[s2].parent = i; HT[i].lchild = s1;HT[i].rchild = s2;HT[i].weight = HT[s1].weight + HT[s2].weight;}HC = (HuffmanCode)malloc((n+1)* sizeof(char*));cd = (char*) malloc(n* sizeof(char));cd [n-1] = "\0";for ( i=1; i<=n; i++) {int start = n-1;for ( c=i, f = HT[i].parent; f!=0; c=f; f = HT[f].parent )if( HT[f].lchild == c ) cd [--start] = "0";else cd [--start] = "1";HC[i] = (char*) malloc ( (n-start)* sizeof(char)); strcyp(HC[i],&cd[start]);}free(cd);}
------ 无栈非递归遍历赫夫曼树,求赫夫曼编码------
HC = (HuffmanCode) malloc ( (n+1) * sizeof(char*));
int p = m, cdlen = 0;for ( int i=1; i<=m; ++i) HT[i].weight = 0;while(p) {if ( HT[p].weight == 0 ) {HT[p].weight = 1; if ( HT[p].lchild != 0) {p = HT[p].lchild; cd[cdlen++] = "0";}else if ( HT[p].lchild == 0) {HC[p] = (char*) malloc ((cdlen+1) * sizeof(char));cd[cdlen] = "\0"; strcpy(HC[p],cd);}}else if ( HP[p].weight == 1) {HT[p].weight = 2;if ( HT[p].rchild != 0) {p = HT[p].rchild;cd [cdlen++] = "1";}else {HT[p].weight = 0; p = HT[p].parent; --cdlen;}}
}
数据结构--赫夫曼树及其应用相关推荐
- 数据结构--赫夫曼树
数据结构 –赫夫曼树 文章目录 数据结构 一.一些概念 二.最优二叉树(赫夫曼树) 三.赫夫曼树的构造 四.赫夫曼编码 五.前缀编码 一.一些概念 路径:从树中一个结点到另一个结点之间的分支构成这两个 ...
- 数据结构 - 赫夫曼树
wpl最小的就是赫夫曼树(所有叶子节点的带权路径长度之和最小) 写出来两个节点连接,然后循环就可以了 package tree.huffmantree;import java.util.ArrayLi ...
- 数据结构-赫夫曼树(三)
Huffman Tree 哈夫曼树 霍夫曼树 概念 代码实现: 概念 路径和路径长度: 路径: 从一个节点往下可以达到的子节点或子子节点之间的通路 路径长度: 通路中分支的数目称之为路径长度. 根节点 ...
- 【数据结构】赫夫曼树
数据结构赫夫曼树 /*名称:赫夫曼树语言:数据结构C语言版 编译环境:VC++ 6.0日期: 2014-3-26 */#include <stdio.h> #include <lim ...
- 2020-10-1 //严蔚敏《数据结构》 //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码
//严蔚敏<数据结构> //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码 //(从叶子结点到根逆向求每个字符的赫夫曼编码)以及(无栈非递归遍历赫夫曼树,求赫夫曼编码) //自学中 ...
- 【赫夫曼树数据结构及其应用】
本文主要介绍Java中赫夫曼树数据结构的基本原理.实现方式以及使用场景.赫夫曼树(Huffman Tree)是一种带权路径最短的二叉树,广泛应用于数据压缩和编码等领域. 一.赫夫曼树的基本概念 赫夫曼 ...
- 数据结构(十五)— 树结构之赫夫曼树及其应用
现在我们都是讲究效率的社会,什么都要求速度, 在不能出错的情况下,做任何事情都讲究越快越好.在计算机和互联网技术中,文本压缩就是一个非常重要的技术. 玩电脑的人几乎都会应用压缩和解压缩软件来处理文档. ...
- java振动数据压缩_【数据结构-Java】最佳实践-数据压缩(使用赫夫曼树)
一.需求 将给出的一段文本,比如 "i like like like java do you like a java" , 根据前面的讲的赫夫曼编码原理,对其进行数据压缩处理 二. ...
- 【赫夫曼树详解】赫夫曼树简介及java代码实现-数据结构07
赫夫曼树(最优二叉树) 1. 简介 定义: 赫夫曼树是n个带权叶子结点构成的所有二叉树中,带权路径长度(WPL)最小的二叉树. 叶子结点的带权路径: 叶子结点权值*到根节点的路径长度(叶结点的层数) ...
最新文章
- NOIP2018 集训(一)
- Element UI——布局容器el-container子元素强制上下排列
- CTF之一次曲折获取Flag的过程
- 汇编中16进制的写法问题
- 是时候挥别 SQL Server 2008 了
- 【Servlet】Session会话跟踪技术
- linux内核那些事之struct page
- 第一款青少年搜索引擎“花漾搜索“APP正式上线
- java斗地主怎么出牌_斗地主滑动选牌出牌(Cocos Creator)
- 【原创】微信支付遇到的各种坑及解决方案随笔记录,invalid signature, “errMsg“:“chooseWXPay:fail“
- 【剑指 offer】—— 为公司员工的年龄排序
- php只保留两位小数
- 为何 linux 要用 tar.gz,而不用 7z 或 zip?
- vmware安装linux.iso
- centos7安装python2.6_centos7.2下yum和python重装问题及解决方法
- Hybrid Astar 算法剖析和实现(一)
- 云南钉钉早教、幼儿园、托儿所一体化智能管理系统解决方案
- java读取json文件
- 如何写论文摘要和引言
- 2019年全球PC浏览器排行榜!
热门文章
- qt 无法打开shell32_在Qt中用默认程序打开文件
- 求有向图的简单路径_2020福建农信社招聘-关键路径
- 教你如何快速入门python_如何快速入门python
- hdfs中与file数组类似的数组_如何在 JavaScript 中克隆数组
- 【LeetCode笔记】958. 二叉树的完全性检验(Java、二叉树、BFS)
- java联合主键_hibernate联合主键映射(注解版)
- 系统分析与控制_质量体系文件:测量系统分析控制程序
- adb android源码分析,Android Adb 源码解析(base on Android 9.0)
- oracle 时间集合,oracle 日期函数集合(集中版本)第2/2页
- p50会搭载鸿蒙吗,华为Mate40和华为P50也会搭载鸿蒙,华为Mate30跌至白菜价让路