![Java基礎(chǔ)復(fù)習(xí)筆記09數(shù)據(jù)結(jié)構(gòu)哈夫曼樹_第1頁](http://file4.renrendoc.com/view/7af3473ba5e5bacf84fef3699620e96b/7af3473ba5e5bacf84fef3699620e96b1.gif)
![Java基礎(chǔ)復(fù)習(xí)筆記09數(shù)據(jù)結(jié)構(gòu)哈夫曼樹_第2頁](http://file4.renrendoc.com/view/7af3473ba5e5bacf84fef3699620e96b/7af3473ba5e5bacf84fef3699620e96b2.gif)
![Java基礎(chǔ)復(fù)習(xí)筆記09數(shù)據(jù)結(jié)構(gòu)哈夫曼樹_第3頁](http://file4.renrendoc.com/view/7af3473ba5e5bacf84fef3699620e96b/7af3473ba5e5bacf84fef3699620e96b3.gif)
![Java基礎(chǔ)復(fù)習(xí)筆記09數(shù)據(jù)結(jié)構(gòu)哈夫曼樹_第4頁](http://file4.renrendoc.com/view/7af3473ba5e5bacf84fef3699620e96b/7af3473ba5e5bacf84fef3699620e96b4.gif)
![Java基礎(chǔ)復(fù)習(xí)筆記09數(shù)據(jù)結(jié)構(gòu)哈夫曼樹_第5頁](http://file4.renrendoc.com/view/7af3473ba5e5bacf84fef3699620e96b/7af3473ba5e5bacf84fef3699620e96b5.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Java基礎(chǔ)復(fù)習(xí)筆記09數(shù)據(jù)結(jié)構(gòu)-哈夫曼樹劉巖哈夫曼樹哈夫曼樹也稱作最優(yōu)二叉樹,當(dāng)樹中的節(jié)點帶了權(quán)重信息了,帶權(quán)路徑長度最小的二叉樹叫做最優(yōu)二叉樹。帶權(quán)路徑長度=sum(權(quán)重*度)。sum代表每個節(jié)點的之和。加入有如下帶權(quán)重的節(jié)點。權(quán)重分別是1、5、8、4。那么關(guān)于這些零散的節(jié)點,最優(yōu)二叉樹該如何構(gòu)建呢?首先先將離散節(jié)點從小到大升序排序第二從離散節(jié)點中在挑選排序前兩個節(jié)點當(dāng)做一個新的父節(jié)點的兩個子節(jié)點第三從離散的節(jié)點中去除剛剛使用的兩個節(jié)點第四重復(fù)第二和第三步驟,直到所有離散節(jié)點剔除完畢。哈夫曼樹就構(gòu)建完成用圖形演示過程如下可以看出所有的葉子節(jié)點就是之前的離散節(jié)點,如果在采用廣度遍歷法遍歷此樹
2、。那么遍歷的過程實際上就是最短遍歷路徑的遍歷過程哈夫曼樹的使用場景其實哈夫曼樹使用場景還真不少,例如apache負(fù)載均衡的按權(quán)重請求策略的底層算法、咱們生活中的路由器的路由算法、利用哈夫曼樹實現(xiàn)漢字點陣字形的壓縮存儲()、快速檢索信息等等底層優(yōu)化算法,其實核心就是因為目標(biāo)帶有權(quán)重、長度遠(yuǎn)近這類信息才能構(gòu)建哈夫曼樹模型。實現(xiàn)哈夫曼樹要想實現(xiàn)哈夫曼樹其實就是將一堆零散的節(jié)點信息構(gòu)建成一顆最優(yōu)二叉樹,之后再按廣度優(yōu)先遍歷它。實現(xiàn)哈夫曼樹其實就是構(gòu)建哈夫曼樹的過程,原理其實上面已經(jīng)說了,這里再重復(fù)一下。首先先將離散節(jié)點從小到大升序排序第二從離散節(jié)點中在挑選排序前兩個節(jié)點當(dāng)做一個新的父節(jié)點的兩個子節(jié)點第
3、三從離散的節(jié)點中去除剛剛使用的兩個節(jié)點第四重復(fù)第二和第三步驟,直到所有離散節(jié)點剔除完畢。哈夫曼樹就構(gòu)建完成代碼以及測試程序如下package dateStructer.tree.huffmanTree;import java.util.ArrayDeque;import java.util.ArrayList;import java.util.List;import java.util.Queue;/* * 哈夫曼樹 * * author liuyan */public class HuffmanTree /* * 節(jié)點實體 */public static class Node / 數(shù)據(jù)T d
4、ata;/ 權(quán)重int power;Node leftNode;Node rightNode;public Node(T data, int power) this.data = data;this.power = power;Overridepublic String toString() / TODO Auto-generated method stubreturn data: + data + power: + power + ;SuppressWarnings(unchecked)public boolean compareTo(Node node) if (this.power no
5、de.power) return true;return false;/* * 將集合將序排序 * * param * param * * param list */SuppressWarnings(unchecked)public static void sort(List list) for (int i = 0; i list.size() - 1; i+) for (int j = i + 1; j list.size(); j+) if (list.get(i).compareTo(list.get(j) / 交換數(shù)組中的元素位置Node node = list.get(i);lis
6、t.set(i, list.get(j);list.set(j, node);/* * 創(chuàng)建哈夫曼樹 * * param list * return */SuppressWarnings(unchecked)public static Node createHuffmanTree(List list) while (list.size() 1) sort(list);Node left = list.get(list.size() - 1);Node right = list.get(list.size() - 2);Node parent = new Node(父節(jié)點, left.power
7、 + right.power);parent.leftNode = left;parent.rightNode = right;list.remove(list.size() - 1);list.remove(list.size() - 1);list.add(parent);return list.get(0);SuppressWarnings(unchecked)public static List deepFirst(Node root) List list = new ArrayList();Queue queue = new ArrayDeque();queue.add(root);
8、while (!queue.isEmpty() list.add(queue.peek();Node twoLinkNode = queue.poll();if (twoLinkNode.leftNode != null) queue.add(twoLinkNode.leftNode);if (twoLinkNode.rightNode != null) queue.add(twoLinkNode.rightNode);return list;/* * param args */public static void main(String args) List list = new ArrayList();Node node1 = new Node(東方不敗, 8);Node node2 = new Node(風(fēng)清揚, 5);Node node3 = new Node(岳不群, 4);Node node4 = new Node(左冷禪, 1);list.add(node1);list.add(node2);list.add(node3);list.add(node4);Node root = createHuffmanTree(list);System.out.println(deepFirst
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中介服務(wù)協(xié)議合同
- 物流貨運服務(wù)合同
- 2025年上海道路客貨運輸從業(yè)資格證b2考試題庫
- 2025年廣西貨運從業(yè)資格證500道題目和答案大全
- 2025年山西貨運從業(yè)資格證模擬考試0題答案解析
- 電力供應(yīng)保障合同(2篇)
- 2024-2025學(xué)年高中英語Unit16Stories模擬高考強(qiáng)化練含解析北師大版選修6
- 教師個人培訓(xùn)總結(jié)報告
- 物業(yè)公司安全隱患排查大總結(jié)
- 品質(zhì)部年度工作計劃
- 2025版職業(yè)院校與企業(yè)合作育人合同3篇
- 自動化設(shè)備項目評估報告模板范文
- 商標(biāo)法基礎(chǔ)知識
- 2025年高考物理一輪復(fù)習(xí)之機(jī)械振動
- 《道路交通安全法》課件完整版
- 初中2025教學(xué)工作計劃
- 2024年度市政工程項目三方合作協(xié)議3篇
- 【大學(xué)課件】機(jī)電設(shè)備管理技術(shù)概論
- (2024)甘肅省公務(wù)員考試《行測》真題及答案解析
- 《STP營銷戰(zhàn)略概述》課件
- 醫(yī)院醫(yī)務(wù)人員醫(yī)德考評標(biāo)準(zhǔn)
評論
0/150
提交評論