书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!

Huffman和Priority_queue 解决POJ 1521

 

题目:http://poj.org/problem?id=1521

题目大意:给定字符串,求哈夫曼编码长和它与等长编码的比值

 
做这道题目的时候wrang了好几次,但是,
经过调试之后,我彻底了解了哈夫曼树的过程
说来相当有价值了。在下面我也会分享出来的。

复制代码
View Code
#include <iostream>  
#include "cstdio"
#include "string"
#include "cstring"
#include <queue>  
using namespace std;  
struct Num
{
    int number;
    bool operator<(const Num &a) const
    {
        return number>a.number;
    }
}tmp;
int main()
{   
    string s; char c;
    int numberofchar, i, j, a, b;
    while(1)
    {
        priority_queue<Num> que; 
        cin>>s;
        if(s=="END")
            break;
        sort(s.begin(), s.end());
        c = s[0];
        numberofchar = 0;
        for(i=0; i<s.length(); i++)
        {
            if(s[i]==c)
                numberofchar++;
            else
            {
                tmp.number = numberofchar;
                que.push(tmp);
                c = s[i];
                numberofchar = 1;
            }
        }
        tmp.number = numberofchar;
        que.push(tmp);  //细节1:这个地方可不能忘了呀,不然,毫无疑问的wrong answer
        int oldlen = s.length()*8;
        int newlen = 0;
        if(que.size()==1)  //细节2:这个地方也不能忘了,不然,程序会莫名其妙的出错,自然也是wrong answer
            newlen = que.top().number;
        while(que.size()>1)
        {
            a = que.top().number; que.pop();
            b = que.top().number; que.pop();
            tmp.number = a+b;
            newlen += tmp.number;
            que.push(tmp);
        }
        cout<<oldlen<<" "<<newlen<<" ";
        printf("%.1f\n", (float)oldlen/newlen);
    }
    return 0;  
}   
复制代码

 

 

posted on   More study needed.  阅读(314)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2011年9月 >
28 29 30 31 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 1
2 3 4 5 6 7 8

导航

统计

书山有径勤为路>>>>>>>>

<<<<<<<<学海无涯苦作舟!

点击右上角即可分享
微信分享提示