Java基础复习笔记09数据结构-哈夫曼树.docVIP

Java基础复习笔记09数据结构-哈夫曼树.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

飞扬的岁月 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档