霍夫曼编码a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);b.统计各种符号出现的频度;c.进行Huffman编码(以二进制01代码输出);d.以上一步的输出(
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/17 19:36:55
![霍夫曼编码a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);b.统计各种符号出现的频度;c.进行Huffman编码(以二进制01代码输出);d.以上一步的输出(](/uploads/image/z/11079614-38-4.jpg?t=%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81a.%E9%9A%8F%E6%9C%BA%E8%BE%93%E5%85%A5%E4%B8%80%E6%AE%B5%E8%8B%B1%E6%96%87%28%E5%90%AB%E6%A0%87%E7%82%B9%E3%80%81%E7%A9%BA%E6%A0%BC%E4%BB%A5%E5%8F%8A%E5%A4%A7%E5%B0%8F%E5%86%99%E7%9A%84%E5%8C%BA%E5%88%86%2C%E6%A0%87%E7%82%B9%E4%BB%85%E9%99%90%E9%80%97%E5%8F%B7%E2%80%9C%2C%E2%80%9D%E5%92%8C%E5%8F%A5%E7%82%B9%E2%80%9C.%E2%80%9D%29%EF%BC%9Bb.%E7%BB%9F%E8%AE%A1%E5%90%84%E7%A7%8D%E7%AC%A6%E5%8F%B7%E5%87%BA%E7%8E%B0%E7%9A%84%E9%A2%91%E5%BA%A6%EF%BC%9Bc.%E8%BF%9B%E8%A1%8CHuffman%E7%BC%96%E7%A0%81%EF%BC%88%E4%BB%A5%E4%BA%8C%E8%BF%9B%E5%88%B601%E4%BB%A3%E7%A0%81%E8%BE%93%E5%87%BA%EF%BC%89%EF%BC%9Bd.%E4%BB%A5%E4%B8%8A%E4%B8%80%E6%AD%A5%E7%9A%84%E8%BE%93%E5%87%BA%EF%BC%88)
霍夫曼编码a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);b.统计各种符号出现的频度;c.进行Huffman编码(以二进制01代码输出);d.以上一步的输出(
霍夫曼编码
a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);
b.统计各种符号出现的频度;
c.进行Huffman编码(以二进制01代码输出);
d.以上一步的输出(二进制序列)作为输入进行解码,恢复原英文;
e.比较输入和输出,统计出错的个数.
霍夫曼编码a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);b.统计各种符号出现的频度;c.进行Huffman编码(以二进制01代码输出);d.以上一步的输出(
# include <stdio.h>
# include <string.h>
# include <conio.h>
main()
{
int i,k,j=0,w,r,m,n,x,v;
char bian[30]="110111100110111100";
char a[4]="110";/*a的霍夫曼编码*/
char b[4]="111";/*b的霍夫曼编码*/
char c[4]="10";/*c的霍夫曼编码*/
char d[4]="0";/*d的霍夫曼编码*/
m=strlen(a);
n=strlen(b);
x=strlen(c);
v=strlen(d);
char temp[4],shou[8];
r=strlen(bian);
for(i=0;i<r;)/*外层循环用于控制解码进度*/
{
temp[0] = temp[1] = temp[2] = 0;
for(k=0;k<3;k++)/*里层用于具体解析每个字符编码*/
{
w=i+k;
temp[k]=bian[w];
if(strncmp(temp,a,m)==0)/*判断编码是否为a*/
{
shou[j]='a';/*shou数组用于存储解析出来的字符*/
j++;
i=i+k+1;
break;/*如果解析成功就跳出里层循环,继续解析下一个编码*/
}
else if(strncmp(temp,b,n)==0)/*判断编码是否为b*/
{
shou[j]='b';
j++;
i=i+k+1;
break;
}
else if(strncmp(temp,c,x)==0)/*判断编码是否为c*/
{
shou[j]='c';
j++;
i=i+k+1;
break;
}
else if(strncmp(temp,d,v)==0)/*判断编码是否为d*/
{
shou[j]='d';
j++;
i=i+k+1;
break;
}
else
continue;/*如果都不是就再取出一个编码,再与abcd的字符编码相比*/
}
}
for(i=0;i<8;i++)
printf("%c",shou[i]);
return 0;
}