霍夫曼树一、基本介绍
二、霍夫曼树几个重要概念和举例说明
构成霍夫曼树的步骤
举例:以arr = {1  3  6  7  8   13   29}
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("树是空树,无法遍历~~");		}	}	// 创建赫夫曼树的方法	/**	 * @param arr 需要创建成霍夫曼树的数组	 * @return 创建好后的霍夫曼树的root节点	 */	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加入到nodes			nodes.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();		}	}	@override	public string tostring() {		return "node [value=" + value + "]";	}	@override	public int compareto(node o) {		// 表示从小到大排列		return this.value - o.value;	}}
霍夫曼编码一、基本介绍
二、原理剖析
6)说明:
原来长度是359,压缩了(359 - 133) / 359 = 62.9%
此编码满足前缀编码,即字符的编码都不能是其他字符编码的前缀。不会造成匹配的多义性;
霍夫曼编码是无损的压缩处理方案
注意:
霍夫曼编码压缩文件注意事项1)如果文件本身就是经过压缩处理的,那么使用赫夫曼编码在压缩效率不会有明显变化,比如视频,ppt等等文件
2)赫夫曼编码是按字节来处理的,因此可以处理所有的文件(二进制文件、文本文件)
3)如果一个文件中的内容,重复的数据不多,压缩效果也不会很明显。
以上就是java中霍夫曼树的示例分析的详细内容。
   
 
   