继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

手撕哈夫曼算法

Caeser110
关注TA
已关注
手记 139
粉丝 30
获赞 154

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;
			}
		}
	}
}

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

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP

相关阅读

手撕哈夫曼算法