• 【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柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    第二阶段团队站立会议06
    第二阶段团队站立会议05
    Spring
    JVM
    线程池
    java内存模型
    线程
    接口与抽象类
    动态绑定,多态,static
    同步异步,并发并行概念的理解
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786123.html
Copyright © 2020-2023  润新知