java中霍夫曼樹的範例分析
java
霍夫曼樹
一、基本介紹
二、霍夫曼樹幾個重要概念和範例說明
構成霍夫曼樹的步驟
#範例:以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)說明:
此編碼滿足前綴編碼,即字元的編碼都不能是其他字符編碼的前綴。不會造成匹配的多義性;
霍夫曼編碼是無損的壓縮處理方案
注意:
######################################################## #########################霍夫曼編碼壓縮檔案注意事項######1)如果檔案本身就是經過壓縮處理的,那麼使用赫夫曼編碼在壓縮效率不會有明顯變化,例如視頻,ppt等等文件######2)赫夫曼編碼是按字節來處理的,因此可以處理所有的文件(二進制文件、文字檔)######3)如果一個檔案中的內容,重複的資料不多,壓縮效果也不會很明顯。 ###以上是java中霍夫曼樹的範例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)