码迷,mamicode.com
首页 > 其他好文 > 详细

SICP 习题1.1 -1.15体会

时间:2014-11-01 19:14:57      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:使用   sp   on   log   代码   bs   时间   算法   应用   

下午没事, 开始做题, 花了3个多小时, 做到了1.15。

主要都花在了14题上, 下界的证明想了1个小时还是无法证明,只能暂时放弃, 明天看看算法导论再尝试下。


1.1 没啥好说的, 就是让你熟悉环境

1.2 没啥好说的, 就是让你转换思维,将中缀思维转换为前缀思维。 这个的确有点反人类。大概也是lisp最让人不爽的吧。

1.3 就是让你熟悉cond使用的,也没啥好说

1.4 有点惊喜, 的确比C语言更牛。运算符和变量函数等价了。

1.5 让大家体会下应用序的副作用。 很久前,刚开始编程就死在C语言的  if ( a || b)上。老实说,个人很讨厌这种编译器优化技术。

1.6 和1.5类似

1.7 这个题目很有意思, 让大家深入体会迭代的收敛条件有多重要。事实上, 书本没有展开讲, 迭代的初始化条件也很重要。

      比如, 1.0就只能得到正数根, -1.0就能得到负数根。所有, 没有写明约束条件的话, 写的代码都是错的。

      解法就是将收敛条件 改为  (新的迭代值 - 旧的迭代值 ) / (旧的迭代值) 的绝对值 <  0.001

1.8 主要是让你体会没有高阶函数, 反复做Ctrl +C Ctrl+V 有多呕心。

1.9 这个题目在MIT的视频上讲得比书本好多了, 建议看视频。 递归和迭代的本质区别就是, 递归必须将消息(结果)传回调用者, 而迭代则完全不需要。

1.10 数学题, 主要思路是先从低纬度开始递归,再不断提高到高纬度。

1.11 就是让你练练手,看看不是真学会了。

1.12 主要目的是让大家体会如何总结递归公式。 不过,老实说这本书重点也不在教会大家如何写递归。

1.13 这个题目有点意思, 搞过高中数学竞赛的估计一下就能反应过来,看到Fn = Fn-1 + Fn-2, 我们应该立即想到 x^2 = x +1

       显然, theta 和 r 均为这个方式式的2个根。余下的证明就转化为验证 F0 和F1是不是满足公式了。

1.14 第一步是归一化, 与具体是什么常数无关,所以我们可以转为为最小货币为1元。 线性空间就是求解树的最大层数, 很显然最长的树为一直选1的树, n。

        关于时间复杂度, 其实就是转化树的节点数。F(n, m)  m为货币种类数

        先考虑的是就1种货币,显然节点数为n, 即为0(n)

       然后考虑2种货币, 节点数就为 F(n, 2)  = F(n, 1) + F(n-1, 1) + ... + F(1, 1) 容易猜出来为O(n的2次方)

      那么对m,是不是为n的m次方呢。 关于上界, 用数学归纳法,很好证明。 现在就死在下界的证明上了。想了1个小时,还是无头绪。

 1.15 比较简单,尾递归, 实质是迭代, 迭代次数为 以3为底的对数 log3 (x * 10)


SICP 习题1.1 -1.15体会

标签:使用   sp   on   log   代码   bs   时间   算法   应用   

原文地址:http://blog.csdn.net/levinjoe/article/details/40682915

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!