构造Huffman以及实现
构造Huffman
题目
在作业本上分别针对权值集合W=(6,5,3,4,60,18,77)和W=(7,2,4,5,8)构造哈夫曼树,提交构造过程的照片
错误回答


错误原因:遵循左边小于根右边大于根的原则
正确回答

HuffmanTree的实现
题目
- 1、采用静态三叉链表Triment(已经完整实现)储存HuffmanTree
- 2、理解HuffmanTree的构造过程,不中代码完成decode()
- 3、在HuffmanTreeTest中补充代码完成上个练习中的内容
- 4、提交补充代码和运行结果截图
压缩
//数据压缩,将text各字符转换成Huffman编码存储,返回压缩字符串
public String encode(String text)
{
String compressed=""; //被压缩的数据,以字符串显示
for (int i=0; i<text.length(); i++)
compressed += getCode(text.charAt(i)-'A'); //默认字符集是从A开始的n个字符
return compressed;
}
解压
//数据解压缩,将压缩compressed中的0/1序列进行Huffman译码,返回译码字符串
public String decode(String compressed)
{
//依次取出二进制的每一位,从树根向下搜索,1向右,0向左,
// 到了叶子节点(命中),退回根节点继续重复以上动作
String uncompressed="";
char code;
TriElement node = huftree[huftree.length-1];
int i=0;
while(i<compressed.length()) {
if(!node.isLeaf()){
code = compressed.charAt(i);
if (code == '0') {
node = huftree[node.left];
} else {
node = huftree[node.right];
}
i++;
}else if(node.isLeaf()){
//找到该叶节点的data在权值数组中的位置
int j=0;
while(!(node.data == weights[j]))
j++;
//该位置即为该叶节点对应字母在默认字符集中的位置
uncompressed += charset.charAt(j);
node = huftree[huftree.length-1];
}
}
return uncompressed;
}
运行结果


构造Huffman以及实现的更多相关文章
- 堆应用---构造Huffman树(C++实现)
堆: 堆是STL中priority_queue的最高效的实现方式(关于priority_queue的用法:http://www.cnblogs.com/flyoung2008/articles/213 ...
- 用优先队列构造Huffman Tree及判断是否为最优编码的应用
前言 我们知道,要构造Huffman Tree,每次都要从堆中弹出最小的两个权重的节点,然后把这两个权重的值相加存放到新的节点中,同时让这两个节点分别成为新节点的左右儿子,再把新节点插入到堆中.假设节 ...
- Huffman Tree 简单构造
//函数:构造Huffman树HT[2*n-1] #define MAXVALUE 9999//假设权值不超过9999 #define MAXLEAF 30 #define MAXNODE MAXLE ...
- Huffman树的构造及编码与译码的实现
哈夫曼树介绍 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数) ...
- 构造数列Huffman树总耗费_蓝桥杯
快排! /** 问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的 ...
- 赫夫曼\哈夫曼\霍夫曼编码 (Huffman Tree)
哈夫曼树 给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的结点离 ...
- HUFFMAN 树
在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN) 树和哈夫曼编码.哈夫曼编码是哈夫曼树的一个应用.哈夫曼编码应用广泛,如 JPEG中就应用了哈夫曼编码. 首先介绍什么 ...
- Huffman编码实现电文的转码与译码
//first thing:thanks to my teacher---chenrong Dalian Maritime university /* 构造Huffman Tree思路: ( ...
- 算法:求 Huffuman树 构造费用
问题背景: Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1}, ...
随机推荐
- 安裝HA服務
**************************************************************************************************** ...
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(1)——Linux环境下的图形系统简介
Linux/Unix环境下最早的图形系统是Xorg图形系统,Xorg图形系统通过扩展的方式以适应显卡和桌面图形发展的需要,然而随着软硬件的发展,特别是嵌入式系统的发展,Xorg显得庞大而落后.开源社区 ...
- 如何编译和安装libevent【转】
转自:http://www.open-open.com/lib/view/open1455522194089.html 来自: http://blog.csdn.net/yangzhenping/ar ...
- centos6 yum方式升级内核【转】
最近没有时间好久没有写文章了,今天由于需要安装docker学习虚拟容器的知识,需要升级OS的内核.目前我这边使用的OS是centos6.5,内核是2.6版本的,如下: cat /etc/issue u ...
- C/C++杂记:NULL与0的区别、nullptr的来历
某些时候,我们需要将指针赋值为空指针,以防止野指针. 有人喜欢使用NULL作为空指针常量使用,例如:int* p = NULL;. 也有人直接使用0值作为空指针常量,例如:int* p = 0;. ...
- linux用户权限 -> 系统基本权限
比如rwxr-xr-x linux中正是这9个权限位来控制文件属主(User).属组(Group).其他用户(Other)基础权限. 用户对资源来说, 有三种角色 User(u): 属主用户(文件所有 ...
- sql的主键,int类型,自增,自动编号到了规定最大数,接下来数据库会怎么做
答案:它会从1开始重新编号,但是避开已经重复的值.
- JAVA随笔(二)
在函数传参时,double传给int是不行的,反过来可以.参数只能传值.当参数是字符串时,传递的只是串值:但对于数组来说,传递的是管理权,也就是指针 对象变量是对象管理者. cast转型:基本类型与对 ...
- IntelliJ IDEA 里 查看一个函数注释的方法是 ctrl+q
ctrl + q 也可以看到 官方的文档注释,java真是个强大的东西,官方的每个函数都有注释,这些注释 自动生成了官方的文档,所以看官方的注释 就是 看 官方的文档.
- javascript数组元素的添加、删除与插入以及参数数组的使用
1.数组元素的添加 push方法在数组的尾部添加元素: var colorArray=new Array(); colorArray.push('red','black','yellow'); //这 ...