1289 Huffman Code
来源:互联网 发布:数据侠客行txt 编辑:程序博客网 时间:2024/05/30 07:13
实践是检验真理的唯一标准。
很多课程只有亲手实践才会真正掌握。一起看看下面的关于课本上的Huffman Code的问题吧
现在有篇文章,请用二进制前缀编码对文章中出现所有字符进行其编码,使编码后的文章总长最短。
这正是课本上Huffman Code所解决的问题。来试试吧!
- 输入
多组输入,第一个正整数T表示组数。
每组第一行有一个正整数n,1≤n≤100000表示所用的字符种数。
接下来一行为n个正整数,表示每个字符在文章中出现的次数。
- 输出
输出编码的最小长度
- 样例输入
131 2 3
- 样例输出
9
此题采用堆排序
#include <iostream>#include <ctime>using namespace std;int a[100002];void swap(int& a, int& b){int temp = a;a = b;b = temp;}void heapAdjust(int h[], int s, int m){int rc = h[s];int j;for(j = 2 *s; j <= m; j *= 2){if(j < m && h[j + 1] < h[j]){j ++;}if(rc <= h[j]){break;}h[s] = h[j];s = j;}h[s] = rc;}int calc_huff(int h[], int n){int i;for(i = n / 2; i > 0; i --){heapAdjust(h, i, n);}i = n;int sum = 0;while(i > 1){swap(h[1], h[i]);heapAdjust(h, 1, i - 1);i --;swap(h[1], h[i]);heapAdjust(h, 1, i - 1);sum = sum + h[i] + h[i + 1];h[i] = h[i] + h[i + 1];}return sum;}int main(){int t;cin >> t;while(t --){int n;cin >> n;int i;for(i = 1; i <= n; i ++){cin >> a[i];}cout << calc_huff(a, n) << '\n';}return 0;}
- 1289 Huffman Code
- Huffman Code
- Huffman code
- huffman code and encode
- code of huffman(参考)
- Python实现Huffman Code
- Huffman Code 编码译码
- 浙大数据结构-HuffMan Code
- 图的学习-huffman code
- Huffman Tree 的构建和Huffman Code的实现
- 范式哈夫曼编码(Canonical Huffman Code)
- 范式哈夫曼编码(Canonical Huffman Code)
- 范式哈夫曼编码(Canonical Huffman Code)
- Huffman code(哈弗曼编码)笔记
- 赫夫曼编码---Huffman code(贪心算法)
- [C++]二叉树应用--Huffman code
- 范式哈夫曼编码(Canonical Huffman Code)
- Huffman Code(霍夫曼编码)原理及实例
- android4.0修改bug系列三
- 《我的编程笔记》C#篇-如何让一段代码自我复制
- APK权限大全
- 织梦网站模板时间格式大全
- 编译android系统提示不支持64位系统的解决方法
- 1289 Huffman Code
- H.264帧内模式选择以及代价计算相关知识
- 数据库连接池的基本原理
- 日常维护命令上的锁
- word文件打不开怎么办?显示的是:调试,发送错误报告,不发送
- 如何在spring中读取properties配置文件里面的信息
- 设计模式6大原则一:单一职责原则
- flashback table(闪回表)——基于表级别的闪回
- C语言面试题——位域及大小端模式的理解