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; } }
허프만 코딩
1. 기본 소개
6) 참고 :
원본 길이는 359, 압축(359 - 133) / 359 = 62.9%
이 인코딩은 접두어 인코딩을 충족합니다. 즉, 문자 인코딩은 다른 문자 인코딩의 접두어가 될 수 없습니다. Huffman 인코딩은 무손실 압축 처리 솔루션입니다. 참고:Huffman 인코딩 압축 파일 주의 사항
1 ) 압축 , 그러면 허프만 코딩을 사용해도 동영상, ppt, 기타 파일 등의 압축 효율이 크게 변하지 않습니다
2) 허프만 코딩은 바이트 단위로 처리되므로 모든 파일(바이너리 파일, 텍스트 파일)을 처리할 수 있습니다3) 만약 파일 내용에 반복되는 데이터가 많지 않으면 압축 효과가 뚜렷하지 않습니다.위 내용은 자바의 허프만 트리 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!