解: 1.25 这么写的话a的n次方会很大,大数需要额外的处理。原始的expmod基于这个结论: (a*b)%c=((a%c)*(b%c))%c,证明如下: 设a=nc+k,b=mc+h,则 (a*b)%c=((nc+k)*(mc+h))%c=(nmc^2+nhc+mkc+kh)%c=(k*h)%c=(...
分类:
其他好文 时间:
2014-08-18 00:23:13
阅读次数:
207
解:相关代码如下,时间测不出来 #lang?racket
(define?(square?x)
??(*?x?x))
(define?(smallest-divisor?n)
??(define?(divides??a?b)
????(=?(remainder?b?a)?0))
??(define?(next...
分类:
其他好文 时间:
2014-08-17 18:43:12
阅读次数:
187
问题见SICP P26此问题的递归方法很简单,类似于背包的思想。 即金额为amount的现金换成n种硬币的种类数 满足循环不变式: count_change(amount,n)=count_change(amount,n-1)+count_change(amount-amount_of_f...
分类:
其他好文 时间:
2014-08-13 14:35:16
阅读次数:
369
看sicp看到8皇后谜题, 突然兴致来了,尝试独立解决(scheme代码的好处在于,即使你瞟了眼答案, 也不会有任何收获, 除了知道那儿有一坨神秘的括号和英文字符外但Python代码就不同了),成功了,而且还是N皇后算法(把N个皇后放到N*N正方形方格中有多少种方法, N为自然数).最简单的情况是,...
分类:
其他好文 时间:
2014-08-11 17:21:23
阅读次数:
161
关于SICP一书中1.2.2节换零钱方式的研究及其迭代实现。
分类:
其他好文 时间:
2014-08-11 02:46:21
阅读次数:
299
尾递归和一般的递归不同在对内存的占用,普通递归创建stack累积而后计算收缩,尾递归只会占用恒量的内存(和迭代一样)。SICP中描述了一个内存占用曲线,用以上答案中的Python代码为例(普通递归):def recsum(x): if x == 1: return x else: r...
分类:
其他好文 时间:
2014-08-01 12:47:31
阅读次数:
353
解:这道题很有意思,结论是斐波那契数也可以用对数时间复杂度获得。 通过Tpq(Tpq)=TPQ建立方程,解得: P=pp+qq Q=qq+2pq 程序如下: (define?(fib?n)
??(define?(even??n)
????(=?(remainder?n?2...
分类:
其他好文 时间:
2014-07-26 17:26:42
阅读次数:
713
解: 公共过程 (define?(even??n)
??(=?(remainder?n?2)?0))
(define?(double?n)
??(+?n?n))
(define?(halve?n)
??(/?n?2)) 1.16: (define?(expt?b?n)
??(define?(iter?b?n?a)
...
分类:
其他好文 时间:
2014-07-26 15:41:42
阅读次数:
232
About the Book
To know more about programming, I have decided to start reading the famous Structure and Interpretation of Computer Programs (SICP, or the Wizard Book), which is first published by M...
分类:
其他好文 时间:
2014-07-26 15:32:35
阅读次数:
349
解: 1.14:空间是O(n)。步聚不好直接求,根据书中的描述,增长的阶是对某种规模所需资源的粗略度量,比如书中描述斐波那契的树形递归计算需要O(pow((1+sqrt(5))/2,n))步,可以把这个树形递归想像成是一个满二叉树...
分类:
其他好文 时间:
2014-07-24 10:57:06
阅读次数:
260