【SICP练习】96 练习2.69

本文详细介绍了使用递归合并排序算法处理有序集合,并在此基础上构建Huffman树的过程。通过实例演示,阐述了如何通过传入不同大小的有序集合,逐步合并并最终得到具有最小权重元素的Huffman树。同时,本文强调了remianed-ordered-set在处理过程中的作用,确保了元素的有效删除与保留。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习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.youkuaiyun.com/nomasp


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

转载于:https://www.cnblogs.com/NoMasp/p/4786123.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值