哈弗曼编码
来源:互联网 发布:软件的鲁棒性 编辑:程序博客网 时间:2024/05/31 18:48
哈弗曼编码
- 涉及哈弗曼树的建立
代码解决为,不断进行排序,选择最小的放在最前边,然后相加建立。
#include <stdio.h>#include <string.h>#include <stdlib.h>char str[2560];int book[2560];int tap[2560];int cmp(const void *a, const void *b){ return *(int *)a-*(int *)b;}int main(){ while(scanf("%s", str)!=EOF) { memset(book, 0, sizeof(book)); memset(tap, 0, sizeof(tap)); int la, lb=0; la=strlen(str)*8; int i; for(i=0;i<la;i++) { book[str[i]]++; } int p=0; //for(i=0;i<256;i++) for(i=45;i<256;i++) { if(book[i]!=0) tap[p++]=book[i]; } //printf("\n"); qsort(tap, p, sizeof(tap[0]), cmp); int sum=0; int q=0; while(q<p-1) { tap[q+1]+=tap[q]; sum+=tap[q+1]; qsort(tap, p, sizeof(tap[0]), cmp); q++; } lb=sum; printf("%d %d %.1lf\n", la, lb, 1.0*la/lb); } return 0;}
绝对不仅仅如此。
#include <stdio.h>#include <stdlib.h>int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;//这是从小到大排序,若是从大到小改成: return *(int *)b-*(int *)a;}int main(){ int a[100]; int n; scanf("%d",&n);//n代表数组中有几个数字 int i; for(i=1;i<=n;i++) scanf("%d",&a[i-1]); qsort(a,n,sizeof(a[0]),cmp);//(数组,需要排序的数字个数,单个数字所占内存大小,比较函数) for(i=1;i<=n;i++) printf("%d ",a[i-1]); return 0;}
阅读全文
0 0
- 香农编码、费诺编码、哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码
- 哈弗曼编码(C++)
- 想到一个类似计算机结构的深度神经网络结构
- ubuntu深度学习软硬件开发环境搭建
- 关于JSONObject解析json
- 【NOIP2017提高A组冲刺11.2】失格
- 【sort专题】75. Sort Colors
- 哈弗曼编码
- 【C++】类型萃取
- 23岁女孩ISTP职业规划,我是手艺人,却还在政府部门打临时工
- 1046. 划拳(15)——C语言
- 对于洛谷提高试炼场-动态规划篇的爆破
- leetcode 494
- Verilog(ModelSim)小收获
- 使用C语言对字符串操作的分装
- 网易云深度学习第二课notebook1