构造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}, ...
随机推荐
- scrapy 爬虫踩过的坑(II)
同事写了个爬虫,逻辑上看着没什么问题,但是一直报错:Request url must be str or unicode…… 打印了一下url 和url 的类型,确实是 unicode 懵逼…… 打印 ...
- [转]Linux 线程分离状态
线程的分离与结合 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死:在被其他线程回收之前,它的存储器资源(如栈) ...
- Mysql注入root权限直接写一句话马
首先我们的找到一个有注入的站:这里我用自己搭建的环境表示:大家不要乱来 http://localhost/pentest/sql/sql_injection_get.php?id=1 发现是root权 ...
- Strusts2笔记6--拦截器
拦截器: Struts2的大多数核心功能都是通过拦截器实现的.拦截器之所以称之为“拦截器”,是因为它可以在执行Action之前或之后拦截下用户请求,执行一些操作,以增强Action方法的功能. Str ...
- mybatis 控制台打印sql脚本
在mybatis-config.xml文件中加一句 <setting name="logImpl" value="STDOUT_LOGGING" /> ...
- FTRL算法
稀疏解的作用:内存和时间啊 实际的互联网广告应用需要的是快速地进行model的更新.为了保证快速的更新,训练样本是一条一条地过来的,每来一个样本,model的参数对这个样本进行一次迭代,从而保证了mo ...
- 为什么有些网页QQ浏览器右键没有检查
改成[极速内核]. 设置->高级设置 改成[极速内核]: 如下图:
- Mysql建表语句
create table messages( id int unsigned primary key auto_increment, sender varchar(64) not null, gett ...
- SQlserver创建函数实现只取某个字段的数字部分
create FUNCTION [dbo].[GET_NUMBER](@S VARCHAR(100)) RETURNS VARCHAR(100) AS BEGIN WHILE PATINDEX('%[ ...
- 用django-cors-headers做跨域
什么是CORS? CORS(跨域资源共享,Cross-Origin Resource Sharing)是一种跨域访问的机制,可以让Ajax实现跨域访问. 其实,在服务器的response header ...