实验七Huffman编码的设计与应用.docx

上传人:b****8 文档编号:28651507 上传时间:2023-07-19 格式:DOCX 页数:10 大小:60.88KB
下载 相关 举报
实验七Huffman编码的设计与应用.docx_第1页
第1页 / 共10页
实验七Huffman编码的设计与应用.docx_第2页
第2页 / 共10页
实验七Huffman编码的设计与应用.docx_第3页
第3页 / 共10页
实验七Huffman编码的设计与应用.docx_第4页
第4页 / 共10页
实验七Huffman编码的设计与应用.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验七Huffman编码的设计与应用.docx

《实验七Huffman编码的设计与应用.docx》由会员分享,可在线阅读,更多相关《实验七Huffman编码的设计与应用.docx(10页珍藏版)》请在冰豆网上搜索。

实验七Huffman编码的设计与应用.docx

实验七Huffman编码的设计与应用

深圳大学实验报告

 

课程名称:

数据结构实验与课程设计

实验项目名称:

Huffman编码的设计与应用

学院:

数学与计算科学学院

专业:

数计班

指导教师:

张艳

报告人:

张宏宽学号:

2013190067班级:

数计班

实验时间:

2014/11/7

实验报告提交时间:

2014/11/10

教务部制

实验目的与要求:

实验目的:

1、1、问题描述

给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码。

构造Huffman树时,要求左子树根的权值小于右子树根的权值。

进行Huffman编码时,假定Huffman树的左分支上编码为‘0’,右分支上编码为‘1’。

2、算法

 构造Huffman树算法:

⑴、根据给定的n个权值(w1,w2,…,wn)构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个权值为wi的根结点

⑵、在F中选取两棵根结点的权值最小的树,作为左、右子树构造一棵新的二叉树,且置其根结点的权值为其左、右子树权值之和

⑶、在F中删除这两棵树,同时将新得到的二叉树加入F中

⑷、重复⑵,⑶,直到F只含一棵树为止

Huffman编码算法:

⑴、从Huffman树的每一个叶子结点开始

⑵、依次沿结点到根的路径,判断该结点是父亲结点的左孩子还是右孩子,如果是左孩子则得到编码‘0’,否则得到编码‘1’,先得到的编码放在后面

⑶、直到到达根结点,编码序列即为该叶子结点对应的Huffman编码

Huffman译(解)码算法:

⑴、指针指向Huffman树的根结点,取第一个Huffman码

⑵、如果Huffman码为‘0’,将指针指向当前结点的左子树的根结点;如果Huffman码为‘1’,将指针指向当前结点的右子树的根结点

⑶、如果指针指向的当前结点为叶子结点,则输出叶子结点对应的字符;否则,取下一个Huffman码,并返回⑵

⑷、如果Huffman码序列未结束,则返回⑴继续译码

实验要求:

1、使用Huffman编码算法实现题目的要求。

 

实验内容:

Input

第一行:

样本字符个数,假设为n。

第二行,n个字符(用空格隔开)

第三行,n个字符对应的权值(用空格隔开)

第四行,待编码的字符串

第五行,待译码的Huffman码序列

Output

第一行,每个字符对应的Huffman编码(用空格隔开)

第二行,字符串对应的Huffman编码序列

第三行,Huffman码序列对应的字符串

SampleInput

4

abcd

9326

abcd

111001010

SampleOutput

010110011

010110011

dcba

 

实验过程:

1、实现思想(用文字描述用栈和队列判断回文的思想)

构造Huffman树算法:

⑴、根据给定的n个权值(w1,w2,…,wn)构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个权值为wi的根结点

⑵、在F中选取两棵根结点的权值最小的树,作为左、右子树构造一棵新的二叉树,且置其根结点的权值为其左、右子树权值之和

⑶、在F中删除这两棵树,同时将新得到的二叉树加入F中

⑷、重复⑵,⑶,直到F只含一棵树为止

Huffman编码算法:

