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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构实验之二叉树六:哈夫曼编码

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构实验之二叉树六:哈夫曼编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

字符的編碼方式有多種,除了大家熟悉的ASCII編碼,哈夫曼編碼(Huffman Coding)也是一種編碼方式,它是可變字長編碼。該方法完全依據字符出現概率來構造出平均長度最短的編碼,稱之為最優編碼。哈夫曼編碼常被用于數據文件壓縮中,其壓縮率通常在20%~90%之間。你的任務是對從鍵盤輸入的一個字符串求出它的ASCII編碼長度和哈夫曼編碼長度的比值。
Input
輸入數據有多組,每組數據一行,表示要編碼的字符串。
Output
對應字符的ASCII編碼長度la,huffman編碼長度lh和la/lh的值(保留一位小數),數據之間以空格間隔。
Sample
Input

AAAAABCD
THE_CAT_IN_THE_HAT

Output

64 13 4.9
144 51 2.8
Hint

#include<bits/stdc++.h>using namespace std;int main() {char s[10000];while(~scanf("%s", s)){priority_queue < int, vector<int>, greater<int> > Q;//利用優先隊列,從小到大排序int len = strlen(s);int i, Max = 0;int cnt[256];memset(cnt, 0, sizeof(cnt));for(i = 0; i < len; i++){cnt[s[i]]++;//統計每個字符出現的頻率,利用ASCII對應其數組下標if(s[i] > Max){Max = s[i];//找出頻率最高的字符,Max的值代表這頻率最高的字符的下標}}for(i = 0; i <= Max; i++){if(cnt[i] != 0)Q.push(cnt[i]);//吧字符出現的次數壓入優先隊列}int sum = 0;while(!Q.empty()){int a = Q.top();Q.pop();if(!Q.empty()){int b = Q.top();Q.pop();sum += (a + b);Q.push(a+b);}}printf("%d %d %.1f\n", len * 8, sum, len * 8.0 / sum);}return 0; }

總結

以上是生活随笔為你收集整理的数据结构实验之二叉树六:哈夫曼编码的全部內容,希望文章能夠幫你解決所遇到的問題。

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