数据压缩(哈夫曼编码)

发布时间:2023年12月23日

【问题描述】在数据压缩问题中,需要将数据文件转换成由二进制字符0、1组成的二进制串,称之为编码,已知待压缩的数据中包含若干字母(A-Z),为获得更好的空间效率,请设计有效的用于数据压缩的二进制编码,使数据文件压缩后编码总长度最小,并输出这个最小长度值。

【输入形式】待压缩的数据(长度不大于100的大写字母)

【输出形式】编码的最小总长度值

【样例输入】ABACCDA

【样例输出】13

【样例说明】A编码0,B编码110,C编码10,D编码111,ABACCDA的编码为0110010101110

【评分标准】

#include<iostream>
#include<stack>
#include<algorithm>
#include<queue>
using namespace std;
int main()
{
    string str;
    cin>>str;
    int cnt[26]={0};
    int wpl=0;
    for(int i=0;str[i];i++)
    {
        cnt[str[i]-'A']++;
    }
    priority_queue<int ,vector<int>,greater<int> >heap;
    for(int i=0;i<26;i++)
    {
        if(cnt[i])
        heap.push(cnt[i]);
    }
    while(heap.size()>1)
    {
        int t1=heap.top();
        heap.pop();
        int t2=heap.top();
        heap.pop();
        heap.push(t1+t2);
        wpl=wpl+t1+t2;
    }
    cout<<wpl<<endl;
    return 0;
}

文章来源:https://blog.csdn.net/m0_75017568/article/details/135176225
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。