Wednesday, March 10, 2010

Generate a Huffman-tree (Ex2.69 SICP)

(define (generate-huffman-tree pairs)
    (successive-merge (make-leaf-set pairs)))

(define (successive-merge set)
    (if (= (length set) 1) set
        (successive-merge (adjoin-set
                   (make-code-tree (car set) (cadr set))
            (cddr set)))))

番号付きSETを使い、処理中要素の中身の非対称に気にしなければ上記のように簡単にできる。

It is very easy to implement if used ordered set and do not mind asymmetry of the elements
during the processing.

利用有序集合并不介意处理过程中元素的不对称的话,可以如上简单地生成霍夫曼树。