- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java基础复习笔记09数据结构-哈夫曼树
刘岩
Email:suhuanzheng7784877@163.com
哈夫曼树
哈夫曼树也称作最优二叉树,当树中的节点带了权重信息了,带权路径长度最小的二叉树叫做最优二叉树。带权路径长度=sum(权重*度)。sum代表每个节点的之和。加入有如下带权重的节点。
权重分别是1、5、8、4。那么关于这些零散的节点,最优二叉树该如何构建呢?
首先先将离散节点从小到大升序排序
第二从离散节点中在挑选排序前两个节点当做一个新的父节点的两个子节点
第三从离散的节点中去除刚刚使用的两个节点
第四重复第二和第三步骤,直到所有离散节点剔除完毕。哈夫曼树就构建完成
用图形演示过程如下
可以看出所有的叶子节点就是之前的离散节点,如果在采用广度遍历法遍历此树。那么遍历的过程实际上就是最短遍历路径的遍历过程
哈夫曼树的使用场景
其实哈夫曼树使用场景还真不少,例如apache负载均衡的按权重请求策略的底层算法、咱们生活中的路由器的路由算法、利用哈夫曼树实现汉字点阵字形的压缩存储/Article/CJFDTotal-LYGY200504016.htm)、快速检索信息等等底层优化算法,其实核心就是因为目标带有权重、长度远近这类信息才能构建哈夫曼树模型。
实现哈夫曼树
要想实现哈夫曼树其实就是将一堆零散的节点信息构建成一颗最优二叉树,之后再按广度优先遍历它。
实现哈夫曼树其实就是构建哈夫曼树的过程,原理其实上面已经说了,这里再重复一下。
首先先将离散节点从小到大升序排序
第二从离散节点中在挑选排序前两个节点当做一个新的父节点的两个子节点
第三从离散的节点中去除刚刚使用的两个节点
第四重复第二和第三步骤,直到所有离散节点剔除完毕。哈夫曼树就构建完成
代码以及测试程序如下
package dateStructer.tree.huffmanTree;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
/**
* 哈夫曼树
*
* @author liuyan
*/
public class HuffmanTree {
/**
* 节点实体
*/
public static class NodeT {
// 数据
T data;
// 权重
int power;
NodeT leftNode;
NodeT rightNode;
public Node(T data, int power) {
this.data = data;
this.power = power;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return [data: + data + power: + power + ];
}
@SuppressWarnings(unchecked)
public boolean compareTo(Node node) {
if (this.power node.power) {
return true;
}
return false;
}
}
/**
* 将集合将序排序
*
* @param T
* @param E
*
* @param list
*/
@SuppressWarnings(unchecked)
public static void sort(ListNode list) {
for (int i = 0; i list.size() - 1; i++) {
for (int j = i + 1; j list.size(); j++) {
if (list.get(i).compareTo(list.get(j))) {
// 交换数组中的元素位置
Node node = list.get(i);
list.set(i, list.get(j));
list.set(j, node);
}
}
}
}
/**
* 创建哈夫曼树
*
* @param list
* @return
*/
@SuppressWarnings(unchecked)
public static Node createHuffmanTree(ListNode list) {
w
您可能关注的文档
最近下载
- 2025年中国邮政集团有限公司吉林省分公司校园招聘笔试模拟试题及完整答案详解.docx VIP
- 2024年《汽轮机本体检修》职业技能鉴定知识考试必备题库及答案(共190题).docx VIP
- (名师原创)《我能行》主题班会.ppt VIP
- 2022年初中物理培优(竞赛)及高中自主招生专题训练:第02章声现象(含解析).pdf VIP
- 三式簿记和收益动量 (美)伊尻雄治著娄尔行译.pdf VIP
- 华荣QJZ-2×□SF煤矿风机用隔爆兼本质安全型双电源真空电磁起动器.doc
- 《嗨,你好》幼儿园小班课程PPT课件.pptx VIP
- 2025年中国邮政集团有限公司吉林省分公司校园招聘笔试模拟试题及答案解析.docx VIP
- 可穿戴设备在睡眠数据采集中的应用.pptx VIP
- AI人工智能软件使用课件.pptx VIP
文档评论(0)