复习下吧。4月份考试延迟了,但总归还是要考的,这些都是在补4月份没有复习到的部分。工作越忙,越能体会到复盘重要性。时间上挤挤,少一些内耗,多少都会有所收获。
如题:2021年4月
分析
这两问,相对来说还是比较简单的。
基本知识
定长码
操作码的位数是固定的。题目说是8条指令,那么用 l o g 2 8 = 3 log_28=3 log28=3位就可以表示这8条指令,那么码长就是3位。
操作码信息源熵
书中给出的定义为:信息源所含的平均信息量。也就是码长的最小理论值。公式为: H = − ∑ i = 1 n p i ∗ l o g 2 p i H=-\sum_{i=1}^np_i*log_2p_i H=−∑i=1npi∗log2pi//pi表示的就是使用频度。题目中H=-(0.2*log_2 0.2+0.3*log_2 0.3+0.05*log_2 0.05+0.12*log_2 0.12+0.15*log_2 0.15+0.08*log_2 0.08+0.04*log_2 0.04+0.06*log_2 0.06)=-(-0.0464-0.521-0.216-0.367-0.41-0.291-0.186-0.244)=2.281
信息冗余率
冗余的码长占的实际平均码长的比。也就是 实际平均码长 − H 实际平均码长 = 3 − 2.281 3 = 0.2396 = 24 % \frac{实际平均码长-H}{实际平均码长}=\frac{3-2.281}{3}=0.2396=24\% 实际平均码长实际平均码长−H=33−2.281=0.2396=24%
采用哈夫曼树的码长,本题考点,第一问
构造哈夫曼树的话,就是先排序,按照从小到大选两个,然后求和,从队列中删除这两个值,将它们的和插入到队列中,再选两个最小的。
容易错的地方就是将产生的中间和插入到队列后,没有把它比较最小两个值。
画出来,基本上就是这样的子的,方框表示的就是实际的指令使用频度,然后求其平均码长 $H=\sum_{i=1}^n p_i*l_i$//li:表示的就是指令的编码长度,如0.3,从1数要走两步才能到0.3,所以0.3的码长为2.
| 0.04 | 0.05 | 0.06 | 0.08 | 0.12 | 0.15 | 0.2 | 0.3 |
|---|---|---|---|---|---|---|---|
| 4 | 4 | 4 | 4 | 3 | 3 | 2 | 2 |
平均码长=4*(0.04+0.05+0.06+0.08)+3*(0.12+0.15)+2*(0.2+0.3)=0.92+0.81+1=2.73,这个是哈夫曼理论值。
从这里可以看出,采用哈夫曼编码后,信息冗余率为: 实际平均码长 − H 实际平均码长 = 2.73 − 2.281 2.73 = 0.1644 = 16 \frac{实际平均码长-H}{实际平均码长}=\frac{2.73-2.281}{2.73}=0.1644=16% 实际平均码长实际平均码长−H=2.732.73−2.281=0.1644=16,可见,哈夫曼提高了信息有效访问率。对于只有8条指令来说,哈夫曼有3种不同码长,码长种类还是比较多的,实际使用不太适用;所以出来扩展操作码编码。
为什么平均码长是和频度相关?
并不是想像中的把所有的码长加起来再除以个数。而是与使用频度*码长,这个就要理解什么是使用频度了,其实就是这个指令出现的概率。这个可以说是更科学的,如果只是把码长加起来除以个数,那么当后面再出现别的指令时,这个平均码长还是要变的。而知道概率会平均码长就确定了。
扩展操作码编码,第二问考点
先说下扩展操作码编码原理:如何减少不同码长的种类呢?可以将使用频度高的前几种指令编为一组,使用同一种码长,然后在此码长的基础上,码长留出扩展位(1位或几位)表示扩展,扩展后的位表示使用频度低的指令。
从题意已知条件可知,采用两种码长,使得操作码平均码长最短,并求出平均码长。从使用频度来说,哈夫曼码长前四种使用频度为0.77,前三种使用频度为0.65?那么如何编码呢?如果哈夫曼前三种频度的指令编为一种码长的话,需要 l o g 2 3 = 2 log_23=2 log23=2,后面五种指令编为一种码长,需要 l o g 2 5 = 3 log_25=3 log25=3,也就是说扩展码为3位;所以后面5条指令需要码长为3+2位编码,所以平均码长为=2*0.65+5*0.35=3.05。
如果取前四种频度指令为一种码长,需要2位,后面四种指令,也是需要2位,所以后面四条指令需要4位编码,但没有考虑扩展标志位,扩展标志位一般是取最后最短编码的最后一个数的方式,那么这样的方式的话,最后一个数表示的实际的指令,就无法作为扩展标志数了,所以这种方式不可行;只能取上面的方式。
本文分析了哈夫曼编码在2021年4月考试中的考点,包括定长码、信息源熵、信息冗余率以及哈夫曼树的码长。哈夫曼编码能够降低信息冗余率,提高信息有效访问率,但其码长种类较多,可能不适用于实际操作码编码。扩展操作码编码则通过减少码长种类来优化这一问题。
437

被折叠的 条评论
为什么被折叠?



