iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java中霍夫曼树的示例分析
  • 607
分享到

java中霍夫曼树的示例分析

2023-06-21 20:06:04 607人浏览 安东尼
摘要

这篇文章主要介绍了java中霍夫曼树的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。霍夫曼树一、基本介绍二、霍夫曼树几个重要概念和举例说明 构成霍夫曼树的步

这篇文章主要介绍了java中霍夫曼树的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

霍夫曼树

一、基本介绍

java中霍夫曼树的示例分析

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

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

 构成霍夫曼树的步骤

java中霍夫曼树的示例分析

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

java中霍夫曼树的示例分析

public class HuffmanTree {public static void main(String[] args) {int[] arr = { 13, 7, 8, 3, 29, 6, 1 };node root = createHuffmanTree(arr);preOrder(root);}// 编写一个前序遍历的方法public static void preOrder(Node root) {if (root != null) {root.preOrder();} else {System.out.println("树是空树,无法遍历~~");}}// 创建赫夫曼树的方法public static Node createHuffmanTree(int[] arr) {// 第一步为了操作方便// 1.遍历 arr 数组// 2.将 arr 的每个元素构成一个Node// 3.将Node 放入到ArrayList中List<Node> nodes = new ArrayList<Node>();for (int value : arr) {nodes.add(new Node(value));}while (nodes.size() > 1) {// 排序从小到大Collections.sort(nodes);System.out.println("nodes = " + nodes); // 取出根节点权值最小的两颗二叉树//注意:如果是从大到小排列的:就应该取倒数第一个和倒数第二个// (1) 取出权值最小的节点(二叉树)Node leftNode = nodes.get(0);// (2) 取出权值第二小的节点(二叉树)Node rightNode = nodes.get(1);// (3) 构建一颗新的二叉树Node parent = new Node(leftNode.value + rightNode.value);parent.left = leftNode;parent.right = rightNode;// (4) 从ArrayList删除处理过的二叉树nodes.remove(leftNode);nodes.remove(rightNode);// (5) 将parent加入到nodesnodes.add(parent);}// 返回赫夫曼树的root节点return nodes.get(0);}}//创建节点类//为了让Node对象支持排序Collections集合排序//让Node实现Comparable接口class Node implements Comparable<Node> {int value;// 节点权值Node left;// 指向左子节点Node right;// 指向右子节点 public Node(int value) {this.value = value;}// 写一个前序遍历public void preOrder() {System.out.println(this);if (this.left != null) {this.left.preOrder();}if (this.right != null) {this.right.preOrder();}}@Overridepublic String toString() {return "Node [value=" + value + "]";}@Overridepublic int compareTo(Node o) {// 表示从小到大排列return this.value - o.value;}}

霍夫曼编码

一、基本介绍

java中霍夫曼树的示例分析

二、原理剖析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

 6)说明:

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

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

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

注意:

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

java中霍夫曼树的示例分析

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

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

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

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

感谢你能够认真阅读完这篇文章,希望小编分享的“java中霍夫曼树的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: java中霍夫曼树的示例分析

