早教吧作业答案频道 -->其他-->
霍夫曼编码 c语言程序 求能运行的能算出结果的已知信源:s1=0.20,s2=0.18,s3=0.17,s4=0.15,s5=0.15,s6=0.05,s7=0.05,s8=0.05,给出其中一个霍夫曼码,并求其平均码长和编码效率.
题目详情
霍夫曼编码 c语言程序 求能运行的能算出结果的
已知信源:s1=0.20,s2=0.18,s3=0.17,s4=0.15,s5=0.15,s6=0.05,s7=0.05,s8=0.05,给出其中一个霍夫曼码,并求其平均码长和编码效率.
已知信源:s1=0.20,s2=0.18,s3=0.17,s4=0.15,s5=0.15,s6=0.05,s7=0.05,s8=0.05,给出其中一个霍夫曼码,并求其平均码长和编码效率.
▼优质解答
答案和解析
#include "stdio.h"
#include "stdlib.h"
#include
#include
#define n 8
#define m 2*n-1
typedef struct
{
float weight;
int lchild,rchild,parent;
}HTNode;
typedef HTNode HuffmanTree[m];
void InitHuffmanTree(HuffmanTree T)
{
for(int i = 0;i < m;i++)
{
T[i].lchild = T[i].rchild = T[i].parent = -1;
T[i].weight = 0.0;
}
}
void InputWeight(HuffmanTree T)
{
float temp[n] = {0.20,0.18,0.17,0.15,0.15,0.05,0.05,0.05};
for(int i = 0;i < n;i++)
T[i].weight = temp[i];
}
void SelectMin(HuffmanTree T,int i,int *p1,int *p2)
{
int j;
*p1 = *p2 = m-1;
T[m-1].weight = FLT_MAX;
for(j = 0;j = 0;j--)
printf("%d",arr[j]);
printf("\n");
return count;
}
int main()
{
HuffmanTree T;
CreateHuffmanTree(T);
float ave = 0;
for(int i = 0;i < n;i++)
ave += T[i].weight*PrintHuffmanCode(T,i);
printf("平均码长:\t%f\n",ave);
printf("编码效率:\t%f%%\n",ave/ceil(log((double)n)/log((double)2))*100);
system("pause");
}
#include "stdlib.h"
#include
#include
#define n 8
#define m 2*n-1
typedef struct
{
float weight;
int lchild,rchild,parent;
}HTNode;
typedef HTNode HuffmanTree[m];
void InitHuffmanTree(HuffmanTree T)
{
for(int i = 0;i < m;i++)
{
T[i].lchild = T[i].rchild = T[i].parent = -1;
T[i].weight = 0.0;
}
}
void InputWeight(HuffmanTree T)
{
float temp[n] = {0.20,0.18,0.17,0.15,0.15,0.05,0.05,0.05};
for(int i = 0;i < n;i++)
T[i].weight = temp[i];
}
void SelectMin(HuffmanTree T,int i,int *p1,int *p2)
{
int j;
*p1 = *p2 = m-1;
T[m-1].weight = FLT_MAX;
for(j = 0;j = 0;j--)
printf("%d",arr[j]);
printf("\n");
return count;
}
int main()
{
HuffmanTree T;
CreateHuffmanTree(T);
float ave = 0;
for(int i = 0;i < n;i++)
ave += T[i].weight*PrintHuffmanCode(T,i);
printf("平均码长:\t%f\n",ave);
printf("编码效率:\t%f%%\n",ave/ceil(log((double)n)/log((double)2))*100);
system("pause");
}
看了 霍夫曼编码 c语言程序 求能...的网友还看了以下:
等比数列S2=4,S4=20,除了用公式意外,怎嘛用S4,S4-S2,S2这样算 2020-03-31 …
火车出轨胶济铁路发生一起重大列车相撞事故.现在假设事故发生的铁路弯道处,外轨比内轨高(h)=7cm 2020-04-05 …
关于哈夫曼树、最优二叉树、哈夫曼算法,有以下说法:①最优二叉树的形态不唯一,但是其WPL值是唯一确 2020-05-26 …
假如地球自转速度达到赤道上的物体“飘”起(即完全失重),那么估算一下,地球上一天等于多少小时(单位 2020-06-05 …
孙子兵法之困惑一孙子兵法曰:夫庙算胜者,得算多也……多算胜,少算不胜,而况无算乎?又云:故用兵之法 2020-07-05 …
已知地球的半径R=6.4×106m,地面附近的重力加速度g=9.8m/s2,计算在距离地面高为h= 2020-07-18 …
两人掷一枚硬币.直到第一次出现正正正或正反正.若先出现正正正则A赢,正反正则B赢.问A赢概率.要求 2020-07-23 …
工程测量题,帮忙做下用钢尺丈量三段距离S1=60.25m士6cm,S2=80.30m土7cm,S3 2020-08-02 …
如图所示,我们常见有这样的杂技表演:四个人A、B、C、D体型相似,B站在A的肩上,双手拉着C和D,A 2020-10-31 …
假如地球自转速度达到赤道上的物体“飘”起(即完全失重),那么估算一下,地球上一天等于多少小时(单位用 2020-11-08 …