哈弗曼编码实现Word文件下载.docx
- 文档编号:16042427
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:10
- 大小:16.91KB
哈弗曼编码实现Word文件下载.docx
《哈弗曼编码实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《哈弗曼编码实现Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
3
b:
2
c:
4
d:
10
构造出哈夫曼树
011
b:
010
c
:
00
1
下面主要通过两个结构体数组来实现:
structnode1
{
intw,lch,rch,parent;
}ht[2*N0-1+1];
数组下标
2
3
4
5
6
7
父节点的数组下标parent
左孩子节点的数组下标lch
右孩子节点的数组下标rch
权值w
-》
-》.。
。
9
19
structnode2
charch;
//对应的字符abcd
intstart;
//编码的起始位置注意这个编码是倒着的所以这里用start
intcode[N0];
//这个是编码数组
}hc[N0+1];
大概图如下面
下面给出大家想要的程序部分
viewplaincopytoclipboardprint?
//#include
"
stdio.h"
string.h
#include
<
iostream>
string>
const
int
N0=10;
N=100;
INF=1000000;
struct
node1
w,
lch,
rch,
parent;
node2
char
ch;
start;
code[N0];
n,root;
//n为叶子的个数
void
readData()
num[256]={
0
};
n=0;
freopen(
huffman.in"
r"
stdin);
//读文本文件
while(
(ch=getchar())
!
=
EOF
)
num[ch]++;
for(
i=0;
i<
=255;
i++
if(
num[i]
n++;
ht[n].w=num[i];
hc[n].ch=i;
}
select1(
t,
*s1,
*s2)//用两个数来记录没有在树上的最小的两个值,从而进一步生成树。
w1,w2;
w1=w2=INF;
i=1;
=t;
ht[i].parent==0
ht[i].w<
w1
w2=w1;
*s2=*s1;
w1=ht[i].w;
*s1=i;
else
w2
w2=ht[i].w;
*s2=i;
createHufTreeHuCode()
i,
s1,
s2;
child,
root=2*n-1;
i=n+1;
=root;
i++)
select1(i-1,
&
s2
);
ht[i].w=ht[s1].w+ht[s2].w;
ht[i].lch=s1;
ht[i].rch=s2;
ht[s1].parent=ht[s2].parent=i;
=n;
child=i;
child
root
parent=ht[child].parent;
ht[parent].lch==child
hc[i].code[hc[i].start++]=0;
hc[i].code[hc[i].start++]=1;
child=parent;
txt2code()
i,j,m;
ch1[N+1]={0};
for
(int
k=1;
k<
N+1;
k++)
scanf("
%c"
&
ch1[k]);
j=1,i=1;
=N;
if
(ch1[i]==0)
break;
while
(ch1[i]!
=hc[j].ch)
(hc[j].ch==0)
{continue;
j++;
m=hc[j].start-1;
m>
=0;
m--)
printf("
%d"
hc[j].code[m]);
j=1;
main()
readData();
createHufTreeHuCode();
freopen("
huffman.out"
w"
stdout);
txt2code();
return
0;
二、译码
给定2个输入文件,第1个输入文件是用于通信的英文电文,统计该电文中每个字符出现的频率,按频率左小右大的方法为这些字符建立哈夫曼(Huffamn)树,并编出每个字符的哈夫曼树码;
第2个输入文件是已经按第1个输入文件的英文电文编好的哈夫曼码,输出该哈夫曼码的对应的英文电文。
第1个输入文件为huffman.in是用于通信的英文电文,第2个输入文件codeToTxt.in是已经按第1个输入文件编好的哈夫曼码。
输出文件codeToTxt.out输出codeToTxt.in文件内容的英文电文。
codeToTxt.in
codeToTxt.out
adddaccdddbacbcdddd
n,root,num[256];
//同时得到了两个东西,一个是字符,一个是个数
//个数
//字符
*s2)
i-1,
hc[i]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈弗曼 编码 实现