程序员人生 网站导航

【SICP练习】97 练习2.70

栏目:php教程时间:2015-04-03 08:45:01

练习2.70

既然要解码,那必须先将树给定义好了。

(define tree (generate-huffman-tree((A 2) (NA 16) (BOOM 1) (SHA 3) (GET 2) (YIP 9) (JOB 2) (WAH 1))

然后就是来编码题目中给出的歌词了。

(define message(Get a job)) (define message(Sha na na na na na na na na)) (define message(Wah yip yip yip yip yip yip yip yip yip)) (define message(Sha boom)) (encode message tree) ;Value: (1 1 0 0 1 1 1 1 0 1 1 1 1 1) (encode message tree) ;Value: (1 1 1 0 0 0 0 0 0 0 0 0) (encode message tree) ;Value: (1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0) (encode message tree) ;Value: (1 1 1 0 1 1 0 1 1)

由于题目中还要求计算编码所需的2进制位树,我们可以用length来计算。

(length (encode message tree)) ;Value: 14 (length (encode message tree)) ;Value: 12 (length (encode message tree)) ;Value: 23 (length (encode message tree)) ;Value: 9

因此将这4个数乘以各自出现的次数然后相加便是所需的2进制位数了,即84。
如果要采取定长编码的话,题目中的8个字符由于每一个都要占用到3个2进制位以上,而歌词中1共用了36个字符,乘起来便是用定长编码最少需要的2进制位数了,也即便108。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