早教吧作业答案频道 -->其他-->
霍夫曼编码 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语言程序 求能...的网友还看了以下:
下列关于汉字编码的叙述中,错误的是A)BIG5码通行于香港和台湾地区的繁体汉字编码B)一个汉字的区位 2020-03-30 …
CRC循环冗余校验码的计算CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验 2020-07-01 …
现有20个符号,并采用定长的编码的方法对其进行编码,则编码后的二进制码的长度为A.3B.4C.5D 2020-07-01 …
海明码的例题某机器码码字长15位,采用了海明码校应.设码字从左到右编号为b1b2、、、b15.某汉 2020-07-01 …
在弹簧秤的测量范围内,弹簧秤下面挂一个砝码时长度为5厘米,挂2个砝码时长度为6厘米,挂4个相同的砝 2020-07-11 …
软件工程导论某宾馆的电话服务如下:可以拨分机号和外线号,分机号从8201到8299,拨外线需要先按 2020-07-19 …
1.写出创建如下三张数据表的SQL语句“教师表”表结构:教师号:普通编码定长字符类型,长度为10, 2020-07-31 …
某企业的会计科目编码规则3一2一2一2一2,则其采用的科目编码方式是()。A.代码总长度、级数及每级 2020-11-21 …
弹簧的伸长与下面所挂砝码的重量成正比例,已知弹簧挂20g重的砝码时长度为12cm挂35g重的砝码时长 2020-12-19 …
什么是码元?码元:在数字通信中常常用时间间隔相同的符号来表示一位二进制数字,这样的时间间隔内的信号称 2021-01-12 …