中南大学计算机体系结构实验报告材料文档格式.docx

上传人:b****2 文档编号:13934835 上传时间:2022-10-15 格式:DOCX 页数:25 大小:418.76KB
下载 相关 举报
中南大学计算机体系结构实验报告材料文档格式.docx_第1页
第1页 / 共25页
中南大学计算机体系结构实验报告材料文档格式.docx_第2页
第2页 / 共25页
中南大学计算机体系结构实验报告材料文档格式.docx_第3页
第3页 / 共25页
中南大学计算机体系结构实验报告材料文档格式.docx_第4页
第4页 / 共25页
中南大学计算机体系结构实验报告材料文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

中南大学计算机体系结构实验报告材料文档格式.docx

《中南大学计算机体系结构实验报告材料文档格式.docx》由会员分享,可在线阅读,更多相关《中南大学计算机体系结构实验报告材料文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

中南大学计算机体系结构实验报告材料文档格式.docx

有一组指令的操作码共分七类,它们出现概率如

下表所示:

P1P2P3P4P5P6P7

0.450.300.150.050.030.010.01

对此组指令进行HUFFMAN编码正如下图所示:

最后得到的HUFFMAN编码如下表所示:

最短编码长度为:

H=0.45*1+0.30*2+0.15*3+0.05*4+0.03*5+0.01*6+0.01*6=-1.95.

要对指令的操作码进行HUFFMAN编码,只要根据指令的各类操作码的出现概率构造HUFFMAN树再进行HUFFAM编码。

此过程的难点构造HUFFMAN树,进行HUFFAM编码只要对你所生成的HUFFMAN树进行中序遍历即可完成编码工作。

三、实验过程

观察上图1,不难看出构造HUFFMAN树所要做的工作:

1、先对各指令操作码的出现概率进行排序,构造一个有序链表。

2、再取出两个最小的概率节点相加,生成一个生的节点加入到链表中,同时从两表中删除此两个节点。

3、在对链表进行排序,链表是否只有一个节点,是则HUFFAN树构造完毕,否则继续做2的操作。

为此设计一个工作链表(链表的元素时类,此类的功能相当结构。

)、HUFFMAN树节点、HUFFMAN编码表节点。

具体如下:

//huff_mantreepoint;

classhuff_p{

public:

huff_p*r_child;

//大概率的节点,即右子节点;

huff_p*l_child;

//小概率的节点,即左子节点;

charop_mask[3];

//指令标号;

floatp;

//指令使用概率;

};

//worklinkpoint

classf_min_p{

f_min_p*next;

floatp;

huff_p*huf_p;

/huff_mancodepoint

classhuff_code{

huff_code*next;

charop_mask[3];

charcode[N];

//huffman编码;

函数说明:

f_min_p*input_instruct_set();

//输入指令集子模块;

huff_p*creat_huffman_tree(f_min_p*head);

//构造huffman树;

f_min_p*fin_min(f_min_p*h);

//在工作链表中寻找最小概率节点函数。

f_min_p*del_min(f_min_p*h,f_min_p*p);

//在工作链表中删除最小概率节点函数。

voidinsert_n(f_min_p*h,f_min_p*p);

//在工作链表中插入两个最小概率节点生成的节点函数。

huff_p*creat_huffp(f_min_p*p);

//生成HUFFMAN节点。

voidcreat_huffman_code(huff_p*h1,huff_code*h);

//生成huffman编码;

voidr_find(huff_p*p1,charcode[],inti,huff_code*h);

//遍历HUFFMAN树生成指令操作码的HUFFMAN编码。

voidoutput_huffman(huff_code*head);

//输出huffman编码;

voidcal_sort_length(huff_code*head);

//计算指令用huffman编码的平均编码字长

程序清单及注释:

#include<

iostream.h>

math.h>

#defineN8

//findtwominprogram;

//huff_mantreepont;

//大概率的节点;

//小概率的节点;

//huff_mancode

voidmain()

{

f_min_p*h,*h1;

huff_p*root;

huff_code*head,*pl;

int

h=input_instruct_set();

/*

p1=h;

while(p1)

cout<

<

p1->

p<

'

'

;

p1=p1->

next;

}

*/

h1=h;

root=creat_huffman_tree(h1);

head=newhuff_code;

head->

next=NULL;

creat_huffman_code(root,head);

output_huffman(head);

cal_sort_length(head);

pl=head->

while(pl)

deletehead;

head=pl;

pl=pl->

f_min_p*input_instruct_set()

f_min_p*head;

f_min_p*h;

h=newf_min_p;

h->

huf_p=NULL;

head=h;

intn;

"

请输入指令数:

cin>

>

n;

请输入指令标号:

op_mask;

请输入指令的使用概率:

p;

f_min_p*point;

f_min_p*p1=head;

for(;

i<

n-1;

i++)

{

point=newf_min_p;

cout<

point->

op_mask[2]='

\0'

next=p1->

next=point;

p1=point;

returnhead;

huff_p*creat_huffman_tree(f_min_p*h)

f_min_p*h1,*min1,*min2,*comb;

huff_p*head,*rd,*ld,*parent;

min1=fin_min(h1);

ld=creat_huffp(min1);

h1=del_min(h1,min1);

if(h1->

next)

min2=fin_min(h1);

else

min2=h1;

rd=creat_huffp(min2);

comb=newf_min_p;

comb->

p=rd->

p+ld->

op_mask[0]='

op_mask[1]='

parent=creat_huffp(comb);

insert_n(h1,comb);

next!

=NULL)

h1=del_min(h1,min2);

parent->

l_child=ld;

r_child=rd;

huf_p=parent;

head=parent;

inti=0;

endl;

while(h1->

{

if(min1->

huf_p==NULL)

ld=creat_huffp(min1);

}

ld=min1->

huf_p;

min2=fin_min(h1);

min2=h1;

if(min2->

}

rd=creat_huffp(min2);

rd=min2->

comb=newf_min_p;

if(h1!

insert_n(h1,comb);

parent->

head=parent;

++i<

next==NULL)break;

dele

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

当前位置:首页 > 高等教育 > 教育学

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

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