本文链接: https://www.lsjlt.com/news/300440.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java中霍夫曼树的示例分析
    这篇文章主要介绍了java中霍夫曼树的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。霍夫曼树一、基本介绍二、霍夫曼树几个重要概念和举例说明 构成霍夫曼树的步...
    99+
    2023-06-21
  • java数据结构图论霍夫曼树及其编码示例详解
    目录霍夫曼树一、基本介绍二、霍夫曼树几个重要概念和举例说明 构成霍夫曼树的步骤霍夫曼编码一、基本介绍二、原理剖析注意:霍夫曼编码压缩文件注意事项霍夫曼树 一、基本介绍 二、霍夫曼树...
    99+
    2024-04-02
  • Java数据结构之实现哈夫曼树的示例分析
    这篇文章主要介绍了Java数据结构之实现哈夫曼树的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、与哈夫曼树相关的概念概念含义1. 路径从树中一个结点到另一个结点的...
    99+
    2023-06-15
  • Java实现赫夫曼树(哈夫曼树)的创建
    目录一、赫夫曼树是什么?1.路径和路径长度2.节点的权和带权路径长度3.树的带权路径长度二、创建赫夫曼树1.图文创建过程2.代码实现一、赫夫曼树是什么? 给定N个权值作为N个叶子结点...
    99+
    2024-04-02
  • OpenCV霍夫圆变换cv2.HoughCircles()的示例分析
    这篇文章主要介绍OpenCV霍夫圆变换cv2.HoughCircles()的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!circles = cv2.HoughCircles(img,cv2.HOUGH_GR...
    99+
    2023-06-20
  • 用R语言实现霍夫曼编码的示例代码
    可读性极低,而且其实也没必要用R语言写,图个乐罢了  p=c(0.4,0.2,0.2,0.1,0.1)###输入形如c(0.4,0.2,0.2,0.1,0.1)的概率向...
    99+
    2024-04-02
  • Java怎样实现赫夫曼树的创建
    这篇文章给大家介绍Java怎样实现赫夫曼树的创建,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、赫夫曼树是什么?给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度(WPL)达到最小,称这样的二叉树为最...
    99+
    2023-06-22
  • Java中二叉树与N叉树的示例分析
    这篇文章主要介绍了Java中二叉树与N叉树的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。题目一 解法class Solution {&...
    99+
    2023-06-29
  • C++中红黑树的示例分析
    这篇文章将为大家详细讲解有关C++中红黑树的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。红黑树红黑树的概念红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以...
    99+
    2023-06-29
  • java数据结构之树的示例分析
    这篇文章主要介绍java数据结构之树的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!树定义和基本术语定义树(Tree)是n(n≥0)个结点的有限集T,并且当n>0时满足下列条件:(1)有且仅有一个特定的称为根...
    99+
    2023-05-30
    java
  • java二叉树面试题的示例分析
    小编给大家分享一下java二叉树面试题的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二叉树的深度题目:输入一颗二叉树的根节点,求该树的的深度。输入一颗二...
    99+
    2023-06-20
  • Java中的哈夫曼压缩原理是什么
    这篇文章主要介绍“Java中的哈夫曼压缩原理是什么”,在日常操作中,相信很多人在Java中的哈夫曼压缩原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中的哈夫曼压缩原理是什么”的疑惑有所帮助!...
    99+
    2023-06-20
  • java二叉树中数据插入算法的示例分析
    这篇文章主要介绍java二叉树中数据插入算法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!例题:leetcode 第701题二叉树插入数据题目:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉...
    99+
    2023-06-22
  • C语言中二叉树的示例分析
    这篇文章主要为大家展示了“C语言中二叉树的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C语言中二叉树的示例分析”这篇文章吧。树概念及结构树是一种 非线性 的数据结构,它是由 n ( n...
    99+
    2023-06-29
  • web开发中二叉树的示例分析
    这篇文章将为大家详细讲解有关web开发中二叉树的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。0.  前言到目前为止,我们已经讲述了顺序表、链表、栈、队...
    99+
    2024-04-02
  • Java数据结构之红黑树的示例分析
    小编给大家分享一下Java数据结构之红黑树的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、红黑树所处数据结构的位置:在JDK源码中, 有treeMap...
    99+
    2023-05-30
    java
  • Java中锁的示例分析
    小编给大家分享一下Java中锁的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java中的锁Java中的加锁操作有两种: 1.synchronized锁(...
    99+
    2023-06-20
  • 镜像二叉树的示例分析
    镜像二叉树的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。算法这个东西很难,纵使你了解了其中的逻辑,用代码写出来仍然不是一件容易的事,内部有太多的细节需...
    99+
    2023-06-04
  • JavaScript之树结构的示例分析
    这篇文章主要介绍了JavaScript之树结构的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。二叉树--概念--二叉树是一种树形结构...
    99+
    2024-04-02
  • Java中BeanUtils.copyProperties的示例分析
    这篇文章将为大家详细讲解有关Java中BeanUtils.copyProperties的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。场景开发中经常遇到,把父类的属性拷贝到子类中。通常有2种方法:...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作