哈夫曼编码

20182303 哈夫曼编码实践

拜拜、爱过 提交于 2019-12-05 09:49:13
哈夫曼编码实践 实践要求 设有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x,y,z}。 给定一个包含26个英文字母的文件,统计每个字符出现的概率,根据计算的概率构造一颗哈夫曼树,并完成对英文文件的编码和解码。 要求: (1)准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率; (2)构造哈夫曼树; (3)对英文文件进行编码,输出一个编码后的文件; (4)对编码文件进行解码,输出一个解码后的文件; (5)撰写博客记录实验的设计和实现过程,并将源代码传到码云; (6)把实验结果截图上传到云班课。 实现过程 准备一个包含26个英文字母的英文文件, HuffmanNode 类 每个结点都包含六项内容:权值、结点代表字母、字母的编码、左孩子、右孩子和父结点。 private double weight; //权值 private T word; // 字母 private HuffmanNode left; private HuffmanNode right; private HuffmanNode parent; String code; // 存储最后的编码 HuffmanTree 类 createTree方法用于构造树; public static HuffmanNode createTree

哈夫曼编码

可紊 提交于 2019-12-05 09:37:11
哈夫曼编码 任务要求 设有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x,y,z}。 给定一个包含26个英文字母的文件,统计每个字符出现的概率,根据计算的概率构造一颗哈夫曼树。 并完成对英文文件的编码和解码。 要求: (1)准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率 (2)构造哈夫曼树 (3)对英文文件进行编码,输出一个编码后的文件 (4)对编码文件进行解码,输出一个解码后的文件 (5)撰写博客记录实验的设计和实现过程,并将源代码传到码云 (6)把实验结果截图上传到云班课 哈夫曼编码 哈夫曼树的基本概念 哈夫曼(Huffman)树又称作最优二叉树,它是n个带权叶子结点构成的所有二叉树中,带权路径长度最小的二叉树。 “路径”就是从树中的一个结点到另一个结点之间的分支构成的部分,而分支的数目就是路径长度。 树的路径长度:就是从树根到每一结点的路径长度之和。 考虑带权的结点,结点的带权路径长度为:从该结点到树根之间的路径长度与结点上权的乘积。 树的带权路径长度WPL(weighted path length):树中所有叶子结点的带权路径长度之和。 假设一个有n个带权叶子结点的二叉树,其权值为{w1,w2,....wn},每个叶子结点带权wk,每个叶子的路径长度为 lk,则从根结点

Deep Compression

試著忘記壹切 提交于 2019-12-05 02:26:01
本文为Deep compression的论文笔记,相应的ppt及文字讲解 原论文《 Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman coding 》https://arxiv.org/abs/1510.00149 相关论文 深鉴科技FPGA2017最佳论文ESE Efficient speech recognition engine with sparse LSTM on FPGA论文详解 PipeCNN论文详解:用OpenCL实现FPGA上的大型卷积网络加速 韩松EIE:Efficient Inference Engine on Compressed Deep Neural Network论文详解 韩松博士毕业论文Efficient methods and hardware for deep learning论文详解 目录 一、摘要 意义 方法 作用 二、方法 2.1 剪枝 稀疏矩阵的存储 2.2 权值量化与共享 聚类方法 权值更新方法Fine-tune 意义 压缩率 量化没有降低数据精度 2.3 初始化权重的值 2.4 哈夫曼编码 可压缩性 哈夫曼编码 三、实验 四、结论 Deep compression是一篇关于模型压缩的论文

20182306 哈夫曼编码测试

会有一股神秘感。 提交于 2019-12-04 20:42:05
20182306 哈夫曼编码测试 实验内容 设有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x,y,z}。 给定一个包含26个英文字母的文件,统计每个字符出现的概率,根据计算的概率构造一颗哈夫曼树。 并完成对英文文件的编码和解码。 要求: (1)准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率 (2)构造哈夫曼树 (3)对英文文件进行编码,输出一个编码后的文件 (4)对编码文件进行解码,输出一个解码后的文件 (5)撰写博客记录实验的设计和实现过程,并将源代码传到码云 (6)把实验结果截图上传到云班课 哈夫曼树的理解 哈夫曼树是二叉树中很特别的一种,也是最优二叉树,通过某种权值来构造出哈夫曼二叉树,在这个二叉树中,只有叶子节点才是有效的数据节点,其他的非叶子节点是为了构造出哈夫曼而引入的! 哈夫曼编码是一个通过哈夫曼树进行的一种编码,一般情况下,以字符:‘0’与‘1’表示。编码的实现过程很简单,只要实现哈夫曼树,通过遍历哈夫曼树,规定向左子树遍历一个节点编码为“0”,向右遍历一个节点编码为“1”,结束条件就是遍历到叶子节点。 哈夫曼编码 构造一个结点类,定义好字符、权值、左结点、右结点、哈夫曼编码。 public class HuffmanNode implements Comparable

