计算机体系结构实验报告Word文件下载.docx
- 文档编号:17474880
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:16
- 大小:22.52KB
计算机体系结构实验报告Word文件下载.docx
《计算机体系结构实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机体系结构实验报告Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
110
1110
11110
111110
111111
2
3
4
5
6
最短编码长度为:
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_man
tree
point;
class
huff_p{
public:
huff_p*
r_child;
//大概率的节点,即右子节点;
l_child;
//小概率的节点,即左子节点;
c
har
op_mask[3];
//指令标号;
float
p;
//指令使用概率;
};
//work
link
point
f_min_p{
f_
min_p*
next;
huf
f_p*
huf_p;
/huff_man
code
huff_code{
huff_code*
char
code[N];
//huffman
编码;
函数说明:
f_min_p*
input_instruct_set();
//输入指令集子模块;
creat_huffman_tree(f_min_p*
head);
//构造huffman
树;
fin_min(f_min_p*
h);
//
在工作链表中寻找最小概率节点函数。
del_min(f_min_p*
h,f_min_p*
p);
//在工作链表中删除最小概率节点函数。
void
insert
_n(f_min_p*
在工作链表中插入两个最小概率节点生成的节点函
数。
cr
eat_huffp(f_min_p*
//生成HUFFMAN
节点。
creat_huffman_code(huff_p*
h1,huff_code*
//生成huffman
编码;
r_find(huff_p*
p1,char
code[],int
i,huff_code*
//遍历HUFFMAN
树生成指令操作码的HUFFMAN
output_huffman(huff_code*
//输出huffman
cal_sort_length(huff_code*
//计算指令用huffman
编码的平均编码字长
程序清单及注释:
#include<
iostream.h>
math.h>
#define
N
8
//find
two
min
program;
pont;
//大概率的节点;
//小概率的节点;
insert_n(f_min_p*
main()
{
min_p
*h,*h1;
f_p
*roo
t;
f_code*
head,*pl;
int
i=0;
h=input_instruct_set();
/*
p1=
h;
while(p
1)
out<
<
p1->
p<
'
'
;
}
*/
h1=h;
ro
ot=creat_huffman_tree(h1);
head=new
huff_code;
hea
d->
next=NULL;
cre
at_huffman_code(root,head);
output_huffman(head);
al_sort_length(head);
pl=
head->
l)
del
ete
head;
d=pl;
p
l=pl->
input_instruct_set()
h=n
ew
f_min_p;
h->
h
uf_p=NULL;
d=h;
in
t
n;
cout<
"
请输入指令数:
cin>
>
请输入指令标号:
ci
n>
op_mask;
请输入指令的使用概率:
p1=head;
for(;
i<
n-1;
i++)
poi
nt=new
cin
point->
nt->
op_mask[2]='
\0'
huf_p=NULL;
next=p1->
next=point;
return
h)
f_m
in_p
*h1,*min1,*min2,*comb;
head,*rd,*ld,*parent;
m
in1=fin_min(h1);
l
d=creat_huffp(min1);
h1=del_min(h1,min1);
if(h1->
next)
in2=fin_min(h1);
else
in2=h1;
rd=creat_huf
fp(min2);
omb=new
omb->
com
b->
p=rd->
p+ld->
op_mask[0]='
op_mask[1]='
parent=creat_huffp(comb);
i
nsert_n(h1,comb);
next!
=NULL)
h1=del_min(h1,min2);
parent->
l_child=ld;
r_child=rd;
huf_p=parent;
head=parent;
endl;
wh
ile(h1->
if(m
in1->
huf_p==NULL)
ld=creat_huffp(min1);
ld=min1->
min2=fin_min(h1);
min2=h1;
in2->
rd=creat_huffp(min2);
rd=min2->
if(h1!
insert_n(h1,comb);
++i<
if(h
1->
next==NULL)break;
delete
comb;
*h1,*p1;
p1=h1;
fl
oat
min=h1->
h1=h1->
ile(h1)
in>
(h1->
p))
p1;
del_min(
f_min_p
*h,f_min_p
*p)
*p1,*p2;
p2=
if(h==p)
h=
while(p1->
if(p1==p)
p2->
break;
p2=p1;
insert_n(f_min_p
*p1)
next=h->
next=p1;
d)
new
huff_p;
_child=NULL;
r_
child=NULL;
p=d->
op_
mask[0]=d->
op_mask[0];
mask[1]=d->
op_mask[1];
if(p1->
_child)
code[i]='
1'
r_fi
nd(p1->
l_child,code,i+1,h);
o
p_mask[0]!
='
)
p2=new
op_mask[0]=p1->
op_mask[1]=p1->
mask[2]='
p=p1->
for(int
j=0;
j<
i;
j++)
ode[j]=code[j];
code[j]='
next=p2;
r_child)
0'
r_find(
r_child,code,i+1,h);
nd(h1,code,i,h);
head)
uff_code*
h=head->
OP:
--
概率--"
--编码--"
-
--------------------------------"
while(h)
p_mask[2]='
op_mask<
:
code<
h=h->
-------
--------------------------"
f_code
*h=head->
double
one_length=0;
per_length=0;
ext_length=0;
//按1-2-3-5
扩展编码的最小长度为。
length=0;
while(h->
code[
i]!
len
gth++;
i++;
one
_length=h->
p*length;
per_l
ength=per_length+one_length;
j++;
i1=int(j);
huff_code
*p2=head->
oat*
p_a=new
float[i1];
//sor
指令概率
i0=0;
2)
p_a
[i0++]=p2->
max,temp;
l;
s=0;
s<
i1;
s++)
ax=p_a[s];
l=s;
k=s+1;
k<
k++)
if
(max<
p_a[k])
ax=p_a[k];
l=k;
tem
p=p_a[s];
p_a[s]=max;
[l]=temp;
计算1-2-3-5
扩展编码的最短平均长度
code_len=new
co
de_len[0]=1;
de_len[1]=2;
de_len[2]=3;
de_len[3]=5;
i=4;
j;
i++)code_len[i]=5;
l=0;
while(l
i1)
ext
_length=ext_length+code_len[l]*p_a[l];
l++;
//计算等长编码平均长度;
q_length=log10(j)/log10
(2);
此指令集操作码huffman
编码的平均长度为:
per_length<
等长编码的平均长度为:
q_length<
按1-2-3-5
的扩展编码的最短平均编码长度为:
ext_length;
if(q_l
ength>
per_length)
可见HUFFMAN
编码的平均长度要比等长编码的平均长度短"
ut<
huffman
编码有问题请仔细查看算法,以及输入的指令集的概率之和是否大
于1。
if(ext
_length>
编码的平均长度要比1-2-3-5
扩展编码的最短平均长度短
实验二
使用LRU算法更新Cache
一、实验目的
了解和掌握寄存器分配和内存分配的有关技术。
程序1
结合数据结构的相关知识,使用
LRU
的策略,对一组访问序列进行内部的
Cache
更新
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机体系结构 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)