资源简介
本程序是在三种编码的过程中提取相应的参数,输出显示,比较三种编码。使用文件操作
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct message{ //存放信源一个消息及频率
char x;
double px;
};
void shannon(message data[]int n); //香农编码
void fano(message data[]int n); //费诺编码
void huff(message data[]int n); //赫夫曼编码
bool cmp(message amessage b); //比较函数,sort调用
int main ()
{
message data[26];
int n=0;
ifstream infile(“d:\\data.txt“);
while(!infile.eof())
{
infile>>data[n].x;
infile>>data[n].px;
n++;
}
infile.close();
sort(datadata+ncmp);
cout<<“香农编码:“< shannon(datan);
cout< cout<<“费诺编码:“< fano(datan);
cout< cout<<“哈夫曼编码:“< huff(datan);
cout< return 0;
}
void shannon(message data[]int n)
{
int p[26]; //存放每个信源编码后的长度
double sum=0; //前i个概率相加
double wordAvg=0.0; //存放平均码长
for(int i=0;i {
p[i]=-log(data[i].px)/(log(2.0));
wordAvg+=p[i]*data[i].px;
}
cout<<“香农编码后的信源长度:“< cout<<“编码后平均码长:“< }
void fano(message data[]int n)
{
void function_fano(message data[]int mint nint p[]); //费诺编码核心函数
int p[26]={0}; //存放每个信源编码后的长度
double wordAvg=0.0; //存放平均码长
function_fano(data0np);
for(int i=0;i {
wordAvg+=p[i]*data[i].px;
}
cout<<“费诺编码后信源长度:“< cout<<“编码后平均码长:“< }
void huff(message data[]int n)
{
int p[26]={0}; //存放每个信源编码后的长度
int m[26]={0}; //标记变量
double wordAvg=0.0; //存放平均码长
for(int i=n-2;i>=0;i--)
for(int j=n-1;j>=i;j--)
p[j]++;
for(int i=0;i wordAvg+=p[i]*data[i].px;
cout<<“哈夫曼编码后信源长度:“< cout<<“编码后平均码长:“< }
bool cmp(message amessage b)
{
return (a.px-b.px>0);
}
void function_fano(message data[]int mint nint p[]) //费诺编码核心函数
{
if((n-m)==1){
p[m]++;
p[n]++;
return ;
}
double sum=0.0;
for(int i=m;i sum+=data[i].px;
double sum1=0.0;
for(int i=m;i {
sum1+=data[i].px;
p[i]++;
if(sum1>=sum/2)
{
function_fano(datamip);
function_fano(datai+1np);
break;
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 46 2017-06-11 22:41 香农费诺哈夫曼编码结果分析\data.txt
文件 351 2017-06-11 22:48 香农费诺哈夫曼编码结果分析\使用说明.txt
文件 2381 2017-05-16 22:12 香农费诺哈夫曼编码结果分析\香农费诺哈夫曼编码码字结果分析.cpp
目录 0 2017-06-11 22:42 香农费诺哈夫曼编码结果分析
----------- --------- ---------- ----- ----
2778 4
- 上一篇:aes加密算法源码
- 下一篇:2013中国海洋大学计算机复试最新上机资料
相关资源
- c++ 哈夫曼编译码器
- c++自适应哈夫曼编码
- 哈夫曼压缩与解压算法(可以直接运
- c语言哈夫曼编码及译码
- 游程哈夫曼编码结合
- c语言哈夫曼编码编码+译码,有注释
- 哈夫曼编码译码
- 信息论实验报告包括求信息量、香农
- 哈夫曼树及其编码
- 对26个英文字母进行哈夫曼编码
- 信息论与编码实验报告含代码 哈弗曼
- 哈夫曼编码解码的实现及运行截图C语
- 哈夫曼编码译码器绝对可以运行c语言
- 哈夫曼树设计——利用哈夫曼编码进
- 数据结构C语言之哈夫曼编码
- 费诺编码的C语言实现
- 自适应哈夫曼编码C++
- c语言哈夫曼树课程设计
- 哈夫曼树 C++算法
- 哈夫曼编码与解码(C语言实现)
- 用哈夫曼编码实现文件压缩代码+报告
- 哈夫曼编码译码器 C语言 数据结构课
- 哈夫曼编码与译码附报告
- 哈夫曼编码系统C语言实现
- 数据结构哈夫曼编码译码C语言版程序
- C语言-哈夫曼编码实验报告
- 基于哈夫曼编码的文件压缩解压程序
- c语言 实现费诺编码
- 哈夫曼树的应用和实现 C语言
- 哈夫曼编码译码器实验报告内
评论
共有 条评论