⑴、从Huffman树的每一个叶子结点开始

⑵、依次沿结点到根的路径,判断该结点是父亲结点的左孩子还是右孩子,如果是左孩子则得到编码‘0’,否则得到编码‘1’,先得到的编码放在后面

⑶、直到到达根结点,编码序列即为该叶子结点对应的Huffman编码

2、实现代码(核心语句加注释)

#include

#include

usingnamespacestd;

#defineerror-1

#definecorrect1

#definemaxLen15

#definemaxChar10

#definemaxStr100

typedefstruct{

charc;

intweight;

intparent,lchild,rchild;

charcode[maxLen];

}HTNode,*HuffmanTree;

HTNodeHT[2*maxChar];

voidSelect(inti1,int*s1,int*s2)

{

unsignedintj,s;

s=0;

for(j=1;j<=i1;j++){

if(HT[j].parent==0){

if(s==0)s=j;

if(HT[j].weight

}

}

*s1=s;

s=0;

for(j=1;j<=i1;j++){

if((HT[j].parent==0)&&(j!

=*s1)){

if(s==0)s=j;

if(HT[j].weight

}

}

*s2=s;

}

voidCreat(intn,char*c,int*w)

{

inti,m,s1,s2;

m=2*n-1;

for(i=1;i<=n;++i){

HT[i].c=c[i-1];

HT[i].weight=w[i-1];

HT[i].parent=0;

HT[i].lchild=HT[i].rchild=0;}

for(i=n+1;i

HT[i].weight=0;

HT[i].parent=0;

HT[i].lchild=0;

HT[i].rchild=0;

}

for(i=n+1;i<=m;++i){

Select(i-1,&s1,&s2);

HT[s1].parent=i;HT[s2].parent=i;

HT[i].lchild=s1;HT[i].rchild=s2;

HT[i].weight=HT[s1].weight+HT[s2].weight;

}

}

voidCode(intn)

{

inti,j,m,c,f,start;

charcd[maxLen];

m=maxLen;

cd[m-1]=0;

for(i=1;i<=n;i++){

start=m-1;

for(c=i,f=HT[i].parent;f!

=0;c=f,f=HT[f].parent){

if(HT[f].lchild==c)cd[--start]='0';

elsecd[--start]='1';

}

for(j=0;j

HT[i].code[j]=0;

}

}

voidShowCode(intn)

{

inti;

for(i=1;i

cout<

}

intShowEncode(intn,char*eS)

{

inti,j;

for(j=0;j

for(i=1;i<=n;i++){

if(eS[j]==HT[i].c){

cout<

break;

}

}

if(i>n)return(error);

}

cout<

return(correct);

}

intShowDecode(intn,char*dS)

{

inti,c;

intRoot;

Root=2*n-1;

c=Root;

for(i=0;i

if((HT[c].lchild==0)&&(HT[c].rchild==0)){

cout<

c=Root;

}

if(dS[i]=='0'){

if(HT[c].lchild==0)return(error);

c=HT[c].lchild;

}

else{

if(HT[c].rchild==0)return(error);

c=HT[c].rchild;

}

}

cout<

return(correct);

}

intmain()

{

inti,n;

intweight[maxChar];

charc[maxChar],encode[maxLen],decode[maxLen];

cin>>n;

for(i=0;i>c[i];

for(i=0;i>weight[i];

Creat(n,c,weight);

Code(n);

ShowCode(n);

cin>>encode;

ShowEncode(n,encode);

cin>>decode;

ShowDecode(n,decode);

return0;

}

实验结果及分析:

1、测试数据(除给出的测试样例外,自己构造至少2组测试数据,注意考虑非法输入情况)

2、测试结果(给出每组测试数据的运行截图)

3、实验结果分析

深圳大学学生实验报告用纸

实验总结:

指导教师批阅意见:

成绩评定:

指导教师签字:

年月日

备注:

注:

1、报告内的项目或内容设置,可根据实际情况加以调整和补充。

2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1