`
菜刀兔兔兔
  • 浏览: 16740 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

哈夫曼树

 
阅读更多

          

 

     国庆七天过去了。。哈夫曼本应该是国庆节之前的任务,可是我拖到现在才写完皱眉。。

 

     切入正题:哈夫曼编码~~~天真

 

     刚开始写的很晕呼呼的,不知道从何入手,然后多亏了大辉的提点,我开始找到了思路。感谢大辉~酷

 

     我的哈夫曼树~~有好几个函数

 

     1、输入字符串。。。。。不多说了

 

     2、统计字符串

 

               我用的方法是循环遍历那个输入的字符串,把他们放到一个Node的队列里面,如果遍历到重复的字符,就把那个字符所在结点的Amount加一。但是我遇到好几个问题。刚开始我统计字符串的时候,比如说abbcbb,那就会出现两个b结点,只要相同的字符中间还有字符隔着,就不会在原先的结点里把Amount加一,后来经过翔同学的细心检查,发现是我在进行是否有相同元素判断的时候忘记加了break。多谢翔同学酷。还有个问题,我现在也不知道为什么,就是第一次遇到这个字母的时候,他的Amount得设为0,而不是1,否则出来的结果会比实际总数多1。

 

          

	//对输入的字符串进行统计
	public void Summary(String string){
	
		NL = new LinkedList<Node>();
		//把第一个字母放到结点里
		char c = string.charAt(0);
		
		Node node = new Node();	
		
		node.setContent(c);
		
		node.setAmount(0);
		
		NL.add(node);
		//遍历剩下的字母
		for(int i =0;i<string.length();i++){
			
			c = string.charAt(i);
			
			for(int j =0;j<NL.size();j++){
				
				char t = NL.get(j).getContent();
				
				//如果有重复的元素,则结点里的总数加一
				if(c==t){
					
					NL.get(j).setAmount(NL.get(j).getAmount()+1);	
					break;
				
				}
				
				//遍历到底并且还是没有重复的元素
				else if(j==NL.size()-1){
					Node n = new Node();	
					
					n.setContent(c);
					
					n.setAmount(0);
					
					NL.add(n);
				}
			}	
			}	
	}

 

          

 

     3、排序

 

                    我用了冒泡排序,简单便捷的排序~你值得拥有。尴尬

 

 

     4、建树

 

                 建树什么的太头疼了。建了好几遍都错。后来发现不是我建树的问题。。是我遍历的问题。所以才会让输出结果有问题。。所以建树也没什么问题了。。

 

                 我是新建了一个名为‘#’的结点,让他的Amount等于两个结点的和,然后给他赋了左右孩子。然后把他加到队列里面再进行排序。

 

   5、编码

 

                  编码其实主要就是遍历,刚开始思路不清晰,不知道遍历什么乱七八糟的。所以输出来也不知道是什么东西。后来理清思路,用中序遍历遍历了那个树

	public boolean Code_1(Node root,String s){
		
		
		if (root!=null) {
			
			if (Code_1(root.getLchildNode(),s+'0')) {
				
					root.getLchildNode().setCode(s+'0');
					
				if (Code_1(root.getRchildNode(),s+'1')) {
					
					root.getRchildNode().setCode(s+'1');	
					
						return true;			
				}
				}
		}else {
			return false;
		}
		
		return true;
		
		}

 

   

 

分享到:
评论

相关推荐

    哈夫曼树 课程设计 实验报告

    哈夫曼树是一种在计算机科学中广泛使用的数据结构,尤其在数据压缩领域有着重要的应用。本实验报告主要探讨了如何运用哈夫曼树对文本文件进行编码和解压缩,以实现无损数据压缩。 首先,我们需要理解哈夫曼树的基本...

    哈夫曼树压缩算法实现

    哈夫曼树(Huffman Tree),也称为最优二叉树,是数据压缩领域中的一个重要概念。它是基于贪心策略的一种数据结构,用于构建一种特殊的二叉树,使得带权路径长度最短,从而达到编码效率最高。哈夫曼树的核心思想是...

    数据结构哈夫曼树PPT学习教案.pptx

    "数据结构哈夫曼树PPT学习教案.pptx" 哈夫曼树是一种特殊的二叉树,它的带权路径长度最小。哈夫曼树的构造是数据结构中的一种重要算法,广泛应用于数据压缩、编码和决策树等领域。 一、基本术语 在哈夫曼树中,...

    哈夫曼树及哈夫曼编码数据结构实验报告

    哈夫曼树是一种特殊的二叉树,用于解决数据编码和压缩问题,特别是在数据通信和文件压缩领域广泛应用。哈夫曼编码是一种高效的前缀编码方法,它根据数据出现频率分配最短的二进制码,频繁出现的字符拥有较短的编码,...

    数据结构课程设计_哈夫曼树

    数据结构课程设计的目标是让学生能够灵活运用所学的数据结构知识,特别是哈夫曼树这一重要概念,来解决实际问题。哈夫曼树是一种特殊的二叉树,常用于数据压缩和编码,通过构建最小带权路径长度的二叉树,使得频率高...

    数据结构 哈夫曼树

    数据结构中的哈夫曼树(Huffman Tree),也称为最优二叉树,是一种特殊的二叉树,主要用于数据的编码压缩。哈夫曼树是通过哈夫曼编码(Huffman Coding)来实现的,这是一种用于无损数据压缩的算法。在这个算法中,...

    C语言实现哈夫曼树的构建

    哈夫曼树的构建与C语言实现 哈夫曼树是一种特殊的二叉树,它的权值越小,越靠近根节点。哈夫曼树的构建是数据压缩和编码的重要组件。下面是哈夫曼树的构建与C语言实现的相关知识点: 一、哈夫曼树的定义 哈夫曼...

    哈夫曼树与哈夫曼编码

    哈夫曼树与哈夫曼编码是数据结构和算法领域中的一个重要概念,广泛应用于数据压缩、文本编码以及优先队列等场景。哈夫曼编码是一种特殊的前缀编码方法,能够为字符提供一种高效的二进制表示,使得频繁出现的字符具有...

    数据结构实验二哈夫曼树及哈夫曼编码译码的实现

    哈夫曼树及哈夫曼编码译码的实现 哈夫曼树是一种特殊的二叉树,它的每个节点的权重是其所有子节点的权重之和。哈夫曼树的应用非常广泛,如数据压缩、编码、译码等。 哈夫曼树的存储结构 哈夫曼树的存储结构可以...

    哈夫曼树应用 从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上;

    从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树并将它存于文件hfmTree中.将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上; 2.利用已经建好的哈夫曼树(如不在内存,则从文件htmTree中读入...

    数据结构 哈夫曼树 上机实验

    ### 数据结构:哈夫曼树上机实验 #### 实验目的 本次实验旨在通过实际编程操作,加深学生对哈夫曼树(又称最优二叉树)的理解与掌握,熟悉哈夫曼树的构造过程及其应用。 #### 实验背景 哈夫曼树是一种带权路径长度...

    哈夫曼树的基本操作

    根据给定的文件信息,我们可以深入探讨哈夫曼树(Huffman Tree)的基本操作与实现。哈夫曼树是一种在编码领域广泛应用的数据结构,主要用于数据压缩中的编码算法,特别是无损数据压缩。以下是对该代码及其功能的详细...

    哈夫曼树的编译码器.docx

    哈夫曼树的编译码器 哈夫曼树是一种特殊的二叉树,它的叶子结点权值和内部结点权值的关系满足某些特定的条件,常用于数据压缩和编码。在本文中,我们将使用 C 语言实现哈夫曼树的编译码器,包括建立哈夫曼树、...

    哈夫曼树的建立(根据输入的权值,建立一棵哈夫曼树)

    哈夫曼树是一种特殊的二叉树,也称为最优二叉树或最小带权路径长度树。在信息编码领域,哈夫曼树常用于创建哈夫曼编码,这是一种用于数据压缩的有效方法。它通过构建一种特殊的树结构,使得树中每个叶子节点代表一个...

    哈夫曼树的实现

    根据给定的信息,本文将详细解析哈夫曼树的实现及其相关知识点,包括类的定义、构造过程以及编码方法。 ### 哈夫曼树的基本概念 哈夫曼树(Huffman Tree),又称最优二叉树,是一种带权路径长度最短的二叉树,在...

    建哈夫曼树 实现哈夫曼编码

    哈夫曼树(Huffman Tree)和哈夫曼编码(Huffman Coding)是数据压缩领域中的基础算法,它们主要用于无损数据压缩。哈夫曼编码是一种可变长度的前缀编码,通过为每个字符分配一个唯一的二进制码,使得出现频率高的...

    C语言编码哈夫曼树

    void HuffmanCoding(HuffmanTree &HT,HuffmanCode &HC,int *w,int num)//w存放n个字符的权值(均&gt;0),构造哈夫曼树HT,并求出n个字符的哈弗曼编码HC { int i,m,c,s1,s2,start,f; HuffmanTree p; char* cd; if...

    哈夫曼树程序设计问题

    哈夫曼树程序设计问题 哈夫曼树是一种特殊的二叉树,它的每个节点的权重都是其左右子树的权重之和。哈夫曼树的主要应用是用于数据压缩,特别是文本压缩。哈夫曼树的构建过程是从叶子节点开始,逐渐构建树形结构,...

    哈夫曼树压缩解压C++代码

    哈夫曼树(Huffman Tree),也称为最优二叉树,是数据压缩中的一种关键算法。它是基于贪心策略构建的,用于实现哈夫曼编码(Huffman Coding),这是一种无损数据压缩方法。在C++中实现哈夫曼树压缩与解压涉及到几个...

Global site tag (gtag.js) - Google Analytics