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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