资源简介

本程序是在三种编码的过程中提取相应的参数,输出显示,比较三种编码。使用文件操作

资源截图

代码片段和文件信息

#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


评论

共有 条评论