練習(xí)2.70
既然要解碼,那必須先將樹給定義好了。
(define tree (generate-huffman-tree ‘((A 2) (NA 16) (BOOM 1) (SHA 3) (GET 2) (YIP 9) (JOB 2) (WAH 1))
然后就是來(lái)編碼題目中給出的歌詞了。
(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)
由于題目中還要求計(jì)算編碼所需的2進(jìn)制位樹,我們可以用length來(lái)計(jì)算。
(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個(gè)數(shù)乘以各自出現(xiàn)的次數(shù)然后相加便是所需的2進(jìn)制位數(shù)了,即84。
如果要采取定長(zhǎng)編碼的話,題目中的8個(gè)字符由于每一個(gè)都要占用到3個(gè)2進(jìn)制位以上,而歌詞中1共用了36個(gè)字符,乘起來(lái)便是用定長(zhǎng)編碼最少需要的2進(jìn)制位數(shù)了,也即便108。