【SICP练习】90 练习2.63
2015-09-08 00:00
253 查看
练习2.63
这两段代码的区别在于第二段用了迭代,相信可以大大减少计算时间。那么还是先来测试第一小题。需要的代码大家先敲进去。然后来定义图2-16中的三棵树了。(define tree-1 (make-tree 7 (make-tree 3 (make-tree 1 '() '()) (make-tree 5 '() '())) (make-tree 9 (make-tree '()) (make-tree 11 '() '())))) (define tree-2 (make-tree 3 (make-tree 1 '() '()) (make-tree 7 (make-tree 5 '() '()) (make-tree 9 '() (make-tree 11 '() '()))))) (define tree-3 (make-tree 5 (make-tree 3 (make-tree 1 '() '()) '()) (make-tree 9 (make-tree 7 '() '()) (make-tree 11 '() '()))))
这些相信大家都会定义的,make-tree的三个参数依次是结点,左右树枝。
对这三棵树,2段代码做6次测试,得到的结果毫无疑问的一致:
(1 3 5 7 9 11)
那么a小题就算完成了,至于b小题涉及到了这两个函数的执行效率,因此我们不得不对它们进行分解展开。
我们就用第一棵树,分别用两个函数来演示展开过程。
展开的过程真是太漫长了,但收获也是有的,我们发现其到最后一共有6次append,同时也有6次cons,而tree-1的节点一共有6个(当然了,tree-2和tree-3也是6个结点)。因此结论是使用append和cons的次数和结点的个数是正相关的。而append的复杂度比cons高,前者为n后者为1,因此这个函数的复杂度为n方。
tree->list-2的展开过程类似,其复杂度为n。因此虽然两者最终结果一样,但第二个函数更快速。
感谢访问,希望对您有所帮助。 欢迎关注或收藏、评论或点赞。
为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp
版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp
相关文章推荐
- Android之使用Http协议实现文件上传功能
- android 代码实现控件之间的间距
- [Android]在代码里运行另一个程序的方法
- 肯特·贝克:改变人生的代码整理魔法
- 命令行快速技巧:如何定位一个文件
- 网页恶意代码的预防
- 通晓网络测试常用命令
- 高手写的Tracer-Flash代码调试类代码下载
- CSS代码缩写技巧
- 非主流Q-zOne代码代码搜集第1/2页
- 渗透技术一瞥(图)
- 图片引发的溢出危机(图)
- CreateWeb.vbs 代码
- Lua中编译执行代码相关的函数详解
- jquery+CSS实现的多级竖向展开树形TRee菜单效果
- 更有效率的css代码编写第1/3页
- 代码中到底应不应当写注释?
- C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析
- SQL语言查询基础:连接查询 联合查询 代码
- C++实现图的邻接表存储和广度优先遍历实例分析