zoukankan      html  css  js  c++  java
  • 【SICP练习】96 练习2.69

    练习2.69

    如题目中所说,传入给successive-merge的参数是一个有序的集合。而这个函数将通过不断的归并得到最终的一个元素。如果传入的集合为0,也就是说返回的表应该是空表。如果传入的集合为1,那么将传入的集合的car部分取出来,这就是Huffman树了。而如果传入的集合大于1,那么就要多做些处理了。因为集合已经做好了排序,这里所谓的排序自然就是按照的权重了。因此最前面的元素其权重也最小。如题中所说,这里要调用make-code-tree来得到新的树。当然了,到了这一步应该将用掉的这两个元素从原来的集合中删除掉。然后将新的树和遗留下来的树通过adjoin-tree结合起来,再作为参数传给我们所写的这个函数,很明显,这是一个递归的过程。

    (define (successive-merge ordered-set)
        (cond ((= 0 (length ordered-set))())
              ((= 1 (length ordered-set)) (car ordered-set))
              (else (let ((new-sub-tree (make-code-tree (car ordered-set)
                                                      (cadr ordered-set)))
                        (remained-ordered-set (caddr ordered-set)))
                     (successive-merge (adjoin-set new-sub-tree
     remained-ordered-set))))))

    这里是用了一个remianed-ordered-set来间接的删掉用过的2个元素。



    感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。


    为使本文得到斧正和提问,转载请注明出处:
    http://blog.csdn.net/nomasp


    版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    FIR滤波器相关解释
    FIR数字信号滤波器
    图像中的插值
    对DDS的深度认识
    嵌入式媒体处理(EMP)中的编码和解码
    FPGA噪声干扰
    视频压缩概述
    ALTERA DDRII IP核使用
    MyEclipse的使用
    Java开发API文档资源
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786123.html
Copyright © 2011-2022 走看看