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

原创 2016年08月24日 15:13:57

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

Time Limit: 1000ms   Memory limit: 65536K 

题目描述

字符的编码方式有多种,除了大家熟悉的ASCII编码,哈夫曼编码(Huffman Coding)也是一种编码方式,它是可变字长编码。该方法完全依据字符出现概率来构造出平均长度最短的编码,称之为最优编码。哈夫曼编码常被用于数据文件压缩中,其压缩率通常在20%90%之间。你的任务是对从键盘输入的一个字符串求出它的ASCII编码长度和哈夫曼编码长度的比值。

输入

 输入数据有多组,每组数据一行,表示要编码的字符串。

输出

 对应字符的ASCII编码长度lahuffman编码长度lhla/lh的值(保留一位小数),数据之间以空格间隔。

示例输入

AAAAABCD
THE_CAT_IN_THE_HAT

示例输出

64 13 4.9
144 51 2.8


///每次都把长度累加  最后就是哈夫曼编码的长度 哈弗曼编码详情百度

/** 重载()运算符
struct cmp
{
    bool operator ()(int x,int y)
    {
        return (x > y);
    }
};
 */
#include <bits/stdc++.h>

using namespace std;

const int maxn=10010;

priority_queue < int,vector<int>,greater<int> >q;
/// 最大值先输出的优先队列 容器为 vector , 可以重载()运算符 见上cmp

int main()
{
    int n;
    int huf,sum,i,num;
    while (cin>>n)
    {
        huf=0;
        sum=0;
        for (i=1; i<=n; i++)
        {
            cin>>num;
            q.push(num);
        }

        while(!q.empty())
        {
            huf+=sum; ///最后一次不计入长度 所以放在这里了...
            sum=q.top();
            q.pop();
            if (!q.empty())
            {
                sum+=q.top();
                q.pop();

                q.push(sum);
            }
        }
        cout<<huf<<endl;
    }
    return 0;
}


版权声明:有错误麻烦赐教,感激不尽~~~(转载留言哦~)

数据结构实验之二叉树的建立与遍历

数据结构实验之二叉树的建立与遍历 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述        已知一个按先序序...
  • LsMrSUN
  • LsMrSUN
  • 2016年08月01日 15:16
  • 555

《数据结构》实验五: 树和二叉树实验总结

写一个博文,比较总结树和二叉树的相关知识。( 建议从知识点角度和应用角度两个方面各陈述。) 1.什么是(自由)树? 树首先是无向图的一种,并且此无向图要满足下面两个特性: 1)连通,即任何两...
  • beibeiyuan123
  • beibeiyuan123
  • 2014年12月01日 22:36
  • 1555

数据结构实验之图论六:村村通公路 sdut oj (3362)

prim算法
  • rain_snowing
  • rain_snowing
  • 2016年08月18日 09:28
  • 920

《数据结构》实验五:树和二叉树 实验(实验报告)

一.实验目的      巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。 1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。 2.学习树的相关知...
  • denise94
  • denise94
  • 2014年12月06日 20:57
  • 3590

数据结构实验之排序六:希尔排序

数据结构实验之排序六:希尔排序 Time Limit: 1000MS Memory limit: 65536K 题目描述 我们已经学习了各种排序方法,知道在不...
  • acher66
  • acher66
  • 2016年08月22日 20:46
  • 1180

【数据结构实验】二叉树的建立以及遍历

二叉树:结点的度最大值是2,即每个结点的子树数目只可能为0、1、2。 如果结点有两棵子树,则这两棵子树有次序关系,分别称为左子树和右子树。左、右子树的根结点分别 称为其双亲结点的左儿子和右儿子。度...
  • u012551871
  • u012551871
  • 2014年11月01日 23:02
  • 464

数据结构实验之二叉树二:遍历二叉树

今天,我复习了一下先序遍历、中序遍历、后序遍历 如果在座的读者不知道什么是的话,可以百度哦!!!!! 数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000MS M...
  • qq_34952846
  • qq_34952846
  • 2016年05月21日 00:11
  • 2461

数据结构实验之二叉树的建立与遍历

数据结构实验之二叉树的建立与遍历 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 已知一个按先序序列输入的字符...
  • huayunhualuo
  • huayunhualuo
  • 2015年06月21日 11:02
  • 540

数据结构实验之排序六:希尔排序

数据结构实验之排序六:希尔排序 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 我们已经学习了各种排序方法,知道在不同的...
  • yyxiangyu
  • yyxiangyu
  • 2017年02月22日 19:36
  • 103

数据结构实验之图论六:村村通公路

题目描述 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表...
  • Ambercherryy
  • Ambercherryy
  • 2016年08月20日 08:32
  • 282
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构实验之二叉树六:哈夫曼编码 sdutoj3345
举报原因:
原因补充:

(最多只允许输入30个字)