練習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。
上一篇 iOS 對堆和棧的理解