日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哈夫曼编码之大根堆小根堆揭西县

發布時間:2025/4/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈夫曼编码之大根堆小根堆揭西县 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

哈夫曼編碼
根據數據出現的頻率對數據進行編碼,從而壓縮原始數據。

例如對于一個文本文件,其中各種字符出現的次數如下:

a : 10
b : 20
c : 40
d : 80
可以將每種字符轉換成二進制編碼,例如將 a 轉換為 00,b 轉換為 01,c 轉換為 10,d 轉換為 11。這是最簡單的一種編碼方式,沒有考慮各個字符的權值(出現頻率)。而哈夫曼編碼采用了貪心策略,使出現頻率最高的字符的編碼最短,從而保證整體的編碼長度最短。

首先生成一顆哈夫曼樹,每次生成過程中選取頻率最少的兩個節點,生成一個新節點作為它們的父節點,并且新節點的頻率為兩個節點的和。選取頻率最少的原因是,生成過程使得先選取的節點位于樹的更低層,那么需要的編碼長度更長,頻率更少可以使得總編碼長度更少。

import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue;public class hufman { private class Node implements Comparable<Node>{char ch;int frequency;boolean isleaf;Node left;Node right;public Node(char a,int f) {ch=a;frequency=f;isleaf=true;}public Node(Node left,Node right,int frequency) {this.left=left;this.right=right;this.frequency=frequency;}@Overridepublic int compareTo(Node o) {// TODO Auto-generated method stubreturn this.frequency-o.frequency;} }public Map<Character,String> encode(Map<Character,Integer> frquencyChar){PriorityQueue<Node> p=new PriorityQueue();for(char c:frquencyChar.keySet()) {p.add(new Node(c,frquencyChar.get(c)));}while(p.size()!=1) {Node n1= p.poll();Node n2= p.poll();p.add(new Node(n1,n2,n1.frequency+n2.frequency));}return Encode(p.poll());}public Map<Character,String> Encode(Node root){Map<Character,String> m=new HashMap();Encode(root,"",m);return m;}public void Encode(Node node,String a,Map<Character,String> m) {while(node.isleaf) {m.put(node.ch, a);return;}Encode(node.left,a+"0",m);Encode(node.right,a+"1",m);}} man.java import java.util.HashMap; import java.util.Map;public class Teat {public static void main(String[] args) {// TODO Auto-generated method stubMap <Character,Integer> frquencyChar=new HashMap();frquencyChar.put('a', 1);frquencyChar.put('c', 19);frquencyChar.put('2', 13);frquencyChar.put('5', 14);hufman a=new hufman();Map<Character,String> b=a.encode(frquencyChar);for(char m:b.keySet()) {System.out.println(m+b.get(m));}}}

這是一個大根堆,所以重寫了Node 對象中的compareTo 函數, 繼承 Comparable 接口,
首先將字符與權重加入一個map中,我理解的是構建小根堆,這樣每次都是最小的現出來。相加構成節點這個樣子。
重寫了函數之后,compare這個函數我覺得是》0 就要交換,<0 不交換,this.fre-o.fre>0 說明后來者小,進行交換。

PriorityQueue <Integer> maxHeap = new PriorityQueue<Integer>( new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {// TODO Auto-generated method stubreturn o2.compareTo(o1);}});

還可以 通過這個樣子重寫進行大根堆 小根堆變換。
https://blog.csdn.net/liou825/article/details/21322403
https://blog.csdn.net/zcf1784266476/article/details/68961473

總結

以上是生活随笔為你收集整理的哈夫曼编码之大根堆小根堆揭西县的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品人八做人人女人a级刘 | 在线观看污网站 | 国产av无码专区亚洲av毛片搜 | 国产又粗又黄又爽 | 色欧美色| 1024手机在线观看 | 国产在线视频你懂的 | 一本色道久久hezyo无码 | 91操操操| 中文字幕在线观看视频网站 | 欧洲人妻丰满av无码久久不卡 | 老熟妇高潮一区二区高清视频 | 国产女同91疯狂高潮互磨 | 无人在线观看高清视频 | 亚洲乱子伦 | 国产精品videos | 精品国产乱码久久久久久久 | 国产在线欧美在线 | 亚洲影院中文字幕 | 久久久888| 中文字幕第31页 | 亚洲精品综合久久 | 午夜网站免费 | 性激烈视频在线观看 | 国产黄色一级片视频 | 色秀视频在线观看 | 欧美精品人妻一区二区 | 中文字幕日韩三级片 | 91精品国产一区二区在线观看 | 欧美中文网 | 2019av视频| 亚洲丁香色 | 人妻丰满熟妇av无码区 | 中文字幕在线观 | 久久免费看少妇高潮 | 中日韩免费视频 | 国产黄色录相 | 欧美体内谢she精2性欧美 | 亚洲一区二区电影网 | 综合免费视频 | 2022精品国偷自产免费观看 | 亚洲天堂2024| 国产高清不卡一区 | 国产精品自拍视频 | 爱情岛亚洲论坛入口福利 | 久久久精品久久久久久 | 国产伦精品一区二区三区视频黑人 | 在线观看91av | 91www| 精品亚洲aⅴ无码一区二区三区 | 在线视频福利 | 精品无码人妻一区二区免费蜜桃 | wwww黄色片 | 天堂视频免费 | 亚洲精选91 | 欧洲美女与动交zozzo | 欧美精品免费在线 | 久久精品在线观看 | 国产主播在线观看 | 一级片福利 | 国产爆乳无码一区二区麻豆 | 亚洲精品中文字幕在线观看 | 两性囗交做爰视频 | 国产精品h| 新婚之夜玷污岳丰满少妇在线观看 | 青青草国产一区二区三区 | 欧日韩在线 | 成人精品在线 | 日欧一级片 | 人人澡澡人人 | 亚洲欧美一区二区三区久久 | 一二三不卡 | 国产人人爽 | 乌克兰黄色片 | 欧美无玛 | 日韩精品一二三 | 国产免费av一区二区 | 天天av天天操| 色夜av| 99国产精品久久久久久久成人 | 日韩精品免费一区二区三区竹菊 | 国产精品一区在线看 | 人人做人人爱人人爽 | 亚洲影视在线 | www.狠狠撸.com| 台湾佬美性中文网 | 久久精品一区二区免费播放 | 九九精品久久 | 久久精品这里 | 亚洲精品一级二级 | 欧美激情精品久久久久久变态 | 中文字幕狠狠 | 欧美成人一区二区三区四区 | 非洲黄色一级片 | 综合国产精品 | 中文字幕亚洲在线 | 欧美在线va| 97精品| 人妻视频一区 |