为了账号安全,请及时绑定邮箱和手机立即绑定

手撕哈夫曼算法

标签:
算法

Huffman 树,又称最优树,是一类带权路径长度最短的树,有着广泛的应用。
用处就是在编码的时候,可以缩小空间,提高利用率,本篇就是尝试自己完成Huffman编码。算法的实现步骤很简单:
(1)创建二叉树列表A,左右子树均为空
(2)选择列表A中权值最小的两个,组成新的二叉树,该树的权值为最小的两个之和
(3)在A中删除这两个树,将新的树加入列表A
(4)重复(2)和(3),直到F只含一棵树为止
在这里插入图片描述
实现代码如下:
该函数传递的List是已经从小到大排序好的了

package cn.caeser.demo.huffman;

import java.util.List;

public class HuffmanConversion {
	public static List<Tree> target;
	
	public static void convert(List<Tree> treeList){
		target=treeList;
		while(target.size()>=2) {
			Tree former=target.get(0);
			Tree later=target.get(1);
			Tree treeItem=new Tree();
			treeItem.setLeftTree(former);
			treeItem.setRightTree(later);
			treeItem.setPriorityValue(former.getPriorityValue()+later.getPriorityValue());
			target.remove(0);
			target.remove(0);
			int i=0;
			for (i=0; i < target.size(); i++) {
				if(treeItem.getPriorityValue()<target.get(i).getPriorityValue()) {
					target.add(i, treeItem);
					i=-1;
					break;
				}
			}
			if(i==target.size()) {
				//如果循环结束时都没有执行add操作
				//表示当前treeItem的priorityValue是最大的
				target.add(treeItem);
			}
			if(target.size()==0) {
				//树列表为空时表示已经生成最后一个树
				target.add(treeItem);
				break;
			}
		}
	}
}

面试的时候总会有各种算法题,如何快速的实现算法,是自己需要仔细考虑的,死记硬背不是很好的选择,加上自己的理解,说不定给自己的面试情况加上好几分。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
30
获赞与收藏
154

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消