哈夫曼编码(c++题解)

题目描述

哈夫曼编码是一种编码方式,是可变字长编码的一种,由Huffman于1952年提出。该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫Huffman编码。简单地来说,就是出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的。

现在请你模拟这样的原则对给定的一个字符串进行字母统计。

输入格式

输入只有一行,是一个字符串,由小写英文字母组成,长度不超过255个字符。

输出格式

输出有若干行,每行有两部分组成:一个字母和该字母出现的频率,中间用一个空格分隔,并按频率高低排列,频率相同时则按字母的ASCI码的先后顺序排列。

样例

样例输入

复制soon

样例输出

复制o 2
n 1
s 1

_____________________________________________________________________________

一道经典题,注意我用的算法,虽然这道题语法也能过,但为了时间毫秒

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

_____________________________________________________________________________

#include <bits/stdc++.h>
using namespace std;
struct node{//结构体
	int a;//a为出现次数
	char b;//b为这个字符
}D[100005];
bool cmp(node x,node y){
	if(x.a!=y.a)return x.a>y.a;//如果出现次数不相同,比较次数
	else return x.b<y.b;//如何出现次数相同,比较字符大学小
}
string s;
int main(){
	cin>>s;
	for(int i=0;i<=s.size()-1;i++){
		D[s[i]-'a'].a++;
		D[s[i]-'a'].b=s[i];
	}
	sort(D,D+26,cmp);
	for(int i=0;i<=26;i++){
		if(D[i].a==0)return 0;
		cout<<D[i].b<<" "<<D[i].a<<endl ;
	}
}

 

相关推荐

  1. 编码(c++题解)

    2024-01-06 04:52:02       53 阅读
  2. PTA:编码

    2024-01-06 04:52:02       65 阅读
  3. 根据树求编码

    2024-01-06 04:52:02       36 阅读
  4. go实现编码

    2024-01-06 04:52:02       45 阅读
  5. 数据结构:树及其编码

    2024-01-06 04:52:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-06 04:52:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-06 04:52:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-06 04:52:02       87 阅读
  4. Python语言-面向对象

    2024-01-06 04:52:02       96 阅读

热门阅读

  1. 郑州大学算法设计与分析实验4

    2024-01-06 04:52:02       58 阅读
  2. Apache配置与应用

    2024-01-06 04:52:02       56 阅读
  3. facebook广告开企业户的渠道是什么

    2024-01-06 04:52:02       62 阅读
  4. OpenGL ES案例学习-画板

    2024-01-06 04:52:02       52 阅读
  5. 紧跟国际潮流,勇探未知领域

    2024-01-06 04:52:02       53 阅读
  6. ROS执行命令发现找不到python2.7解决办法

    2024-01-06 04:52:02       60 阅读
  7. Qt设置的字体加粗、下划线、斜体、字号,字体

    2024-01-06 04:52:02       56 阅读
  8. <sa8650>sa8650 CDT-之-汽车CDT配置用户指南(上)

    2024-01-06 04:52:02       51 阅读