国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > php教程 > 【SICP练习】97 练习2.70

【SICP练习】97 练习2.70

来源:程序员人生   发布时间:2015-04-03 08:45:01 阅读次数:3399次

练习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。

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生