资源简介
使用c++实现的算术编码,从屏幕读入一个字符串并输出十进制及二进制编码,并计算压缩率,字符概率自动统计生成
代码片段和文件信息
#include “arithmetic.h“
void Arithmetic::getProbabilities(char *str) {
char ch;
double lowLevel = 0.0;
double highLevel = 0.0;
double probability;
int freq[128] = {0};
for (int i = 0; str[i]; i++)
freq[str[i]]++;
cout << “The probability of each char: “ << endl;
for (int i = 0; i < 128; i++) {
if (freq[i]) {
ch = (char) i;
probability = (double) freq[i] / (double) strlen(str);
cout << ch << “: “ << probability << endl;
lowLevel = highLevel;
highLevel = lowLevel + probability;
Range range;
range.setLow(lowLevel);
range.setHigh(highLevel);
range.setDelta(probability);
map.insert(std::pair(ch range));
}
}
}
double Arithmetic::encode(string str) {
double lowRange = 0.0 highRange = 1.0;
for (char &i : str) {
// 使用map来通过字符完成概率的查找
// map[*i]表示的就是对应的字符的出现概率
double delta = highRange - lowRange;
highRange = lowRange + delta * map[i].getHigh();
lowRange = lowRange + delta * map[i].getLow();
++length;
}
return lowRange;
}
void Arithmetic::runArithmetic() {
long beginT = clock();
cout << “Please enter a string:“;
char str[1024];
cin>>str;
getProbabilities(str);
long endT = clock();
long costT = endT - beginT;
cout << “Resulting code: “ << encode(str) << endl;
cout << “Binary code: “;
dec2bin(encode(str));
cout< cout << “Compression rate: “ << double(binLength) / double(strlen(str) * 8) << endl;
cout << endl << “Time costs: “ << costT << “ ms“ << endl;
cin.clear();
cin.sync();
}
void Arithmetic::dec2bin(double n) {
stack s;
int m = (int) n;
double t = n - m;//0.4
binLength = 0;
while (m) // 处理整数
{
s.push(m % 2);
m /= 2;
}
while (!s.empty()) {
printf(“%d“ s.top());
s.pop();
}
printf(“0.“);
while (t - int(t) != 0) //处理小数点后的位数,乘2取整法 ,当乘2变为整数后结束
{
int temp = int(t * 2);
printf(“%d“ temp);
binLength++;
t = 2 * t - int(2 * t);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2433 2018-12-22 00:16 arithmetic.cpp
文件 1216 2018-12-21 23:29 arithmetic.h
- 上一篇:自适应哈夫曼编码C++
- 下一篇:C语言课程设计景区管理系统
相关资源
- 自适应哈夫曼编码C++
- C++从入门到精通第三版 清华大学出版
- 五子棋C++代码
- C++课设 简单的投票系统
- 计算机图形学VSC++生成时钟报告含代码
- 基于c++小型公司工资管理系统的设计
- 节约里程法c++实现
- C++学习路线视频全套
- Visual C++ 网络 流量 监控 系统
- C++ 矩阵类 实现常用的矩阵操作
- 计算机图形学直线段的扫描转换C++实
- 50道习题源程序.zip
- RTCM 3.0解码C++代码
- 批量16位图像转8位
- C++数值排序
- C++大作业———医院病人看病情景代
- OpenKE在windows环境下运行的C++动态链接
- 基于Qt5.9Creator的一个简单socket通信C
- 求两点之间所有路径的C++代码
- C++ 跨平台 异步消息队列
- VC++对话框CDialog的全屏显示及控件居中
- VC++中对Access数据库操作
- VC++ OpenGL三维物体建模--雨伞的绘制(
- 马尔科夫链的C++代码实现
- C++课程设计 电煤气管理系统
- 超级效率的FFT的代码(C语言)
- 灰度预测模型C语言源代码
- 仿QQ MFC 程序
- DTW算法 C++实现
- 最简单的C++静态调用DLL
评论
共有 条评论