高程中求平均指令数的正解!

千里之外-pongphy 2003-10-17 11:03:56

指令平均码长 ,1)4, 2)3.8
-----------
只可能(2*3 + 12 * 4 ) / 14 = 3.85
通过认真测算,结果改为3.8,其他不可能,
我也错了,非常不愿此发生.

下面为细节:

三位指令有(2个指令):
 000
001

四位有(12个指令)

010 0
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
所以刚好能完成14个指令,其他任何方式均不可,
  2 * 3 + 12 * 4 = 54
平均54/14=3.8XX 


请讨论.

...全文
46 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
唯一问题的是:
这样指令编码没有太多规律.
  • 打赏
  • 举报
回复
同意如下的指令长度:(三三)
------------------------------------
具体如下:
I R Length strings
1 0.15 3 0.45 011
2 0.15 3 0.45 010
3 0.14 3 0.42 001
4 0.13 3 0.39 111
5 0.12 3 0.36 110
6 0.11 3 0.33 101
7 0.04 4 0.16 1001
8 0.04 5 0.2 00011
9 0.03 5 0.15 00010
10 0.03 5 0.15 00001
11 0.02 5 0.1 00000
12 0.02 5 0.1 10001
13 0.01 6 0.06 100001
14 0.01 6 0.06 100000
powersaving 2003-10-18
  • 打赏
  • 举报
回复
答 visualizer(周)
Length就是Strings的长度。
liupenghui 2003-10-18
  • 打赏
  • 举报
回复
3.4左右。
visualizer 2003-10-18
  • 打赏
  • 举报
回复

是不是在计算机组成原理的书上有 编码的相关知识?
  • 打赏
  • 举报
回复
3 ---- 8
4-----6
这样就无法区分两种指令.
或两种指令的编码重复
如: 
000
:
111
四个bits的指令如何编码?
无论如何要留一个给四bits指令,
比如 111
这样4bits指令从1110开始到1111
只有8+2=10钟指令,所以不能满足.

其他的组合同理,均不能满足.






Imyouyou 2003-10-17
  • 打赏
  • 举报
回复
不对吧,我想是前8个3位编码,后6个4位编码
计算结果是:8*3+6*4=48
平均码长是:48/14=3.4
xtyqzp 2003-10-17
  • 打赏
  • 举报
回复
希望你是对的,我就是蒙的4和3.8。
ding
  • 打赏
  • 举报
回复
此题不是太难,没学过指令集编排的一般不会.
即使如此,在短时间内做出实属不易.
xiepengtao 2003-10-17
  • 打赏
  • 举报
回复
具体怎么算记不清了,那时候估了下,3.4左右。
visualizer 2003-10-17
  • 打赏
  • 举报
回复
powersaving(三三):
你的 length 如何算得?
visualizer 2003-10-17
  • 打赏
  • 举报
回复
以上我提供的数据,肯定正确,因为我在考场上就这个题卡壳了,我记得一清二楚,
还有这个数据也比较有规律,很容易记
powersaving 2003-10-17
  • 打赏
  • 举报
回复
具体如下:
I R Length strings
1 0.15 3 0.45 011
2 0.15 3 0.45 010
3 0.14 3 0.42 001
4 0.13 3 0.39 111
5 0.12 3 0.36 110
6 0.11 3 0.33 101
7 0.04 4 0.16 1001
8 0.04 5 0.2 00011
9 0.03 5 0.15 00010
10 0.03 5 0.15 00001
11 0.02 5 0.1 00000
12 0.02 5 0.1 10001
13 0.01 6 0.06 100001
14 0.01 6 0.06 100000
-------------------------
3.38
powersaving 2003-10-17
  • 打赏
  • 举报
回复
按visualizer(周)的数据用Huffman算出得3.38。
如果数据肯定正确的话,那么3.4就是正确答案了。

55……
qiangshenglin 2003-10-17
  • 打赏
  • 举报
回复
如果是visualizer(周)兄给出的数字的话,那按照我得方法算出的是:3*0.84+6*0.16=3.48
visualizer 2003-10-17
  • 打赏
  • 举报
回复
0.15
0.15
0.14
0.13
0.12
0.11
0.04
0.04
0.03
0.03
0.02
0.02
0.01
0.01
qiangshenglin 2003-10-17
  • 打赏
  • 举报
回复
恩,我只记得前六个加起来是0.8,后面8个加起来是0.2。然后我是用前6个用三位数字表示,后个也是三个数字表示,所以后面的8个数字就是应该用3+3=6个数字表示了。再来就是:3*0.8+6*0.2=3.6。大家感觉怎么样?考虑到其实前面可以放8个数字的,只需要留一个组合和后面的三位数字联合表示剩下的6个。应该是:3*0.9+6*0.1=3.3。但是应该要小于0.9的,所以就是3.4了。
按照楼主的方法是:3*0.3+4*0.7=3.7
不过主要的问题是这个权应该怎么考虑的问题。但是楼主给出的方法完全没有考虑权,这与huffman编码的精神是违背的,我觉得不成立。
wildalgorithm 2003-10-17
  • 打赏
  • 举报
回复
我是用哈夫慢老老实实算的,最后是59/14=4.2所以选了D,现在我觉得肯定是错了,哈副满是最优编码方式,怎么会比上一问的4还长0.2???
meiwenhua 2003-10-17
  • 打赏
  • 举报
回复
计算结果是:8*3+6*4=48
平均码长是:48/14=3.4
powersaving 2003-10-17
  • 打赏
  • 举报
回复
但是题目问的是扩展操作码的平均码长,以上讨论的是用Huffman方法得到的指令编码,这能得到最小的平均码长。
但实际使用起来因为操作码规整性差,不利于译码硬件设计。
扩展操作码方法的平均码长一般大于或等于全Huffman方法的平均码长。
加载更多回复(11)

2,947

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