哈夫曼编码测试学习博客

别说谁变了你拦得住时间么 提交于 2019-12-04 14:23:00
原理:每次最小的两个数,组成左右子树,相加所得的数放回数列重新排序,再选出最小的两个数组成左右子树,和上一个分支的和相差太大的话就另组成一个树,自底向上构建。 这次上课所讲的哈夫曼编码,在实践中出现的问题主要有两个: 1、老师所讲的案例中两数相加后仍为最小,因此只需要一直插入右子树即可自底至顶编完整棵树,但在这次的树的构建中,出现了很多数字相加后处于数列中间的情况,让我不知所措。 2、我受到了不清晰的离散数学记忆的影响,记成了只能插入右边,导致0.07和0.08无法放在一起,只能和0.11另组成一棵树的叶,导致了最后的错误。 根据上课所讲的有关哈夫曼编码的知识重新写了一遍: 来源: https://www.cnblogs.com/shouko/p/11870010.html

哈夫曼编码测试实践错误分析

假如想象 提交于 2019-12-04 14:22:19
哈夫曼编码测试实践错误分析 错误情况 错解: 正解: 与答案的对比分析   最优二叉树的构建一般来说都是根据数组从小到大的顺序,从下往上排序。一个父结点就只有两个子结点,而且兄弟结点之间的大小差距应该尽可能小。如果数组中可以找得到差距够小的数字,就直接用数组中的数作为中间结点的兄弟结点(同时也是叶结点),   根据题目中的数据摆放顺序,0.07应该与0.08摆放在一起,之后的0.07+0.08(中间结点)=0.15(中间结点)与0.14比较接近适合放一起,而0.08+0.11=0.19(中间结点)为了遵循大数往上放、小数往下放的原则,如果代替0.14放在0.15的旁边,计算出来的WPL效益肯定不如0.14放在0.15(中间结点)旁边。因此0.08+0.11=0.19(中间结点)可以放在另外一个分支上。   接下来,根据差距小的数字放在一起做兄弟结点的原则,0.14+0.15(中间结点)=0.29(中间结点)与数组中的0.29刚好就可以放在一起,而剩下的0.23就可放在0.19旁边。这样一来数组内的所有数字都摆放完毕,再根据结点的数字计算中间结点的值并连接在一起即可。 来源: https://www.cnblogs.com/77599aa/p/11869981.html

哈夫曼编码及其解码

混江龙づ霸主 提交于 2019-12-04 04:14:54
添加注释版本: /* cout<<i<<endl<<" 结点 | data | weight | lchild | rchild | parent "<<endl; for(int i=1;i<=m;++i) { cout<<i<<" | "<<HT[i].data<<" | "<<HT[i].weight<<" | "<<HT[i].lchild<<" | "<<HT[i].rchild<<" | "<<HT[i].parent<<endl; } */ #include<iostream> #include<stdio.h> #include<string> #include<cstring> #include<algorithm> #define MAX 0x3f3f3f3f using namespace std; typedef struct { char data; int weight; int parent; int lchild; int rchild; bool tag; }Huffnode,*HuffmanTree; typedef struct { string *code;//存放字符的编码 char *data;//存放字符 int num;//存放一共有多少字符 }HuffmanCode; void DisplayHuffmanCode

哈夫曼编码

匿名 (未验证) 提交于 2019-12-03 00:21:02
In 1953, David A. Huffman published his paper "A Method for the Construction of Minimum-Redundancy Codes", and hence printed his name in the history of computer science. As a professor who gives the final exam problem on Huffman codes, I am encountering a big problem: the Huffman codes are NOT unique. For example, given a string "aaaxuaxz", we can observe that the frequencies of the characters 'a', 'x', 'u' and 'z' are 4, 2, 1 and 1, respectively. We may either encode the symbols as {'a'=0, 'x'=10, 'u'=110, 'z'=111}, or in another way as {'a'=1, 'x'=01, 'u'=001, 'z'=000}, both compress the