`
csb
  • 浏览: 4214 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

哈弗曼树

    博客分类:
  • java
 
阅读更多
创建哈弗曼树的首要就是要有思路:
1.要把给定的数组转化成节点数组保存
2.对节点数组进行排序,按升序的方式排列
3.构建哈弗曼树
4.对哈弗曼树进行编码,左0右1
package cn0421hafuman;

public class Hafuman {

	/**构建哈弗曼树
	 * @param args
	 */
	int[] data;
	
	public Hafuman(int[] date){
		this.data=date;
	}
	
	//将数组转化成节点数组
	public MyNode[] toMyNodeArray(){
		MyNode[] nodes=new MyNode[data.length];
		for(int i=0;i<nodes.length;i++){
			MyNode node=new MyNode();
			node.date=data[i];
			nodes[i]=node;
		}
		return nodes;
	}
	
	//对节点数组进行冒泡排序(由大到小的循序)
	public void maopao(MyNode[] nodes){
		for(int i=0;i<nodes.length;i++){
			for(int j=i+1;j<nodes.length;j++){
				if(nodes[i].date>nodes[j].date){
					MyNode tem=nodes[j];
					nodes[j]=nodes[i];
					nodes[i]=tem;
				}
			}
		}
	}
	
	//创建哈弗曼树
	public MyNode creatHfmTree(){
		
		MyNode[] nodes = toMyNodeArray();
		
		while(nodes.length>1){
			this.maopao(nodes);
			
			MyNode node1=nodes[0];
			MyNode node2=nodes[1];
			MyNode node3=new MyNode();
			node3.date=node1.date+node2.date;
			node3.left=node1;
			node3.right=node2;
			MyNode[] nodes1=new MyNode[nodes.length-1];
			nodes1[0]=node3;
			for(int i=0;i<nodes.length-2;i++){
				nodes1[i+1]=nodes[i+2];
			}
			//this.maopao(nodes1);
			nodes=nodes1;
		}
		return nodes[0];
	}
	
	//打印哈弗曼树
	public void printhfm(MyNode node,String code){
		if(node.left==null&&node.right==null){
			System.out.println(node.date+" code:"+code);
		}
		else {
			if(node.left!=null)
				printhfm(node.left,code+"0");
			if(node.right!=null)
				printhfm(node.right,code+"1");
			
		}
	}
}
  • 大小: 6.3 KB
分享到:
评论

相关推荐

    关于哈弗曼树的一个算法

    哈弗曼树,又称最优二叉树,是一种带权路径长度最短的二叉树,由美国计算机科学家哈弗曼在1952年提出,主要用于数据编码,特别是在数据压缩领域有着广泛的应用。哈弗曼树通过构建一个特殊的二叉树结构,可以使得树中...

    哈弗曼树的建立 C++代码

    ### 哈弗曼树(Huffman Tree)的构建与C++实现 #### 知识点一:哈弗曼树的基本概念 哈弗曼树,又称最优二叉树,是一种带权路径长度最短的二叉树,在数据压缩、编码等领域有广泛应用。哈弗曼树的构建基于贪心算法...

    哈弗曼树的代码

    哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树

    哈弗曼树C++源代码

    哈弗曼树(Huffman Tree),也称为最优二叉树,是一种特殊的二叉树,用于数据编码和解码,尤其在数据压缩领域有着广泛应用。它是由哈弗曼在1952年提出的一种构建方法,旨在最小化带权路径长度(WPL),即树中所有...

    哈弗曼树及编码 C语言实现

    在C语言下实现哈弗曼树的创建并进行哈弗曼编码,同时输出哈弗曼编码。

    哈弗曼树进行压缩编码

    哈弗曼树(Huffman Tree),也称为最优二叉树,是一种特殊的二叉树结构,广泛应用于数据压缩领域。在信息编码中,哈弗曼编码是一种可变长度的前缀编码方式,它根据字符出现频率构建哈弗曼树,使得出现频率高的字符...

    c++哈弗曼树的解码与编码

    哈弗曼编码是一种高效的数据压缩方法,它利用了字符出现频率的不同来构建最优的二叉树,即哈弗曼树。在哈弗曼编码中,出现频率高的字符对应的编码长度较短,反之则较长,从而使得频繁出现的字符在编码过程中占用较少...

    哈弗曼树的建立及哈弗曼编码的生成 c++实现

    哈弗曼树(Huffman Tree),也称为最优二叉树,是数据结构中的一种特殊二叉树,主要用于数据的编码和解码,特别是在文本压缩中起到关键作用。它通过一种贪心策略构建,使得带权路径长度最短,从而达到编码效率最高。...

    数据结构之哈弗曼树实现压缩

    哈弗曼树(Huffman Tree),也称为最优二叉树,是数据结构中的一种特殊树形结构,主要用于数据编码和解码,特别是用于数据压缩。它通过构建一棵权值最小的二叉树来达到最高效的编码效果。在哈弗曼树中,频率较高的...

    C++哈弗曼树

    在IT领域,哈弗曼树(Huffman Tree)是一种特殊的二叉树,也称为最优二叉树或最小带权路径长度树(Minimum Weighted Path Length Tree)。它在数据压缩、编码优化等方面有广泛应用,比如在文件存储和传输时,通过...

    数据结构实验 哈弗曼树及其编码译码

    哈弗曼树是一种特殊的二叉树,用于在数据压缩中创建高效的编码方案,尤其是当数据中某些元素出现的频率远高于其他元素时。哈弗曼树的构建过程基于哈夫曼编码,它是一种前缀编码,即任何字符的编码都不会是其他字符...

    用C语言实现哈弗曼树(数据结构课程设计)

    哈弗曼树,又称最优二叉树或最小带权路径长度树,是一种特殊的二叉树,广泛应用于数据压缩、文件编码等领域。在数据结构课程设计中,使用C语言实现哈弗曼树是一个经典且富有挑战性的任务。下面将详细介绍如何用C语言...

    用C++语言写的关于用哈弗曼树编码问题的程序

    哈弗曼编码是一种高效的数据压缩方法,它利用了字符出现频率的不同来构建最优的二叉树,也称为哈弗曼树。在这个C++程序中,我们将会深入理解哈弗曼编码的原理及其在实际编码过程中的应用。 首先,我们要知道哈弗曼...

    基于哈弗曼树的字符统计

    哈弗曼树(Huffman Tree)是一种特殊的二叉树,常用于数据编码,特别是在字符压缩和统计中。在这个项目中,“基于哈弗曼树的字符统计”是一个实际应用的数据结构示例,它使用哈弗曼编码技术来分析文本中的字符频率,...

    哈弗曼树解压与压缩

    用哈弗曼树进行文件压缩与解压,学习数据结构时可结合进行更深刻理解

    C++哈弗曼树!哈弗曼树

    哈弗曼树,又称最优二叉树或最小带权路径长度树,是数据结构领域中的一个重要概念,尤其在数据编码和压缩中有着广泛的应用。它是一种特殊的二叉树,其特性是任何节点的两个子节点都是空节点或者权值较小的节点在左,...

    数据结构哈弗曼树课程设计

    在这个课程设计中,我们重点关注的是哈弗曼树(Huffman Tree),一种在数据压缩领域广泛应用的数据结构。哈弗曼树,也称为最优二叉树,是通过哈弗曼编码实现数据压缩的关键工具。 哈弗曼树是一种特殊的二叉树,其...

    构造哈弗曼树并做哈弗曼编码

    构造一哈弗曼树并进行哈弗曼编码的源代码。

    哈弗曼树的生成(编码)

    哈弗曼树,又称霍夫曼树,是一种特殊的二叉树,主要用于数据的高效编码,尤其是在数据压缩领域有着广泛的应用。这种树结构的特点是:树中任一节点的两个子节点都是子树中权值最小的两个节点。权值在这里通常代表字符...

Global site tag (gtag.js) - Google Analytics