ACM--Entrophy(哈希+数组 建树)
来源:互联网 发布:数控车椭圆编程实例 编辑:程序博客网 时间:2024/05/29 14:59
//采用哈希的思想建哈夫曼树 //0-9对应的数组地址1-10 A-Z对应的数组11-36 '_'则是37 //新生成的N-1课树从38开始建立 #include<iostream>#include<string.h>#include<iomanip>using namespace std;int T[100][5];void select(int &min,int &max){int Min_val=9999999;int Min_i;for(int i=min;i<=max;i++)if(T[i][0]<Min_val&&T[i][1]==0)//选择没父亲的树 { Min_val=T[i][0]; Min_i=i;}int Max_i;int Max_val=9999999;for(int i=min;i<=max;i++){ if(i==Min_i) continue; if(T[i][0]<Max_val&&T[i][1]==0) { Max_val=T[i][0]; Max_i=i; }}min=Min_i;max=Max_i;}int main(){string n;while(getline(cin,n),n!="END"){ int lenth=n.size();for(int i=1;i<100;i++){ T[i][1]=-1;T[i][0]=0;//所有结点的权重初始为0,父亲为-1 } for(int i=0;i<lenth;i++) { if(n[i]>='A'&&n[i]<='Z'){ T[n[i]-54][0]++; T[n[i]-54][1]=0;} if(n[i]>='0'&&n[i]<='9'){ T[n[i]-47][0]++;T[n[i]-47][1]=0;} if(n[i]=='_'){ T[n[i]-58][0]++; T[n[i]-58][1]=0; } } int sum=0; for(int i=1;i<100;i++) if(T[i][0]) sum++; int flag=0; if(sum==1) flag=1; int max=37; int j=max; int min=1; while(j<=37+sum-2) { select(min,max); T[j+1][0]=T[min][0]+T[max][0];//新的树的权重等于两个孩子的权重和 T[j+1][2]=min;T[j+1][3]=max;//新的树的左右孩子的地址 T[j+1][1]=0;//新的树的父亲为0 T[min][1]=j+1;T[max][1]=j+1; //左右子树的父亲为 j+1 j++; max=j; min=1; } for(int i=1;i<=37;i++) { if(T[i][1]!=-1) { int j=i; int temp=0; while(T[j][1]) { temp++; j=T[j][1]; } T[i][4]=temp; } } sum=0; for(int i=0;i<lenth;i++) { if(n[i]>='A'&&n[i]<='Z'){ sum+=T[n[i]-54][4];} if(n[i]>='0'&&n[i]<='9'){ sum+=T[n[i]-47][4];} if(n[i]=='_'){ sum+=T[n[i]-58][4]; } } if(flag) sum=lenth; cout<<lenth*8<<" "<<sum<<" "; cout<<fixed<<setprecision(1)<<(float)lenth*8/(float)sum<<endl;}return 0;}
0 0
- ACM--Entrophy(哈希+数组 建树)
- ACM--Entrophy(优先队列建树+哈希)
- 建树
- poj 1105 S-Trees 数组模拟建树
- poj3321--Apple Tree(多叉树建树状数组)
- HDU 6096 String 字典树数组建树
- ACM--数组
- 通过前序和中序遍历数组重建树
- 通过前序和后序遍历数组重建树
- HDU 1671 Phone List 二叉树水题 数组建树法
- JD 1009:二叉搜索树(静态数组建树)
- POJ3321 线段树,树状数组 建树经典题
- poj 3321 Apple Tree(树状数组)(区间建树)
- ACM之数组输出
- ACM之数组排序
- acm--数组应用
- ACM-循环数组
- 原来这也叫做建树(利用数组的下标和值来建立关系网)
- Win8 下重装 Chrome 浏览器遇到"糟糕!安装失败。错误代码:0xa0430721。"错误的解决
- 虚幻4引擎可让手机游戏媲美PC游戏画面
- a different object with the same identifier value was already associated with the session
- iOS设置边框、圆角
- Ant——ant的使用
- ACM--Entrophy(哈希+数组 建树)
- 黑马程序员--OC笔记 类
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- iOS开发系列--网络开发(翻译自 KenshinCui)
- Tim Sweeney解释为什么Unreal Engine 4全面转向C++
- C/C++程序设计03(宏,const,sizeof,内联函数)
- vc-找不到预编译头文件
- ant,java构建工具
- iOS开发UI篇—懒加载