(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))
(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))) ;由上面make-code-tree可知,weight位于表第4个位置 (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 (error "bad bit")))) (define (adjoin-set x set)
(cond ((null? set) (list x))
((< (weight x) (weight (car set))) (cons x set)) ;x<min(set) 所以放集合最前
(else (cons (car set)
(adjoin-set x (cdr set)))))) ; x比当前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 sample-tree ;测试编码树
(make-code-tree(make-leaf 'A 4)
(make-code-tree
(make-leaf 'B 2)
(make-code-tree (make-leaf 'D 1)
(make-leaf 'C 1))))) (define sample-message '(0 1 1 0 0 1 0 1 0 1 1 1 0)) ;测试编码 (decode sample-message sample-tree) ;解码

最新文章

  1. mybatis入门_配置文件的配置
  2. windows编程中关于“关闭窗口无法退出进程”的解决方法
  3. logback打印不出日志
  4. C#应用Newtonsoft.Json操作json
  5. WCF编程系列(四)配置文件
  6. 在HTML中插入回车换行
  7. c#基础编程—泛型
  8. Swift— Swift编码规范之命名规范-备
  9. CentOS 6.4 下安装 Apache
  10. ssd可以用作redo 盘吗?
  11. GPUImage的filter 响应处理链 的理解笔记
  12. onunload事件和onbeforeunload事件
  13. Archlinux下i3wm与urxvt的配置
  14. QUIC协议的分析,性能测试以及在QQ会员实践
  15. 值得推荐的C/C++框架和库 (真的很强大) c
  16. 问题集 &amp; 知识点
  17. maven发布jar包到nexus
  18. Perl:undef类型和defined()函数
  19. TF之AE:AE实现TF自带数据集数字真实值对比AE先encoder后decoder预测数字的精确对比—Jason niu
  20. 用virsh console vhosts 卡住

热门文章

  1. IntelliJ IDEA 添加junit插件
  2. 《算法》第二章部分程序 part 4
  3. FreeMarker生成Word文档
  4. python2.7与3.5版本中:编码格式及编码转换
  5. leetcode540
  6. usb之python(pyusb)
  7. python 如何获取当前文件/文件夹
  8. delphi 属性编辑器
  9. MySQL主从同步机制及同步中的问题处理
  10. UI5-学习篇-13-Eclipse 开发UI5应用