sdut3345+2127 哈夫曼树
来源:互联网 发布:微信群提取好友软件 编辑:程序博客网 时间:2024/06/02 05:29
本来想着练一下哈夫曼编码那一大串代码的,然后发现,找不到题目,这个可能要等到以后涉及到大工程时才能真正实践到吧。然后找到了SDUT的两题哈夫曼题,加深了对哈夫曼树和优先队列的理解。
开始不知道这个公式(最优二叉树的权=每个叶子节点的权值之和=除根节点外的节点的权值之和=哈夫曼编码的长度),一直没想明白为什么要求除根节点外的节点的权值之和.
最后一个等于哈夫曼编码长度可以通过以下例子得出:a b c,建树:
3
2 1
1 1
易知哈夫曼编码的长度=1*2+1*2+1*1=5=最优二叉树的权
然后一个字符对应8位ascii编码。
sdut 3345
#include<cstdio>#include<queue>#include<cstring>#include<string>#include<iostream>#include<map>#include<set>using namespace std;string s;int node,wpl,n,mm,as;int main(){ while(cin>>s){ node=wpl=0; map<char,int>m; priority_queue<int,vector<int>,greater<int> >q;///优先队列默认元素大的优先级高,要让数据小的优先级高这么处理。 for(int i=0;i<s.length();i++){ m[s[i]]++; } for(int i=0;i<s.length();i++){ if(m[s[i]]){ q.push(m[s[i]]); m[s[i]]=0; } } while(!q.empty()){ n=q.top(); q.pop(); if(!q.empty()){ mm=q.top(); q.pop(); node=n+mm; wpl+=node; q.push(node); } } as=s.length()*8; double ans=(as*1.0)/wpl; printf("%d %d %.1f\n",as,wpl,ans); } return 0;}/***************************************************User name: RockyResult: AcceptedTake time: 0msTake Memory: 196KBSubmit time: 2017-11-27 23:08:45****************************************************/
sdut 2127
#include<cstdio>#include<cstring>#include<queue>using namespace std;const int maxn=1e4+5;int n,a[maxn],nn,mm,wpl,node;int main(){ while(scanf("%d",&n)!=EOF){ wpl=0; priority_queue<int,vector<int>,greater<int> >q; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=0;i<n;i++){ q.push(a[i]); } while(!q.empty()){ nn=q.top(); q.pop(); if(!q.empty()){ mm=q.top(); q.pop(); node=nn+mm; wpl+=node; q.push(node); } } printf("%d\n",wpl); } return 0;}/***************************************************User name: RockyResult: AcceptedTake time: 4msTake Memory: 312KBSubmit time: 2017-11-27 23:40:45****************************************************/
阅读全文
0 0
- sdut3345+2127 哈夫曼树
- SDUT3345数据结构实验之二叉树六:哈夫曼编码
- 哈夫曼树 SDUT 2127
- poj-3253-sdutoj-2127-哈夫曼树-优先队列
- SDUT-2127- 树-堆结构练习——合并果子之哈夫曼树(STL 优先队列)
- SDUTOJ 2127 树-堆结构练习——合并果子之哈夫曼树 【STL】
- SDUTOJ 2127 ——树-堆结构练习——合并果子之哈夫曼树 优先队列
- SDUTOJ 2127 树-堆结构练习——合并果子之哈夫曼树
- sdut 2127 树-堆结构练习——合并果子之哈夫曼树
- SDUT 2127 树-堆结构练习——合并果子之哈夫曼树
- SDUT OJ 2127 树-堆结构练习——合并果子之哈夫曼树
- 2127-树-堆结构练习——合并果子之哈夫曼树(优先队列实现)
- sdut 2127 树-堆结构练习——合并果子之哈夫曼树 && 优先队列
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- 哈夫曼树
- springboot+scala+slick+react实现微服务
- 自定义类型(结构体,位段,枚举,联合)总结
- 用暴力求解法和分而治之法求解最大子数组问题的Java代码实现
- ReactiveCocoa进阶
- 什么是定时器计数器
- sdut3345+2127 哈夫曼树
- idea2017关闭代码重复提醒
- HDOJ1037 Keep on Truckin'
- 【剑指offer】复杂链表的复制
- MySQL 命令种类
- python对nosql的操作二
- 10分钟搭建好Angular框架开发环境(idea开发工具+node.js)
- 多层感知机(Multi-Layer Perception)
- 拦截器的概述和struts2的执行流程(十)