霍夫曼树的创建

前段时间因为两个实习的原因将写博客耽搁了下来,现在因为实习事情不多,我就开始继续写了。

其实,看过其他人的博客,书籍以及自身理解后,我认为霍夫曼树可以简化代码的储存,让频率高的字段以更短的字符储存,而频率低的字段用更长的字符储存。最终在多次重复中实现简化压缩。(这个别人讲的很清楚了) 这里我推荐一个小伙伴的博客,他写的很详细。https://blog.csdn.net/qq_44941745/article/details/107370818

创建霍夫曼树,特点就是自下而上的建立,在叶子节点储存字段数据,并从下而上直到建立最后的父节点
而霍夫曼树的建立规则,实际是以出现频率作比较的优先队列的添加与删除规则。并不需要十分刻意去记,只要把代码写出来自然就会知道了。

那么如何对一个字符串创建霍夫曼树呢?

节点的建立如下

public class HTreeNode implements Comparable<HTreeNode>{
   
	public Integer count;
	public char chars;
	public String code;
	HTreeNode parent;
	HTreeNode left;
	HTreeNode right;
	int s = 0;
	public HTreeNode(int count, char chars) {
   
		this.count = count;
		this.chars = chars;
		s = 1;
	}
	
	public HTreeNode() {
   
		
	}
	@Override
	public int compareTo(HTreeNode h) {
   
		return this.count.compareTo(h.count);
	}
	
}



1 用两个数组,分别保留对应的字符,以及该字符出现的频率

public class Transfer {
   
		int[] count;//频率
		char[] chars;//字符
		public void transfer(String s) {
   
			int nums = 0;
			int times = 0;
			char[] chars = {
   'a','b','c','d','e','f','g','h','i','j','k','l','m','n'
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值