java中霍夫曼树的示例分析(java,开发技术)

时间:2024-04-29 13:13:24 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

霍夫曼树

一、基本介绍

java中霍夫曼树的示例分析

二、霍夫曼树几个重要概念和举例说明

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

构成霍夫曼树的步骤

java中霍夫曼树的示例分析

举例:以arr = {1 3 6 7 8 13 29}

java中霍夫曼树的示例分析

publicclassHuffmanTree{ publicstaticvoidmain(String[]args){ int[]arr={13,7,8,3,29,6,1}; Noderoot=createHuffmanTree(arr); preOrder(root); } //编写一个前序遍历的方法 publicstaticvoidpreOrder(Noderoot){ if(root!=null){ root.preOrder(); }else{ System.out.println("树是空树,无法遍历~~"); } } //创建赫夫曼树的方法 /** *@paramarr需要创建成霍夫曼树的数组 *@return创建好后的霍夫曼树的root节点 */ publicstaticNodecreateHuffmanTree(int[]arr){ //第一步为了操作方便 //1.遍历arr数组 //2.将arr的每个元素构成一个Node //3.将Node放入到ArrayList中 List<Node>nodes=newArrayList<Node>(); for(intvalue:arr){ nodes.add(newNode(value)); } while(nodes.size()>1){ //排序从小到大 Collections.sort(nodes); System.out.println("nodes="+nodes); //取出根节点权值最小的两颗二叉树 //注意:如果是从大到小排列的:就应该取倒数第一个和倒数第二个 //(1)取出权值最小的节点(二叉树) NodeleftNode=nodes.get(0); //(2)取出权值第二小的节点(二叉树) NoderightNode=nodes.get(1); //(3)构建一颗新的二叉树 Nodeparent=newNode(leftNode.value+rightNode.value); parent.left=leftNode; parent.right=rightNode; //(4)从ArrayList删除处理过的二叉树 nodes.remove(leftNode); nodes.remove(rightNode); //(5)将parent加入到nodes nodes.add(parent); } //返回赫夫曼树的root节点 returnnodes.get(0); }}//创建节点类//为了让Node对象支持排序Collections集合排序//让Node实现Comparable接口classNodeimplementsComparable<Node>{ intvalue;//节点权值 Nodeleft;//指向左子节点 Noderight;//指向右子节点 publicNode(intvalue){ this.value=value; } //写一个前序遍历 publicvoidpreOrder(){ System.out.println(this); if(this.left!=null){ this.left.preOrder(); } if(this.right!=null){ this.right.preOrder(); } } @Override publicStringtoString(){ return"Node[value="+value+"]"; } @Override publicintcompareTo(Nodeo){ //表示从小到大排列 returnthis.value-o.value; }}

霍夫曼编码

一、基本介绍

java中霍夫曼树的示例分析

二、原理剖析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

6)说明:

原来长度是359,压缩了(359 - 133) / 359 = 62.9%

此编码满足前缀编码,即字符的编码都不能是其他字符编码的前缀。不会造成匹配的多义性;

霍夫曼编码是无损的压缩处理方案

注意:

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

霍夫曼编码压缩文件注意事项

1)如果文件本身就是经过压缩处理的,那么使用赫夫曼编码在压缩效率不会有明显变化,比如视频,ppt等等文件

2)赫夫曼编码是按字节来处理的,因此可以处理所有的文件(二进制文件、文本文件)

3)如果一个文件中的内容,重复的数据不多,压缩效果也不会很明显。

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:java中霍夫曼树的示例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Python怎么导入自己编写的py文件下一篇:

12 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18