• 1.Huffman树

今天复习Huffman树。依稀记得自己被Huffman树虐的经历。还记得是7月份,我刚开始看数据结构与算法,根本看不懂Huffman树的操作。后来我终于悟出了Huffman树是怎么操作的了,但是被C艹的指针虐:用C艹的CArray存贮结点,但是读出来是空的。这是因为当时使用了“CBTtree node;”这样的声明方式,因为C艹的变量的生命周期,一个语句块或者一个循环结束后node就被释放了。所以改为“ CBTtree * node = new CBTtree; ”就没有问题了。

后面又出现了一个逻辑盲区,就是在对CArray进行删除结点操作的时候,没有 “ if(pos[0]<pos[1]) pos[1]--; ”语句,导致删除了错误的结点或者越界错误。

Java code:

     void Huffman(int []nums){
int len=nums.length;
int i;
List<BTNode> nodes=new ArrayList<BTNode>();
for(i=0;i<len;i++){
BTNode node=new BTNode(nums[i]);
nodes.add(node);
}
while(nodes.size()>1){
int pos[]={0,0};
int min[]={0x7FFFFFFF,0x7FFFFFFF}; //index=0: 最小 , index=1: 次小
for(i=0;i<nodes.size();i++){
int value=Integer.parseInt(nodes.get(i).data);
if(value<min[0]){
min[1]=min[0];//传递,最小值被占据,理应把原来的最小值传给次小值
pos[1]=pos[0];
min[0]=value;
pos[0]=i;
}else if(value<min[1]){//通过 else if 语句,说明次小值是大于最小值,但是小于原次小值的
min[1]=value;
pos[1]=i;
}
}
//将两个最小的节点取出,用他们的之的和形成一个新的节点
BTNode parent=new BTNode();
parent.data=String.valueOf(min[0]+min[1]);
parent.lChild=nodes.get(pos[0]);
parent.rChild=nodes.get(pos[1]);
//将两个节点取出
nodes.remove(pos[0]);
if(pos[0]<pos[1]) pos[1]--;//☆☆如果出现这个逻辑盲点,将导致代码出错
nodes.remove(pos[1]);
nodes.add(parent);
}
root=nodes.get(0);
}

输入:5,3,7,8,11,14,23,29

输出:


  • 2.Huffman编码

前缀编码:任一个编码都不是另一个字符编码的前缀

     void HuffmanCode(BTNode parent,String code){
if(parent.lChild==null) {System.out.println(parent.data+" : "+code);return;}
else HuffmanCode(parent.lChild,code+"0");
if(parent.rChild==null) {System.out.println(parent.data+" : "+code);return;}
else HuffmanCode(parent.rChild,code+"1");
}

输入:

5,3,7,8,11,14,23,29

输出:

Huffman树与Huffman编码的更多相关文章

  1. huffman树即Huffma编码的实现

    自己写的Huffman树生成与Huffman编码实现 (实现了核心功能 ,打出了每个字符的huffman编码 其他的懒得实现了,有兴趣的朋友可以自己在我的基础增加功能 ) /* 原创文章 转载请附上原 ...

  2. 数据结构(二十七)Huffman树和Huffman编码

    Huffman树是一种在编码技术方面得到广泛应用的二叉树,它也是一种最优二叉树. 一.霍夫曼树的基本概念 1.结点的路径和结点的路径长度:结点间的路径是指从一个结点到另一个结点所经历的结点和分支序列. ...

  3. Huffman树的编码译码

    上个学期做的课程设计,关于Huffman树的编码译码. 要求: 输入Huffman树各个叶结点的字符和权值,建立Huffman树并执行编码操作 输入一行仅由01组成的电文字符串,根据建立的Huffma ...

  4. Huffman树与编码

    带权路径最小的二叉树称为最优二叉树或Huffman(哈夫曼树). Huffman树的构造 将节点的权值存入数组中,由数组开始构造Huffman树.初始化指针数组,指针指向含有权值的孤立节点. b = ...

  5. Huffman树的构造及编码与译码的实现

    哈夫曼树介绍 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数) ...

  6. 数据结构与算法(周鹏-未出版)-第六章 树-6.5 Huffman 树

    6.5 Huffman 树 Huffman 树又称最优树,可以用来构造最优编码,用于信息传输.数据压缩等方面,是一类有着广泛应用的二叉树. 6.5.1 二叉编码树 在计算机系统中,符号数据在处理之前首 ...

  7. Huffman树及其编解码

    Huffman树--编解码 介绍:   Huffman树可以根据输入的字符串中某个字符出现的次数来给某个字符设定一个权值,然后可以根据权值的大小给一个给定的字符串编码,或者对一串编码进行解码,可以用于 ...

  8. Huffman树进行编码和译码

    //编码#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> ...

  9. [数据结构与算法]哈夫曼(Huffman)树与哈夫曼编码

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

随机推荐

  1. 关于i7 8700以上系列主机,安装虚拟机Win7下连接U盘,故障处理的补充说明

    正如前文“虚拟机下怎么连接U盘,如何使用U盘?一策书(湘岳阳万江波)的随笔”所言,我在win10下的虚拟机win7(i7 9700),而且听说了是不支持Win7的,其原因是不支持USB的驱动问题. 我 ...

  2. Python 学习:常用函数整理

    整理Python中常用的函数 一,把字符串形式的list转换为list 使用ast模块中的literal_eval函数来实现,把字符串形式的list转换为Python的基础类型list from as ...

  3. R数据挖掘 第一篇:聚类分析(划分)

    聚类是把一个数据集划分成多个子集的过程,每一个子集称作一个簇(Cluster),聚类使得簇内的对象具有很高的相似性,但与其他簇中的对象很不相似,由聚类分析产生的簇的集合称作一个聚类.在相同的数据集上, ...

  4. 《 .NET并发编程实战》阅读指南 - 第9章

    先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.

  5. css+js实现自动伸缩导航栏

    用css+js实现自动伸缩导航栏 需要达到的效果: 默认首页选中样式 设置鼠标滑过效果:颜色变化(#f60),宽度变化,字体变化 所涉及的知识点: 布局:float css: 元素状态切换(displ ...

  6. 类初始化应用(class初始化值用函数改变与增添)

    class Dataset(object): def __init__(self): self.image_info = [] # 初始化一个列表 def add_image(self, source ...

  7. javascript getElementsByClassName扩展函数

    代码: function getElementsByClassName(){ if(!arguments[0]){return []};//未指定任何参数,直接返回 var args=argument ...

  8. Java 关于函数式接口与Lambda表达式之间的关系

    java是一种面向对象的语言,java中的一切都是对象,即数组,每个类创建的实例也是对象.在java中定义的函数或方法不可能完全独立,也不能将方法函数作为参数或返回值给实例. 在java7及以前,我们 ...

  9. 轻量级.Net ORM SqlSuger项目实战

    SqlSuger,清垃圾ORM实战例子. //添加引用 using SqlSugar; //在构造函数中实例化SqlSuger clinet = new SqlSugarClient(new Conn ...

  10. 【学习笔记】PYTHON语言程序设计(北理工 嵩天)

    1 Python基本语法元素 1.1 程序设计基本方法 计算机发展历史上最重要的预测法则     摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu.内存.硬盘.电子产品价格等都遵 ...