<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理
        來(lái)自sicp的完整代碼,包括書中給出的代碼以及習(xí)題,實(shí)現(xiàn)了huffman樹(shù)的生成、解碼、編碼過(guò)程,總共67行代碼,同樣的代碼有空用java、ruby改寫下,看看會(huì)有什么不同。
    (define (make-leaf symbol weight)
      (list 
    'leaf symbol weight))
    (define (leaf? object)
      (eq? (car object) 
    'leaf))
    (define (symbol-leaf x) (cadr x))
    (define (weight
    -leaf x) (caddr x))
    ;合并最低權(quán)重的兩個(gè)節(jié)點(diǎn)
    (define (make
    -code-tree left right)
      (list left right (append (symbols left) (symbols right)) (
    + (weight left) (weight right))))
    (define (left
    -branch tree) (car tree))
    (define (right
    -branch tree) (cadr tree))
    (define (symbols tree)
      (
    if (leaf? tree)
          (list (symbol
    -leaf tree))
          (caddr tree)))
    (define (weight tree)
      (
    if (leaf? tree)
          (weight
    -leaf tree)
          (cadddr tree)))
    ;解碼
    (define (decode bits tree)
      (define (decode
    -1 bits current-branch)
        (
    if (null? bits)
            
    '()
            (let ((next-branch
                  (choose
    -branch (car bits) current-branch)))
              (
    if (leaf? next-branch)
                  (cons (symbol
    -leaf next-branch)
                        (decode
    -1 (cdr bits) tree))
                  (decode
    -1 (cdr bits) next-branch)))))
      (decode
    -1 bits tree))
    (define (choose
    -branch bit branch)
      (cond ((
    = bit 0) (left-branch branch))
            ((
    = bit 1) (right-branch branch))
            (
    else (display "bad bit --CHOOSE-BRANCH"))))
    (define (adjoin
    -set x set)
      (cond ((null? set) (list x))
            ((
    < (weight x) (weight (car set))) (cons x set))
            (
    else
               (cons (car set) (adjoin
    -set x (cdr set))))))
    (define (make
    -leaf-set pairs)
      (
    if (null? pairs)
          
    '()
          (let ((pair (car pairs)))
            (adjoin
    -set (make-leaf (car pair) (cadr pair)) (make-leaf-set (cdr pairs))))))

    ;編碼
    (define (encode message tree)
      (
    if (null? message)
          
    '()
          (append (encode-symbol (car message) tree)
                  (encode (cdr message) tree))))
    (define (encode
    -symbol symbol tree)
      (define (iter branch)
        (
    if (leaf? branch)
            
    '()
            (if (memq symbol (symbols (left-branch branch)))
                (cons 0 (iter (left
    -branch branch)))
                (cons 
    1 (iter (right-branch branch))))
            ))
      (
    if (memq symbol (symbols tree))
          (iter tree)
          (display 
    "bad symbol -- UNKNOWN SYMBOL")))
    ;生成hufman樹(shù)
    (define (generate
    -huffman-tree pairs)
      (successive
    -merge (make-leaf-set pairs)))

    (define (successive
    -merge leaf-set)
      (
    if (null? (cdr leaf-set))
          (car leaf
    -set)
          (successive
    -merge (adjoin-set (make-code-tree (car leaf-set)
                                                        (cadr leaf
    -set))
                                        (cddr leaf
    -set)))))



    主站蜘蛛池模板: 亚洲午夜无码久久久久软件 | 亚洲一本大道无码av天堂| 一级看片免费视频囗交| 亚洲AV永久精品爱情岛论坛| 1a级毛片免费观看| 亚洲AV成人精品一区二区三区| 国产精品亚洲аv无码播放| 可以免费看的卡一卡二| 一级毛片a免费播放王色| 91亚洲导航深夜福利| 国产三级免费电影| 99免费视频观看| 免费又黄又爽又猛大片午夜| 亚洲高清不卡视频| 亚洲精品tv久久久久| 18禁美女裸体免费网站| 无人视频免费观看免费视频| 亚洲性色高清完整版在线观看| 免费一级毛片不卡在线播放| 国产精品色拉拉免费看| 国产精品一区二区三区免费| 亚洲色大成网站www尤物| 亚洲女久久久噜噜噜熟女| 日本免费福利视频| 中文字幕亚洲免费无线观看日本| 免费无码又爽又黄又刺激网站| 亚洲国产成人精品无码一区二区| 亚洲综合伊人久久大杳蕉| 白白国产永久免费视频| 97久久免费视频| a毛片免费全部在线播放**| 亚洲成a人片在线观看天堂无码 | 亚洲人成色7777在线观看| 国产日产成人免费视频在线观看| 亚洲视频免费在线看| 国产在线播放线91免费| 思思久久99热免费精品6| 中文无码亚洲精品字幕| 亚洲精品成人网站在线播放 | 亚洲国产超清无码专区| 久久久久亚洲av无码专区蜜芽|